{"version":3,"file":"js/253-a4d6ee8af2eb1113a3ce.js","mappings":"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","sources":["webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapMenuSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapMenuHeaderSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapMenuMonthSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapMenuSeasonSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/active_plan/store.ts","webpack://kurihara_city/./app/javascript/japan_concierge/export/store.ts","webpack://kurihara_city/./app/javascript/japan_concierge/i18n/i18n.js","webpack://kurihara_city/./app/javascript/japan_concierge/slices/activeDaySlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/backdropSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/configSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/customeSpotSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/exportSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapMenuCategorySlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/mapSpotSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalCalendarSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalPlanSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalSpotSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalStartSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalStaySlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/modalTransitSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/planDaySlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/planMenuSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/planSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/planSpotSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/popupSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/snsSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/spotSlideTileSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/slices/transitSlice.ts","webpack://kurihara_city/./app/javascript/japan_concierge/utils/api.ts","webpack://kurihara_city/./app/javascript/japan_concierge/utils/datetime.ts","webpack://kurihara_city/./app/javascript/japan_concierge/active_plan/hook.ts","webpack://kurihara_city/./app/javascript/japan_concierge/components/category/categoryButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/category/favoriteButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconAngleLeftComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconAngleRightComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/category/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/export/hook.ts","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconChevronRightComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/backToFavoriteListButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/mapComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/formComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/customSpotComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconPlusComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconCircleDeleteComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/favoriteSpotComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/originalSpotAddButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/favorite_spot_list/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconShareComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/foot_utility/exportButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/foot_utility/createPlanButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/foot_utility/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_route/totalTimeComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconCarComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconTrainComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconBicycleComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_route/priorityTransitComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconSortComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_route/optimizeRouteButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_route/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconTrashComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/map/planSpotMarkerComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/map/planSpotMarkersComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/map/mapSpotMarkerComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/map/mapSpotMarkersComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/map/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconDoubleDownComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/spot_slider/scrollButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconLinkComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/spot_slider/spotSlideTileCardComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/spot_slider/spotSliderComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/spot_slider/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_day_list/optimizeRouteButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_day_list/planDayComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_day_list/planDayAddButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconCalendarComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_day_list/planDayChangeButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_day_list/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_list/createPlanButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_list/planComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_list/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconPencilComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_name/exportButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconExternalLinkComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_name/nearSiteButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_name/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconClockComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconTimesComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconSort2Component.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/outsideLinkComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/planSpotComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/startTimeComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/transitInfoComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconWalkingComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconMapRootComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/transitComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/plan_spot/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/sns/signOutButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconGoogleComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconHeartComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconListComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconTwitterComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconHandSwipeComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/sns/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/favoriteSpotButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconQuestionCircleComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/helpButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconUserComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/loginButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/logoutButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/myPlanButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconBookComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/planEditButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/top_menu/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/website_list/websiteComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/website_list/backToPlanEditButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/website_list/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/active_plan/app.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentStayComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentTransitComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentStartComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentSpotButtonComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentSpotComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentCalendarComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalContentPlanComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconCloseModalComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/modal/modalComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/backdrop/backdropComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/popup/popupComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/active_plan/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/planDaySpotMarkerComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/mapComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/positionComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/planDaySpotComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/transitComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/spotListComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconMapLocationComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconChevronDownComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/index.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/export/app.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/icons/iconTimesCircleComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/components/export/modalComponent.tsx","webpack://kurihara_city/./app/javascript/japan_concierge/export/index.tsx","webpack://kurihara_city/./app/javascript/packs/server_rendering.js"],"sourcesContent":["import { createSlice } from '@reduxjs/toolkit';\n\nimport { MapMenuState } from '../types';\n\nconst initialState: MapMenuState = {\n isOpen: false,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapMenuSlice = createSlice({\n name: 'mapMenu',\n initialState,\n reducers: {\n reset: (state: MapMenuState) => {\n Object.assign(state, initialState);\n },\n toggle: (state: MapMenuState) => {\n state.isOpen = !state.isOpen;\n },\n },\n});\n\nexport const { reset, toggle } = mapMenuSlice.actions;\n\nexport default mapMenuSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { MapMenuHeaderState } from '../types/index';\n\nconst initialState: MapMenuHeaderState = {\n selectedIndex: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapMenuHeaderSlice = createSlice({\n name: 'mapMenuHeader',\n initialState,\n reducers: {\n reset: (state: MapMenuHeaderState) => {\n Object.assign(state, initialState);\n },\n setIndex: (state: MapMenuHeaderState, action: PayloadAction) => {\n state.selectedIndex = action.payload;\n },\n },\n});\n\nexport const { reset, setIndex } = mapMenuHeaderSlice.actions;\n\nexport default mapMenuHeaderSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { MapMenuMonthState } from '../types';\n\nconst initialState: MapMenuMonthState = {\n selectedMonth: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapMenuMonthSlice = createSlice({\n name: 'mapMenuMonth',\n initialState,\n reducers: {\n reset: (state: MapMenuMonthState) => {\n Object.assign(state, initialState);\n },\n setMonth: (state: MapMenuMonthState, action: PayloadAction) => {\n // 既に選択状態の場合は解除する必要がある(現行仕様)\n state.selectedMonth = state.selectedMonth === action.payload ? 0 : action.payload;\n },\n },\n});\n\nexport const { reset, setMonth } = mapMenuMonthSlice.actions;\n\nexport default mapMenuMonthSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { MapMenuSeasonState, Season } from '../types';\nimport { getMapMenuListToApi } from './mapMenuCategorySlice';\n\nconst initialState: MapMenuSeasonState = {\n seasons: [],\n selectedId: 0,\n selectedIndex: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapMenuSeasonSlice = createSlice({\n name: 'mapMenuSeason',\n initialState,\n reducers: {\n reset: (state: MapMenuSeasonState) => {\n Object.assign(state, initialState);\n },\n setId: (state: MapMenuSeasonState, action: PayloadAction) => {\n // 既に選択状態の場合は解除する必要がある(現行仕様)\n state.selectedId = state.selectedId === action.payload ? 0 : action.payload;\n },\n setIndex: (state: MapMenuSeasonState, action: PayloadAction) => {\n state.selectedIndex = action.payload;\n },\n setSeasons: (state: MapMenuSeasonState, action: PayloadAction<{ seasons: Season[] }>) => {\n state.seasons = action.payload.seasons;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getMapMenuListToApi.fulfilled, (state, action) => {\n mapMenuSeasonSlice.caseReducers.setSeasons(state, action);\n });\n },\n});\n\nexport const { reset, setId, setSeasons, setIndex } = mapMenuSeasonSlice.actions;\n\nexport default mapMenuSeasonSlice.reducer;\n","import { combineReducers } from 'redux';\nimport { configureStore } from '@reduxjs/toolkit';\n\nimport activeDayReducer from '../slices/activeDaySlice';\nimport backdropSliceReducer from '../slices/backdropSlice';\nimport configSliceReducer from '../slices/configSlice';\nimport customSpotReducer from '../slices/customeSpotSlice';\nimport modalSliceReducer from '../slices/modalSlice';\nimport modalCalendarReducer from '../slices/modalCalendarSlice';\nimport modalStaySliceReducer from '../slices/modalStaySlice';\nimport modalStartSliceReducer from '../slices/modalStartSlice';\nimport modalTransitReducer from '../slices/modalTransitSlice';\nimport modalFavoriteSpotReducer from '../slices/modalSpotSlice';\nimport modalPlanReducer from '../slices/modalPlanSlice';\nimport mapReducer from '../slices/mapSlice';\nimport mapMenuReducer from '../slices/mapMenuSlice';\nimport mapMenuHeaderReducer from '../slices/mapMenuHeaderSlice';\nimport mapMenuMonthReducer from '../slices/mapMenuMonthSlice';\nimport mapMenuSeasonReducer from '../slices/mapMenuSeasonSlice';\nimport mapMenuItemReducer from '../slices/mapMenuCategorySlice';\nimport mapSpotReducer from '../slices/mapSpotSlice';\nimport mapSlideTileReducer from '../slices/spotSlideTileSlice';\nimport planSliceReducer from '../slices/planSlice';\nimport planDayReducer from '../slices/planDaySlice';\nimport planMenuReducer from '../slices/planMenuSlice';\nimport planSpotReducer from '../slices/planSpotSlice';\nimport popupReducer from '../slices/popupSlice';\nimport snsReducer from '../slices/snsSlice';\nimport transitReducer from '../slices/transitSlice';\nimport { AppState } from '../types';\n\nconst rootReducer = combineReducers({\n activeDay: activeDayReducer,\n backdrop: backdropSliceReducer,\n config: configSliceReducer,\n customSpot: customSpotReducer,\n map: mapReducer,\n mapMenu: mapMenuReducer,\n mapMenuHeader: mapMenuHeaderReducer,\n mapMenuMonth: mapMenuMonthReducer,\n mapMenuSeason: mapMenuSeasonReducer,\n mapMenuCategory: mapMenuItemReducer,\n mapSpot: mapSpotReducer,\n modal: modalSliceReducer,\n modalCalendar: modalCalendarReducer,\n modalSpot: modalFavoriteSpotReducer,\n modalStay: modalStaySliceReducer,\n modalStart: modalStartSliceReducer,\n modalTransit: modalTransitReducer,\n modalPlan: modalPlanReducer,\n plan: planSliceReducer,\n planDay: planDayReducer,\n planMenu: planMenuReducer,\n planSpot: planSpotReducer,\n popup: popupReducer,\n sns: snsReducer,\n spotSlideTile: mapSlideTileReducer,\n transit: transitReducer,\n});\n\n// reducerにDate型を指定すると[A non-serializable value was detected in the state]のエラーが出力される\n// reduxの場合は発生しないが、redux-toolkitの場合のみ発生する模様。なので、serializableCheckを一旦falseに設定\nconst store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false }),\n});\n\nexport type AppDispatch = typeof store.dispatch;\nexport default store;\n","import { combineReducers } from 'redux';\nimport { configureStore } from '@reduxjs/toolkit';\n\nimport exportReducer from '../slices/exportSlice';\nimport { ExportAppState } from '../types/export_type';\nimport configSliceReducer from '../slices/configSlice';\nimport backdropSliceReducer from '../slices/backdropSlice';\nimport modalSliceReducer from '../slices/modalSlice';\nimport modalFavoriteSpotReducer from '../slices/modalSpotSlice';\n\nconst rootReducer = combineReducers({\n backdrop: backdropSliceReducer,\n config: configSliceReducer,\n export: exportReducer,\n modal: modalSliceReducer,\n modalSpot: modalFavoriteSpotReducer,\n});\n\n// reducerにDate型を指定すると[A non-serializable value was detected in the state]のエラーが出力される\n// reduxの場合は発生しないが、redux-toolkitの場合のみ発生する模様。なので、serializableCheckを一旦falseに設定\nconst store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false }),\n});\n\nexport type AppDispatch = typeof store.dispatch;\nexport default store;\n","// I18n.js\n// =======\n//\n// This small library provides the Rails I18n API on the Javascript.\n// You don't actually have to use Rails (or even Ruby) to use I18n.js.\n// Just make sure you export all translations in an object like this:\n//\n// I18n.translations.en = {\n// hello: \"Hello World\"\n// };\n//\n// See tests for specific formatting like numbers and dates.\n//\n\n// Using UMD pattern from\n// https://github.com/umdjs/umd#regular-module\n// `returnExports.js` version\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define('i18n', function () {\n return factory(root);\n });\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(root);\n } else {\n // Browser globals (root is window)\n root.I18n = factory(root);\n }\n})(this, function (global) {\n 'use strict';\n\n // Use previously defined object if exists in current scope\n var I18n = (global && global.I18n) || {};\n\n // Just cache the Array#slice function.\n var slice = Array.prototype.slice;\n\n // Apply number padding.\n var padding = function (number) {\n return ('0' + number.toString()).substr(-2);\n };\n\n // Improved toFixed number rounding function with support for unprecise floating points\n // JavaScript's standard toFixed function does not round certain numbers correctly (for example 0.105 with precision 2).\n var toFixed = function (number, precision) {\n return decimalAdjust('round', number, -precision).toFixed(precision);\n };\n\n // Is a given variable an object?\n // Borrowed from Underscore.js\n var isObject = function (obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object';\n };\n\n var isFunction = function (func) {\n var type = typeof func;\n return type === 'function';\n };\n\n // Check if value is different than undefined and null;\n var isSet = function (value) {\n return typeof value !== 'undefined' && value !== null;\n };\n\n // Is a given value an array?\n // Borrowed from Underscore.js\n var isArray = function (val) {\n if (Array.isArray) {\n return Array.isArray(val);\n }\n return Object.prototype.toString.call(val) === '[object Array]';\n };\n\n var isString = function (val) {\n return typeof val === 'string' || Object.prototype.toString.call(val) === '[object String]';\n };\n\n var isNumber = function (val) {\n return typeof val === 'number' || Object.prototype.toString.call(val) === '[object Number]';\n };\n\n var isBoolean = function (val) {\n return val === true || val === false;\n };\n\n var isNull = function (val) {\n return val === null;\n };\n\n var decimalAdjust = function (type, value, exp) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math[type](value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n value = value.toString().split('e');\n value = Math[type](+(value[0] + 'e' + (value[1] ? +value[1] - exp : -exp)));\n // Shift back\n value = value.toString().split('e');\n return +(value[0] + 'e' + (value[1] ? +value[1] + exp : exp));\n };\n\n var lazyEvaluate = function (message, scope) {\n if (isFunction(message)) {\n return message(scope);\n } else {\n return message;\n }\n };\n\n var merge = function (dest, obj) {\n var key, value;\n for (key in obj)\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (isString(value) || isNumber(value) || isBoolean(value) || isArray(value) || isNull(value)) {\n dest[key] = value;\n } else {\n if (dest[key] == null) dest[key] = {};\n merge(dest[key], value);\n }\n }\n return dest;\n };\n\n // Set default days/months translations.\n var DATE = {\n day_names: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n abbr_day_names: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n month_names: [\n null,\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n abbr_month_names: [null, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n meridian: ['AM', 'PM'],\n };\n\n // Set default number format.\n var NUMBER_FORMAT = {\n precision: 3,\n separator: '.',\n delimiter: ',',\n strip_insignificant_zeros: false,\n };\n\n // Set default currency format.\n var CURRENCY_FORMAT = {\n unit: '$',\n precision: 2,\n format: '%u%n',\n sign_first: true,\n delimiter: ',',\n separator: '.',\n };\n\n // Set default percentage format.\n var PERCENTAGE_FORMAT = {\n unit: '%',\n precision: 3,\n format: '%n%u',\n separator: '.',\n delimiter: '',\n };\n\n // Set default size units.\n var SIZE_UNITS = [null, 'kb', 'mb', 'gb', 'tb'];\n\n // Other default options\n var DEFAULT_OPTIONS = {\n // Set default locale. This locale will be used when fallback is enabled and\n // the translation doesn't exist in a particular locale.\n defaultLocale: 'en',\n // Set the current locale to `en`.\n locale: 'en',\n // Set the translation key separator.\n defaultSeparator: '.',\n // Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.\n placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm,\n // Set if engine should fallback to the default locale when a translation\n // is missing.\n fallbacks: false,\n // Set the default translation object.\n translations: {},\n // Set missing translation behavior. 'message' will display a message\n // that the translation is missing, 'guess' will try to guess the string\n missingBehaviour: 'message',\n // if you use missingBehaviour with 'message', but want to know that the\n // string is actually missing for testing purposes, you can prefix the\n // guessed string by setting the value here. By default, no prefix!\n missingTranslationPrefix: '',\n };\n\n // Set default locale. This locale will be used when fallback is enabled and\n // the translation doesn't exist in a particular locale.\n I18n.reset = function () {\n var key;\n for (key in DEFAULT_OPTIONS) {\n this[key] = DEFAULT_OPTIONS[key];\n }\n };\n\n // Much like `reset`, but only assign options if not already assigned\n I18n.initializeOptions = function () {\n var key;\n for (key in DEFAULT_OPTIONS)\n if (!isSet(this[key])) {\n this[key] = DEFAULT_OPTIONS[key];\n }\n };\n I18n.initializeOptions();\n\n // Return a list of all locales that must be tried before returning the\n // missing translation message. By default, this will consider the inline option,\n // current locale and fallback locale.\n //\n // I18n.locales.get(\"de-DE\");\n // // [\"de-DE\", \"de\", \"en\"]\n //\n // You can define custom rules for any locale. Just make sure you return a array\n // containing all locales.\n //\n // // Default the Wookie locale to English.\n // I18n.locales[\"wk\"] = function(locale) {\n // return [\"en\"];\n // };\n //\n I18n.locales = {};\n\n // Retrieve locales based on inline locale, current locale or default to\n // I18n's detection.\n I18n.locales.get = function (locale) {\n var result = this[locale] || this[I18n.locale] || this['default'];\n\n if (isFunction(result)) {\n result = result(locale);\n }\n\n if (isArray(result) === false) {\n result = [result];\n }\n\n return result;\n };\n\n // The default locale list.\n I18n.locales['default'] = function (locale) {\n var locales = [],\n list = [];\n // Handle the inline locale option that can be provided to\n // the `I18n.t` options.\n if (locale) {\n locales.push(locale);\n }\n\n // Add the current locale to the list.\n if (!locale && I18n.locale) {\n locales.push(I18n.locale);\n }\n\n // Add the default locale if fallback strategy is enabled.\n if (I18n.fallbacks && I18n.defaultLocale) {\n locales.push(I18n.defaultLocale);\n }\n\n // Locale code format 1:\n // According to RFC4646 (https://www.ietf.org/rfc/rfc4646.txt)\n // language codes for Traditional Chinese should be `zh-Hant`\n //\n // But due to backward compatibility\n // We use older version of IETF language tag\n // @see https://www.w3.org/TR/html401/struct/dirlang.html\n // @see https://en.wikipedia.org/wiki/IETF_language_tag\n //\n // Format: `language-code = primary-code ( \"-\" subcode )*`\n //\n // primary-code uses ISO639-1\n // @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n // @see https://www.iso.org/iso/home/standards/language_codes.htm\n //\n // subcode uses ISO 3166-1 alpha-2\n // @see https://en.wikipedia.org/wiki/ISO_3166\n // @see https://www.iso.org/iso/country_codes.htm\n //\n // @note\n // subcode can be in upper case or lower case\n // defining it in upper case is a convention only\n\n // Locale code format 2:\n // Format: `code = primary-code ( \"-\" region-code )*`\n // primary-code uses ISO 639-1\n // script-code uses ISO 15924\n // region-code uses ISO 3166-1 alpha-2\n // Example: zh-Hant-TW, en-HK, zh-Hant-CN\n //\n // It is similar to RFC4646 (or actually the same),\n // but seems to be limited to language, script, region\n\n // Compute each locale with its country code.\n // So this will return an array containing\n // `de-DE` and `de`\n // or\n // `zh-hans-tw`, `zh-hans`, `zh`\n // locales.\n locales.forEach(function (locale) {\n var localeParts = locale.split('-');\n var firstFallback = null;\n var secondFallback = null;\n if (localeParts.length === 3) {\n firstFallback = [localeParts[0], localeParts[1]].join('-');\n secondFallback = localeParts[0];\n } else if (localeParts.length === 2) {\n firstFallback = localeParts[0];\n }\n\n if (list.indexOf(locale) === -1) {\n list.push(locale);\n }\n\n if (!I18n.fallbacks) {\n return;\n }\n\n [firstFallback, secondFallback].forEach(function (nullableFallbackLocale) {\n // We don't want null values\n if (typeof nullableFallbackLocale === 'undefined') {\n return;\n }\n if (nullableFallbackLocale === null) {\n return;\n }\n // We don't want duplicate values\n //\n // Comparing with `locale` first is faster than\n // checking whether value's presence in the list\n if (nullableFallbackLocale === locale) {\n return;\n }\n if (list.indexOf(nullableFallbackLocale) !== -1) {\n return;\n }\n\n list.push(nullableFallbackLocale);\n });\n });\n\n // No locales set? English it is.\n if (!locales.length) {\n locales.push('en');\n }\n\n return list;\n };\n\n // Hold pluralization rules.\n I18n.pluralization = {};\n\n // Return the pluralizer for a specific locale.\n // If no specify locale is found, then I18n's default will be used.\n I18n.pluralization.get = function (locale) {\n return this[locale] || this[I18n.locale] || this['default'];\n };\n\n // The default pluralizer rule.\n // It detects the `zero`, `one`, and `other` scopes.\n I18n.pluralization['default'] = function (count) {\n switch (count) {\n case 0:\n return ['zero', 'other'];\n case 1:\n return ['one'];\n default:\n return ['other'];\n }\n };\n\n // Return current locale. If no locale has been set, then\n // the current locale will be the default locale.\n I18n.currentLocale = function () {\n return this.locale || this.defaultLocale;\n };\n\n // Check if value is different than undefined and null;\n I18n.isSet = isSet;\n\n // Find and process the translation using the provided scope and options.\n // This is used internally by some functions and should not be used as an\n // public API.\n I18n.lookup = function (scope, options) {\n options = options || {};\n\n var locales = this.locales.get(options.locale).slice(),\n locale,\n scopes,\n fullScope,\n translations;\n\n fullScope = this.getFullScope(scope, options);\n\n while (locales.length) {\n locale = locales.shift();\n scopes = fullScope.split(options.separator || this.defaultSeparator);\n translations = this.translations[locale];\n\n if (!translations) {\n continue;\n }\n while (scopes.length) {\n translations = translations[scopes.shift()];\n\n if (translations === undefined || translations === null) {\n break;\n }\n }\n\n if (translations !== undefined && translations !== null) {\n return translations;\n }\n }\n\n if (isSet(options.defaultValue)) {\n return lazyEvaluate(options.defaultValue, scope);\n }\n };\n\n // lookup pluralization rule key into translations\n I18n.pluralizationLookupWithoutFallback = function (count, locale, translations) {\n var pluralizer = this.pluralization.get(locale),\n pluralizerKeys = pluralizer(count),\n pluralizerKey,\n message;\n\n if (translations && isObject(translations)) {\n while (pluralizerKeys.length) {\n pluralizerKey = pluralizerKeys.shift();\n if (isSet(translations[pluralizerKey])) {\n message = translations[pluralizerKey];\n break;\n }\n }\n }\n\n return message;\n };\n\n // Lookup dedicated to pluralization\n I18n.pluralizationLookup = function (count, scope, options) {\n options = options || {};\n var locales = this.locales.get(options.locale).slice(),\n locale,\n scopes,\n translations,\n message;\n scope = this.getFullScope(scope, options);\n\n while (locales.length) {\n locale = locales.shift();\n scopes = scope.split(options.separator || this.defaultSeparator);\n translations = this.translations[locale];\n\n if (!translations) {\n continue;\n }\n\n while (scopes.length) {\n translations = translations[scopes.shift()];\n if (!isObject(translations)) {\n break;\n }\n if (scopes.length === 0) {\n message = this.pluralizationLookupWithoutFallback(count, locale, translations);\n }\n }\n if (typeof message !== 'undefined' && message !== null) {\n break;\n }\n }\n\n if (typeof message === 'undefined' || message === null) {\n if (isSet(options.defaultValue)) {\n if (isObject(options.defaultValue)) {\n message = this.pluralizationLookupWithoutFallback(count, options.locale, options.defaultValue);\n } else {\n message = options.defaultValue;\n }\n translations = options.defaultValue;\n }\n }\n\n return { message: message, translations: translations };\n };\n\n // Rails changed the way the meridian is stored.\n // It started with `date.meridian` returning an array,\n // then it switched to `time.am` and `time.pm`.\n // This function abstracts this difference and returns\n // the correct meridian or the default value when none is provided.\n I18n.meridian = function () {\n var time = this.lookup('time');\n var date = this.lookup('date');\n\n if (time && time.am && time.pm) {\n return [time.am, time.pm];\n } else if (date && date.meridian) {\n return date.meridian;\n } else {\n return DATE.meridian;\n }\n };\n\n // Merge serveral hash options, checking if value is set before\n // overwriting any value. The precedence is from left to right.\n //\n // I18n.prepareOptions({name: \"John Doe\"}, {name: \"Mary Doe\", role: \"user\"});\n // #=> {name: \"John Doe\", role: \"user\"}\n //\n I18n.prepareOptions = function () {\n var args = slice.call(arguments),\n options = {},\n subject;\n\n while (args.length) {\n subject = args.shift();\n\n if (typeof subject != 'object') {\n continue;\n }\n\n for (var attr in subject) {\n if (!subject.hasOwnProperty(attr)) {\n continue;\n }\n\n if (isSet(options[attr])) {\n continue;\n }\n\n options[attr] = subject[attr];\n }\n }\n\n return options;\n };\n\n // Generate a list of translation options for default fallbacks.\n // `defaultValue` is also deleted from options as it is returned as part of\n // the translationOptions array.\n I18n.createTranslationOptions = function (scope, options) {\n var translationOptions = [{ scope: scope }];\n\n // Defaults should be an array of hashes containing either\n // fallback scopes or messages\n if (isSet(options.defaults)) {\n translationOptions = translationOptions.concat(options.defaults);\n }\n\n // Maintain support for defaultValue. Since it is always a message\n // insert it in to the translation options as such.\n if (isSet(options.defaultValue)) {\n translationOptions.push({ message: options.defaultValue });\n }\n\n return translationOptions;\n };\n\n // Translate the given scope with the provided options.\n I18n.translate = function (scope, options) {\n options = options || {};\n\n var translationOptions = this.createTranslationOptions(scope, options);\n\n var translation;\n var usedScope = scope;\n\n var optionsWithoutDefault = this.prepareOptions(options);\n delete optionsWithoutDefault.defaultValue;\n\n // Iterate through the translation options until a translation\n // or message is found.\n var translationFound = translationOptions.some(function (translationOption) {\n if (isSet(translationOption.scope)) {\n usedScope = translationOption.scope;\n translation = this.lookup(usedScope, optionsWithoutDefault);\n } else if (isSet(translationOption.message)) {\n translation = lazyEvaluate(translationOption.message, scope);\n }\n\n if (translation !== undefined && translation !== null) {\n return true;\n }\n }, this);\n\n if (!translationFound) {\n return this.missingTranslation(scope, options);\n }\n\n if (typeof translation === 'string') {\n translation = this.interpolate(translation, options);\n } else if (isArray(translation)) {\n translation = translation.map(function (t) {\n return typeof t === 'string' ? this.interpolate(t, options) : t;\n }, this);\n } else if (isObject(translation) && isSet(options.count)) {\n translation = this.pluralize(options.count, usedScope, options);\n }\n\n return translation;\n };\n\n // This function interpolates the all variables in the given message.\n I18n.interpolate = function (message, options) {\n if (message == null) {\n return message;\n }\n\n options = options || {};\n var matches = message.match(this.placeholder),\n placeholder,\n value,\n name,\n regex;\n\n if (!matches) {\n return message;\n }\n\n while (matches.length) {\n placeholder = matches.shift();\n name = placeholder.replace(this.placeholder, '$1');\n\n if (isSet(options[name])) {\n value = options[name].toString().replace(/\\$/gm, '_#$#_');\n } else if (name in options) {\n value = this.nullPlaceholder(placeholder, message, options);\n } else {\n value = this.missingPlaceholder(placeholder, message, options);\n }\n\n regex = new RegExp(placeholder.replace(/{/gm, '\\\\{').replace(/}/gm, '\\\\}'));\n message = message.replace(regex, value);\n }\n\n return message.replace(/_#\\$#_/g, '$');\n };\n\n // Pluralize the given scope using the `count` value.\n // The pluralized translation may have other placeholders,\n // which will be retrieved from `options`.\n I18n.pluralize = function (count, scope, options) {\n options = this.prepareOptions({ count: String(count) }, options);\n var pluralizer, result;\n\n result = this.pluralizationLookup(count, scope, options);\n if (typeof result.translations === 'undefined' || result.translations == null) {\n return this.missingTranslation(scope, options);\n }\n\n if (typeof result.message !== 'undefined' && result.message != null) {\n return this.interpolate(result.message, options);\n } else {\n pluralizer = this.pluralization.get(options.locale);\n return this.missingTranslation(scope + '.' + pluralizer(count)[0], options);\n }\n };\n\n // Return a missing translation message for the given parameters.\n I18n.missingTranslation = function (scope, options) {\n //guess intended string\n if (this.missingBehaviour === 'guess') {\n //get only the last portion of the scope\n var s = scope.split('.').slice(-1)[0];\n //replace underscore with space && camelcase with space and lowercase letter\n return (\n (this.missingTranslationPrefix.length > 0 ? this.missingTranslationPrefix : '') +\n s.replace(/_/g, ' ').replace(/([a-z])([A-Z])/g, function (match, p1, p2) {\n return p1 + ' ' + p2.toLowerCase();\n })\n );\n }\n\n var localeForTranslation = options != null && options.locale != null ? options.locale : this.currentLocale();\n var fullScope = this.getFullScope(scope, options);\n var fullScopeWithLocale = [localeForTranslation, fullScope].join(options.separator || this.defaultSeparator);\n\n return '[missing \"' + fullScopeWithLocale + '\" translation]';\n };\n\n // Return a missing placeholder message for given parameters\n I18n.missingPlaceholder = function (placeholder, message, options) {\n return '[missing ' + placeholder + ' value]';\n };\n\n I18n.nullPlaceholder = function () {\n return I18n.missingPlaceholder.apply(I18n, arguments);\n };\n\n // Format number using localization rules.\n // The options will be retrieved from the `number.format` scope.\n // If this isn't present, then the following options will be used:\n //\n // - `precision`: `3`\n // - `separator`: `\".\"`\n // - `delimiter`: `\",\"`\n // - `strip_insignificant_zeros`: `false`\n //\n // You can also override these options by providing the `options` argument.\n //\n I18n.toNumber = function (number, options) {\n options = this.prepareOptions(options, this.lookup('number.format'), NUMBER_FORMAT);\n\n var negative = number < 0,\n string = toFixed(Math.abs(number), options.precision).toString(),\n parts = string.split('.'),\n precision,\n buffer = [],\n formattedNumber,\n format = options.format || '%n',\n sign = negative ? '-' : '';\n number = parts[0];\n precision = parts[1];\n\n while (number.length > 0) {\n buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));\n number = number.substr(0, number.length - 3);\n }\n\n formattedNumber = buffer.join(options.delimiter);\n\n if (options.strip_insignificant_zeros && precision) {\n precision = precision.replace(/0+$/, '');\n }\n\n if (options.precision > 0 && precision) {\n formattedNumber += options.separator + precision;\n }\n\n if (options.sign_first) {\n format = '%s' + format;\n } else {\n format = format.replace('%n', '%s%n');\n }\n\n formattedNumber = format.replace('%u', options.unit).replace('%n', formattedNumber).replace('%s', sign);\n\n return formattedNumber;\n };\n\n // Format currency with localization rules.\n // The options will be retrieved from the `number.currency.format` and\n // `number.format` scopes, in that order.\n //\n // Any missing option will be retrieved from the `I18n.toNumber` defaults and\n // the following options:\n //\n // - `unit`: `\"$\"`\n // - `precision`: `2`\n // - `format`: `\"%u%n\"`\n // - `delimiter`: `\",\"`\n // - `separator`: `\".\"`\n //\n // You can also override these options by providing the `options` argument.\n //\n I18n.toCurrency = function (number, options) {\n options = this.prepareOptions(\n options,\n this.lookup('number.currency.format', options),\n this.lookup('number.format', options),\n CURRENCY_FORMAT\n );\n\n return this.toNumber(number, options);\n };\n\n // Localize several values.\n // You can provide the following scopes: `currency`, `number`, or `percentage`.\n // If you provide a scope that matches the `/^(date|time)/` regular expression\n // then the `value` will be converted by using the `I18n.toTime` function.\n //\n // It will default to the value's `toString` function.\n //\n I18n.localize = function (scope, value, options) {\n options || (options = {});\n\n switch (scope) {\n case 'currency':\n return this.toCurrency(value, options);\n case 'number':\n scope = this.lookup('number.format', options);\n return this.toNumber(value, scope);\n case 'percentage':\n return this.toPercentage(value, options);\n default:\n var localizedValue;\n\n if (scope.match(/^(date|time)/)) {\n localizedValue = this.toTime(scope, value, options);\n } else {\n localizedValue = value.toString();\n }\n\n return this.interpolate(localizedValue, options);\n }\n };\n\n // Parse a given `date` string into a JavaScript Date object.\n // This function is time zone aware.\n //\n // The following string formats are recognized:\n //\n // yyyy-mm-dd\n // yyyy-mm-dd[ T]hh:mm::ss\n // yyyy-mm-dd[ T]hh:mm::ss\n // yyyy-mm-dd[ T]hh:mm::ssZ\n // yyyy-mm-dd[ T]hh:mm::ss+0000\n // yyyy-mm-dd[ T]hh:mm::ss+00:00\n // yyyy-mm-dd[ T]hh:mm::ss.123Z\n //\n I18n.parseDate = function (date) {\n var matches, convertedDate, fraction;\n // A date input of `null` or `undefined` will be returned as-is\n if (date == null) {\n return date;\n }\n // we have a date, so just return it.\n if (typeof date === 'object') {\n return date;\n }\n\n matches = date\n .toString()\n .match(/(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})([\\.,]\\d{1,3})?)?(Z|\\+00:?00)?/);\n\n if (matches) {\n for (var i = 1; i <= 6; i++) {\n matches[i] = parseInt(matches[i], 10) || 0;\n }\n\n // month starts on 0\n matches[2] -= 1;\n\n fraction = matches[7] ? 1000 * ('0' + matches[7]) : null;\n\n if (matches[8]) {\n convertedDate = new Date(\n Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction)\n );\n } else {\n convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction);\n }\n } else if (typeof date == 'number') {\n // UNIX timestamp\n convertedDate = new Date();\n convertedDate.setTime(date);\n } else if (date.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/)) {\n // This format `Wed Jul 20 13:03:39 +0000 2011` is parsed by\n // webkit/firefox, but not by IE, so we must parse it manually.\n convertedDate = new Date();\n convertedDate.setTime(Date.parse([RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5].join(' ')));\n } else if (date.match(/\\d+ \\d+:\\d+:\\d+ [+-]\\d+ \\d+/)) {\n // a valid javascript format with timezone info\n convertedDate = new Date();\n convertedDate.setTime(Date.parse(date));\n } else {\n // an arbitrary javascript string\n convertedDate = new Date();\n convertedDate.setTime(Date.parse(date));\n }\n\n return convertedDate;\n };\n\n // Formats time according to the directives in the given format string.\n // The directives begins with a percent (%) character. Any text not listed as a\n // directive will be passed through to the output string.\n //\n // The accepted formats are:\n //\n // %a - The abbreviated weekday name (Sun)\n // %A - The full weekday name (Sunday)\n // %b - The abbreviated month name (Jan)\n // %B - The full month name (January)\n // %c - The preferred local date and time representation\n // %d - Day of the month (01..31)\n // %-d - Day of the month (1..31)\n // %H - Hour of the day, 24-hour clock (00..23)\n // %-H/%k - Hour of the day, 24-hour clock (0..23)\n // %I - Hour of the day, 12-hour clock (01..12)\n // %-I/%l - Hour of the day, 12-hour clock (1..12)\n // %m - Month of the year (01..12)\n // %-m - Month of the year (1..12)\n // %M - Minute of the hour (00..59)\n // %-M - Minute of the hour (0..59)\n // %p - Meridian indicator (AM or PM)\n // %P - Meridian indicator (am or pm)\n // %S - Second of the minute (00..60)\n // %-S - Second of the minute (0..60)\n // %w - Day of the week (Sunday is 0, 0..6)\n // %y - Year without a century (00..99)\n // %-y - Year without a century (0..99)\n // %Y - Year with century\n // %z/%Z - Timezone offset (+0545)\n //\n I18n.strftime = function (date, format, options) {\n var options = this.lookup('date', options),\n meridianOptions = I18n.meridian();\n if (!options) {\n options = {};\n }\n\n options = this.prepareOptions(options, DATE);\n\n if (isNaN(date.getTime())) {\n throw new Error('I18n.strftime() requires a valid date object, but received an invalid date.');\n }\n\n var weekDay = date.getDay(),\n day = date.getDate(),\n year = date.getFullYear(),\n month = date.getMonth() + 1,\n hour = date.getHours(),\n hour12 = hour,\n meridian = hour > 11 ? 1 : 0,\n secs = date.getSeconds(),\n mins = date.getMinutes(),\n offset = date.getTimezoneOffset(),\n absOffsetHours = Math.floor(Math.abs(offset / 60)),\n absOffsetMinutes = Math.abs(offset) - absOffsetHours * 60,\n timezoneoffset =\n (offset > 0 ? '-' : '+') +\n (absOffsetHours.toString().length < 2 ? '0' + absOffsetHours : absOffsetHours) +\n (absOffsetMinutes.toString().length < 2 ? '0' + absOffsetMinutes : absOffsetMinutes);\n if (hour12 > 12) {\n hour12 = hour12 - 12;\n } else if (hour12 === 0) {\n hour12 = 12;\n }\n\n format = format.replace('%a', options.abbr_day_names[weekDay]);\n format = format.replace('%A', options.day_names[weekDay]);\n format = format.replace('%b', options.abbr_month_names[month]);\n format = format.replace('%B', options.month_names[month]);\n format = format.replace('%d', padding(day));\n format = format.replace('%e', day);\n format = format.replace('%-d', day);\n format = format.replace('%H', padding(hour));\n format = format.replace('%-H', hour);\n format = format.replace('%k', hour);\n format = format.replace('%I', padding(hour12));\n format = format.replace('%-I', hour12);\n format = format.replace('%l', hour12);\n format = format.replace('%m', padding(month));\n format = format.replace('%-m', month);\n format = format.replace('%M', padding(mins));\n format = format.replace('%-M', mins);\n format = format.replace('%p', meridianOptions[meridian]);\n format = format.replace('%P', meridianOptions[meridian].toLowerCase());\n format = format.replace('%S', padding(secs));\n format = format.replace('%-S', secs);\n format = format.replace('%w', weekDay);\n format = format.replace('%y', padding(year));\n format = format.replace('%-y', padding(year).replace(/^0+/, ''));\n format = format.replace('%Y', year);\n format = format.replace('%z', timezoneoffset);\n format = format.replace('%Z', timezoneoffset);\n\n return format;\n };\n\n // Convert the given dateString into a formatted date.\n I18n.toTime = function (scope, dateString, options) {\n var date = this.parseDate(dateString),\n format = this.lookup(scope, options);\n // A date input of `null` or `undefined` will be returned as-is\n if (date == null) {\n return date;\n }\n\n var date_string = date.toString();\n if (date_string.match(/invalid/i)) {\n return date_string;\n }\n\n if (!format) {\n return date_string;\n }\n\n return this.strftime(date, format, options);\n };\n\n // Convert a number into a formatted percentage value.\n I18n.toPercentage = function (number, options) {\n options = this.prepareOptions(\n options,\n this.lookup('number.percentage.format', options),\n this.lookup('number.format', options),\n PERCENTAGE_FORMAT\n );\n\n return this.toNumber(number, options);\n };\n\n // Convert a number into a readable size representation.\n I18n.toHumanSize = function (number, options) {\n var kb = 1024,\n size = number,\n iterations = 0,\n unit,\n precision,\n fullScope;\n\n while (size >= kb && iterations < 4) {\n size = size / kb;\n iterations += 1;\n }\n\n if (iterations === 0) {\n fullScope = this.getFullScope('number.human.storage_units.units.byte', options);\n unit = this.t(fullScope, { count: size });\n precision = 0;\n } else {\n fullScope = this.getFullScope('number.human.storage_units.units.' + SIZE_UNITS[iterations], options);\n unit = this.t(fullScope);\n precision = size - Math.floor(size) === 0 ? 0 : 1;\n }\n\n options = this.prepareOptions(options, { unit: unit, precision: precision, format: '%n%u', delimiter: '' });\n\n return this.toNumber(size, options);\n };\n\n I18n.getFullScope = function (scope, options) {\n options = options || {};\n\n // Deal with the scope as an array.\n if (isArray(scope)) {\n scope = scope.join(options.separator || this.defaultSeparator);\n }\n\n // Deal with the scope option provided through the second argument.\n //\n // I18n.t('hello', {scope: 'greetings'});\n //\n if (options.scope) {\n scope = [options.scope, scope].join(options.separator || this.defaultSeparator);\n }\n\n return scope;\n };\n /**\n * Merge obj1 with obj2 (shallow merge), without modifying inputs\n * @param {Object} obj1\n * @param {Object} obj2\n * @returns {Object} Merged values of obj1 and obj2\n *\n * In order to support ES3, `Object.prototype.hasOwnProperty.call` is used\n * Idea is from:\n * https://stackoverflow.com/questions/8157700/object-has-no-hasownproperty-method-i-e-its-undefined-ie8\n */\n I18n.extend = function (obj1, obj2) {\n if (typeof obj1 === 'undefined' && typeof obj2 === 'undefined') {\n return {};\n }\n return merge(obj1, obj2);\n };\n\n // Set aliases, so we can save some typing.\n I18n.t = I18n.translate.bind(I18n);\n I18n.l = I18n.localize.bind(I18n);\n I18n.p = I18n.pluralize.bind(I18n);\n\n return I18n;\n});\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { ActiveDayState } from '../types';\nimport { getActivePlanToApi } from './planSlice';\n\nconst initialState: ActiveDayState = {\n day: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst activeDaySlice = createSlice({\n name: 'activeDay',\n initialState,\n reducers: {\n setDay: (state: ActiveDayState, action: PayloadAction) => {\n state.day = action.payload;\n },\n },\n extraReducers: (builder) => {\n // 画面表示時/リロード時にサーバから取得時に呼ばれる。\n builder.addCase(getActivePlanToApi.fulfilled, (state, action) => {\n const { planDays } = action.payload;\n // 初期表示以外はDAYの設定は行わない。DAYの設定はreducer.setDayのみ\n if (planDays.length > 0 && state.day === 0) {\n state.day = planDays[0].day;\n }\n });\n },\n});\n\nexport const { setDay } = activeDaySlice.actions;\nexport default activeDaySlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { BackdropState } from '../types';\nimport { toggle as toggleModal } from './modalSlice';\nimport { updateStay, updateModeAndTransitTime } from './planSpotSlice';\nimport { updateStartTime } from './planDaySlice';\nimport { setPlan } from './planSlice';\n\nconst initialState: BackdropState = {\n isShown: false,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst backdropSlice = createSlice({\n name: 'backdrop',\n initialState,\n reducers: {\n toggle: (state: BackdropState) => {\n state.isShown = !state.isShown;\n },\n },\n extraReducers: (builder) => {\n builder.addMatcher(toggleModal.match, (state: BackdropState) => {\n backdropSlice.caseReducers.toggle(state);\n });\n builder.addMatcher(updateStay.match, (state: BackdropState) => {\n state.isShown = false;\n });\n builder.addMatcher(updateModeAndTransitTime.match, (state: BackdropState) => {\n state.isShown = false;\n });\n builder.addMatcher(updateStartTime.match, (state: BackdropState) => {\n state.isShown = false;\n });\n builder.addMatcher(setPlan.match, (state: BackdropState) => {\n state.isShown = false;\n });\n },\n});\n\nexport const { toggle } = backdropSlice.actions;\n\nexport default backdropSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { ConfigProps } from '../types';\n\nconst initialState: ConfigProps = {\n eventMenu: false,\n eventMonth: false,\n eventSeason: false,\n helpButton: false,\n helpUrl: '',\n helpUrlAnchorLink: '',\n iframe: false,\n nearSite: false,\n rootPath: '',\n parentUrl: '',\n snsAuth: false,\n socialMediaAuth: {\n name: '',\n provider: '',\n fingerprint: '',\n },\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst configSlice = createSlice({\n name: 'config',\n initialState,\n reducers: {\n setConfig: (state: ConfigProps, action: PayloadAction) => {\n Object.assign(state, action.payload);\n },\n },\n});\n\nexport const { setConfig } = configSlice.actions;\nexport default configSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\n\nimport { AppState, CustomSpotState, FavoriteSpot, PlanSpot } from '../types';\nimport appApi from '../utils/api';\n\nconst initialState: CustomSpotState = {\n isShow: false,\n isNameError: false,\n isStayError: false,\n name: '',\n stay: 30,\n lat: 0,\n lng: 0,\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// オリジナルスポット登録処理\nexport const customSpotCreateToApi = createAsyncThunk<\n { planSpots: PlanSpot[]; favoriteSpots: FavoriteSpot[] },\n CustomSpotState\n>('customSpot/create', async (arg: CustomSpotState, thunkAPI) => {\n const { name, lat, lng, stay } = arg;\n const response = await appApi.post(`${(thunkAPI.getState() as AppState).config.rootPath}/custom_spots`, {\n japan_concierge_custom_spot_form: {\n name,\n lat,\n lng,\n stay,\n },\n });\n return response.data;\n});\n\n// オリジナルスポット名取得処理\nexport const getCustomSpotNameToApi = createAsyncThunk('customSpot/new', async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/custom_spots/new`);\n return response.data;\n});\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst customSpotSlice = createSlice({\n name: 'config',\n initialState,\n reducers: {\n reset: (state: CustomSpotState) => {\n Object.assign(state, initialState);\n },\n setIsShow: (state: CustomSpotState, action: PayloadAction) => {\n state.isShow = action.payload;\n },\n setName: (state: CustomSpotState, action: PayloadAction) => {\n state.name = action.payload;\n state.isNameError = state.name.trim() === '';\n },\n setStay: (state: CustomSpotState, action: PayloadAction) => {\n state.stay = action.payload;\n state.isStayError = state.stay <= 0;\n },\n setIsNameError: (state: CustomSpotState, action: PayloadAction) => {\n state.isNameError = action.payload;\n },\n setIsStayError: (state: CustomSpotState, action: PayloadAction) => {\n state.isStayError = action.payload;\n },\n setLatLng: (state: CustomSpotState, action: PayloadAction<{ lat: number; lng: number }>) => {\n state.lat = action.payload.lat;\n state.lng = action.payload.lng;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(customSpotCreateToApi.fulfilled, (state: CustomSpotState) => {\n customSpotSlice.caseReducers.reset(state);\n });\n builder.addCase(getCustomSpotNameToApi.fulfilled, (state: CustomSpotState, action) => {\n state.name = action.payload;\n });\n },\n});\n\nexport const { reset, setIsShow, setName, setStay, setLatLng, setIsNameError, setIsStayError } =\n customSpotSlice.actions;\nexport default customSpotSlice.reducer;\n","import { createAsyncThunk, createSelector, createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { Export, ExportAppState, ExportPlanDay, ExportPlanDaySpot } from '../types/export_type';\nimport appApi from '../utils/api';\n\nconst initialState: Export = {\n id: '',\n exportPlan: undefined,\n isShowMap: new Array(0),\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// active_planの情報を取得する処理\nexport const getExportInfoToApi = createAsyncThunk<{ export: Export }, void>(\n 'export/show',\n async (arg: void, thunkAPI) => {\n const { id } = (thunkAPI.getState() as ExportAppState).export;\n const response = await appApi.get(`${(thunkAPI.getState() as ExportAppState).config.rootPath}/exports/${id}`);\n return response.data;\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst exportSlice = createSlice({\n name: 'export',\n initialState,\n reducers: {\n reset: (state: Export) => {\n Object.assign(state, initialState);\n },\n setId: (state: Export, action: PayloadAction) => {\n state.id = action.payload;\n },\n setExport: (state: Export, action: PayloadAction<{ export: Export }>) => {\n state.exportPlan = action.payload.export.exportPlan;\n // Day数分初期化しておく\n state.isShowMap = new Array(action.payload.export.exportPlan?.exportPlanDays?.length || 0).fill(false);\n },\n setIsShowMap: (state: Export, action: PayloadAction) => {\n state.isShowMap[action.payload] = !state.isShowMap[action.payload];\n },\n },\n extraReducers: (builder) => {\n // 画面表示時/リロード時にサーバから取得時に呼ばれる。\n builder.addCase(getExportInfoToApi.fulfilled, (state, action) => {\n exportSlice.caseReducers.setExport(state, action);\n });\n },\n});\n\ntype ReturnSelectorType = (state: ExportAppState) => S;\n// 指定したPlanDayのPlanSpotの中から指定されたpositionより前のPlanSpotの滞在時間と移動時間の合計値を算出する\nexport const totalStayTransitTimeSelector = (day: number, position: number): ReturnSelectorType =>\n createSelector([(state: ExportAppState) => state.export], (_export: Export) => {\n let totalStayTime = 0;\n const exportPlanDay = _export.exportPlan?.exportPlanDays?.filter((planDay: ExportPlanDay) => planDay.day === day);\n if (exportPlanDay && exportPlanDay.length > 0) {\n // 指定されたpositionより前の滞在時間を抽出するため、自分を含まない\n const planDaySpotsNoSelf = exportPlanDay[0]?.exportPlanDaySpots?.filter(\n (planDaySpot: ExportPlanDaySpot) => planDaySpot.position < position\n );\n planDaySpotsNoSelf?.forEach((planDaySpot: ExportPlanDaySpot) => {\n totalStayTime += planDaySpot.stay;\n });\n\n // 指定されたpositionより前の移動時間を抽出するため、自分を含む\n const exportPlanDaySpots = exportPlanDay[0]?.exportPlanDaySpots?.filter(\n (planDaySpot: ExportPlanDaySpot) => planDaySpot.position <= position && planDaySpot.position > 0\n );\n\n exportPlanDaySpots?.forEach((planDaySpot: ExportPlanDaySpot) => {\n totalStayTime += planDaySpot.transitTime;\n });\n }\n return totalStayTime;\n });\n\nexport const { reset, setId, setIsShowMap } = exportSlice.actions;\nexport default exportSlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { MapMenuCategoryState, Category, AppState, Season } from '../types';\nimport appApi from '../utils/api';\n\nconst initialState: MapMenuCategoryState = {\n categories: [],\n selectedIndex: 0, // 0:未選択状態 1:お気にり 2:スタート地点 3〜:カテゴリ\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n\n// カテゴリー情報を取得する処理\nexport const getMapMenuListToApi = createAsyncThunk<\n { categories: Category[]; isStartSpot: boolean; seasons: Season[] },\n void\n>('mapMenuCategory/index', async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_menus`);\n return response.data;\n});\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapMenuCategorySlice = createSlice({\n name: 'mapMenuCategory',\n initialState,\n reducers: {\n reset: (state: MapMenuCategoryState) => {\n Object.assign(state, initialState);\n },\n setIndex: (state: MapMenuCategoryState, action: PayloadAction) => {\n // 既に選択状態の場合は解除する必要がある(現行仕様)\n state.selectedIndex = state.selectedIndex === action.payload ? 0 : action.payload;\n },\n setCategories: (state: MapMenuCategoryState, action: PayloadAction<{ categories: Category[] }>) => {\n state.categories = action.payload.categories;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getMapMenuListToApi.fulfilled, (state, action) => {\n mapMenuCategorySlice.caseReducers.setCategories(state, action);\n });\n },\n});\n\nexport const { reset, setIndex, setCategories } = mapMenuCategorySlice.actions;\n\nexport default mapMenuCategorySlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { MapState, MapSpot } from '../types';\nimport { setDay } from './activeDaySlice';\nimport { getActivePlanToApi } from './planSlice';\n\n// ここでinfowWindowを初期化したいのですが、new google.maps.InfoWindow()を実行するとgoogleが読み込まれるタイミングによりエラーとなるため\n// ここではundefinedを設定する\nconst initialState: MapState = {\n infoWindow: undefined,\n isInitializeMapCenter: true,\n isPlanSpot: false,\n isRunFitBounds: false,\n map: undefined,\n mapSpot: undefined,\n selectedPlanSpotId: 0,\n selectedPosition: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapSlice = createSlice({\n name: 'map',\n initialState,\n reducers: {\n reset: (state: MapState) => {\n Object.assign(state, initialState);\n },\n setMap: (state: MapState, action: PayloadAction) => {\n state.map = action.payload;\n },\n openInfoWindow: (\n state: MapState,\n action: PayloadAction<{ mapSpot: MapSpot | undefined; isPlanSpot: boolean; position: number }>\n ) => {\n // infowindowはシステム上1つしか表示しない仕様のため、infowindow内で各ボタン押下時の処理をevent.addEventListenerで登録しているため、\n // 解除する必要がある。(event.removeEventListener) マーカーをクリックすされる度に前回表示していた内容を破棄するために以下の処理が必要\n if (state.infoWindow) {\n state.infoWindow?.close();\n state.infoWindow = undefined;\n }\n state.infoWindow = new google.maps.InfoWindow();\n state.mapSpot = action.payload.mapSpot;\n state.isPlanSpot = action.payload.isPlanSpot;\n state.selectedPosition = action.payload.position;\n },\n closeInfoWindow: (state: MapState) => {\n state.infoWindow?.close();\n state.infoWindow = undefined;\n state.mapSpot = undefined;\n },\n focusSpotOnMap: (state: MapState, action: PayloadAction) => {\n if (state.map) {\n state.map.panTo(action.payload);\n }\n },\n setIsRunFitBounds: (state: MapState, action: PayloadAction) => {\n state.isRunFitBounds = action.payload;\n },\n setIsInitializeMapCenter: (state: MapState, action: PayloadAction) => {\n state.isInitializeMapCenter = action.payload;\n },\n },\n extraReducers: (builder) => {\n // 画面表示時/リロード時にサーバから取得時に呼ばれる。\n builder.addCase(getActivePlanToApi.fulfilled, (state) => {\n mapSlice.caseReducers.setIsRunFitBounds(state, { payload: true, type: mapSlice.actions.setIsRunFitBounds.type });\n });\n // planDay選択時にinfowindowを閉じる\n builder.addMatcher(setDay.match, (state: MapState) => {\n mapSlice.caseReducers.closeInfoWindow(state);\n });\n },\n});\n\nexport const {\n reset,\n setMap,\n openInfoWindow,\n closeInfoWindow,\n focusSpotOnMap,\n setIsRunFitBounds,\n setIsInitializeMapCenter,\n} = mapSlice.actions;\n\nexport default mapSlice.reducer;\n","import {\n createAsyncThunk,\n createEntityAdapter,\n createSelector,\n createSlice,\n type EntityState,\n type PayloadAction,\n} from '@reduxjs/toolkit';\n\nimport { MapSpot, AppState, MarkerType, PlanSpot, ActiveDayState, MapSpotEntityState } from '../types';\nimport appApi from '../utils/api';\n\nconst mapSpotAdapter = createEntityAdapter({\n // idフィールドに`id`キー以外のものを使いたい場合は下記のように明示的に指定する\n selectId: (spot: MapSpot) => spot.id,\n});\nconst initialState: MapSpotEntityState = mapSpotAdapter.getInitialState({\n isLoading: false,\n selectedId: 0,\n});\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n\n// お気に入りスポット情報を取得する処理\nexport const getFavoriteMapSpotToApi = createAsyncThunk(\n 'mapSpot/favoriteSpotIndex',\n async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_spots`, {\n params: { q: { favorite: true } },\n });\n return response.data;\n }\n);\n\n// スタートスポット情報を取得する処理\nexport const getStartSpotToApi = createAsyncThunk(\n 'mapSpot/startSpotIndex',\n async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_spots`, {\n params: { q: { start_spot: true } },\n });\n return response.data;\n }\n);\n\n// カテゴリースポット情報を取得する処理\nexport const getSpotToApi = createAsyncThunk('mapSpot/spotIndex', async (arg: number, thunkAPI) => {\n // 地図の中心座標を取得し、小数点6桁四捨五入(railsに合わせてます)\n const lat = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lat() || 1) * 100000) / 100000;\n const lng = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lng() || 1) * 100000) / 100000;\n\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_spots`, {\n params: { q: { categories: [arg], lat, lng } },\n });\n return response.data;\n});\n\n// イベント季節のスポット情報を取得する処理\nexport const getSeasonSpotToApi = createAsyncThunk(\n 'mapSpot/seasonSpotIndex',\n async (id: number, thunkAPI) => {\n // 地図の中心座標を取得し、小数点6桁四捨五入(railsに合わせてます)\n const lat = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lat() || 1) * 100000) / 100000;\n const lng = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lng() || 1) * 100000) / 100000;\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_spots`, {\n params: { q: { season: id, lat, lng } },\n });\n return response.data;\n }\n);\n\n// イベント月のスポット情報を取得する処理\nexport const getMonthSpotToApi = createAsyncThunk(\n 'mapSpot/seasonSpotIndex',\n async (id: number, thunkAPI) => {\n // 地図の中心座標を取得し、小数点6桁四捨五入(railsに合わせてます)\n const lat = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lat() || 1) * 100000) / 100000;\n const lng = Math.round(((thunkAPI.getState() as AppState).map.map?.getCenter()?.lng() || 1) * 100000) / 100000;\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/map_spots`, {\n params: { q: { month: id, lat, lng } },\n });\n return response.data;\n }\n);\n\n//-------------------------------------------------------------\n// Selector\n//-------------------------------------------------------------\n// 全件取得用\nexport const mapSpotSelectors = mapSpotAdapter.getSelectors((state: AppState) => state.mapSpot);\n\n// Marker表示用 marker/infowindowに必要な情報を抽出し、interface MarkerTypeとして配列に設定・返却する\nexport const mapSpotMarkerSelector = createSelector(\n [(state: AppState) => state.mapSpot, (state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (\n state: MapSpotEntityState,\n statePlanSpot: EntityState,\n stateActiveDay: ActiveDayState\n ): (MarkerType | undefined)[] =>\n Object.values(state.entities).map((mapSpot) => {\n // planSpotに含まれているスポットの場合は除外する\n const isPlanSpot = Object.values(statePlanSpot.entities).find((planSpot) => {\n if (planSpot && planSpot.spot && mapSpot) {\n return planSpot.spot.id === mapSpot.id && stateActiveDay.day === planSpot.day;\n }\n return false;\n });\n\n if (isPlanSpot) {\n return undefined;\n }\n\n if (mapSpot) {\n return {\n day: stateActiveDay.day,\n name: mapSpot.spot.name,\n lat: mapSpot.spot.lat,\n lng: mapSpot.spot.lng,\n image: mapSpot.markerImage,\n spot: mapSpot,\n };\n }\n return undefined;\n })\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst mapSpotSlice = createSlice({\n name: 'mapSpot',\n initialState,\n reducers: {\n reset: (state: MapSpotEntityState) => {\n Object.assign(state, initialState);\n },\n setMapSpot: (state: MapSpotEntityState, action: PayloadAction) => {\n if (action.payload.length > 0) {\n mapSpotAdapter.addMany(state, action);\n }\n },\n removeMapSpot: (state: MapSpotEntityState) => {\n mapSpotAdapter.removeAll(state);\n },\n setLoading: (state: MapSpotEntityState, action: PayloadAction) => {\n state.isLoading = action.payload;\n },\n setSelectedId: (state: MapSpotEntityState, action: PayloadAction) => {\n state.selectedId = action.payload;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getFavoriteMapSpotToApi.pending, (state: MapSpotEntityState) => {\n state.isLoading = true;\n });\n builder.addCase(getFavoriteMapSpotToApi.rejected, (state: MapSpotEntityState) => {\n state.isLoading = false;\n });\n builder.addCase(getFavoriteMapSpotToApi.fulfilled, (state: MapSpotEntityState, action) => {\n mapSpotSlice.caseReducers.setMapSpot(state, action);\n state.isLoading = false;\n });\n builder.addCase(getStartSpotToApi.pending, (state: MapSpotEntityState) => {\n state.isLoading = true;\n });\n builder.addCase(getStartSpotToApi.rejected, (state: MapSpotEntityState) => {\n state.isLoading = false;\n });\n builder.addCase(getStartSpotToApi.fulfilled, (state: MapSpotEntityState, action) => {\n mapSpotSlice.caseReducers.setMapSpot(state, action);\n state.isLoading = false;\n });\n builder.addCase(getSpotToApi.pending, (state: MapSpotEntityState) => {\n state.isLoading = true;\n });\n builder.addCase(getSpotToApi.rejected, (state: MapSpotEntityState, action) => {\n if (action.payload === 'interruption') {\n // 中断されたタイミングにより、既に非同期処理が実施されて結果をセットしてしまっている可能性がある為、検索結果を一旦削除する\n mapSpotSlice.caseReducers.removeMapSpot(state);\n }\n state.isLoading = false;\n });\n builder.addCase(getSpotToApi.fulfilled, (state: MapSpotEntityState, action) => {\n mapSpotSlice.caseReducers.setMapSpot(state, action);\n state.isLoading = false;\n });\n builder.addCase(getSeasonSpotToApi.fulfilled, (state, action) => {\n mapSpotSlice.caseReducers.setMapSpot(state, action);\n });\n },\n});\n\nexport const { reset, setMapSpot, setLoading, setSelectedId } = mapSpotSlice.actions;\n\nexport default mapSpotSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { ModalCalendarState } from '../types';\nimport { toggle } from './modalSlice';\n\nconst initialState: ModalCalendarState = {\n isShown: false,\n startDate: undefined,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalCalendarSlice = createSlice({\n name: 'modalCalendar',\n initialState,\n reducers: {\n reset: (state: ModalCalendarState) => {\n Object.assign(state, initialState);\n },\n setDate: (state: ModalCalendarState, action: PayloadAction) => {\n state.startDate = action.payload;\n state.isShown = true;\n },\n changedDate: (state: ModalCalendarState, action: PayloadAction) => {\n state.startDate = new Date(action.payload);\n },\n },\n extraReducers: (builder) => {\n // Modalが閉じられたらModalFavoriteSpotStateを初期化\n builder.addMatcher(toggle.match, (state: ModalCalendarState) => {\n modalCalendarSlice.caseReducers.reset(state);\n });\n },\n});\n\nexport const { reset, setDate, changedDate } = modalCalendarSlice.actions;\n\nexport default modalCalendarSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { ModalPlanState, Plan } from '../types';\n\nimport { toggle } from './modalSlice';\nimport { setPlan as planSliceSetPlan } from './planSlice';\n\nconst initialState: ModalPlanState = {\n isError: false,\n plan: undefined,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalPlanSlice = createSlice({\n name: 'modalPlan',\n initialState,\n reducers: {\n reset(state: ModalPlanState) {\n Object.assign(state, initialState);\n },\n setPlan: (state: ModalPlanState, action: PayloadAction) => {\n state.plan = action.payload;\n },\n changeName: (state: ModalPlanState, action: PayloadAction) => {\n if (state.plan) {\n state.plan.name = action.payload;\n }\n state.isError = !action.payload;\n },\n changeMemo: (state: ModalPlanState, action: PayloadAction) => {\n if (state.plan) {\n state.plan.memo = action.payload;\n }\n },\n },\n extraReducers: (builder) => {\n // 確定ボタン押下後planSpotを初期化\n builder.addMatcher(planSliceSetPlan.match, (state: ModalPlanState) => {\n modalPlanSlice.caseReducers.reset(state);\n });\n // Modalが閉じられたらplanSpotを初期化\n builder.addMatcher(toggle.match, (state: ModalPlanState) => {\n modalPlanSlice.caseReducers.reset(state);\n });\n },\n});\n\nexport const { reset, setPlan, changeName, changeMemo } = modalPlanSlice.actions;\nexport default modalPlanSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { ModalState } from '../types';\nimport { updateStay, updateModeAndTransitTime } from './planSpotSlice';\nimport { updateStartTime } from './planDaySlice';\nimport { setPlan } from './planSlice';\n\nconst initialState: ModalState = {\n isOpen: false,\n contentId: undefined,\n clientHeight: 0,\n iframeRect: undefined,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalSlice = createSlice({\n name: 'modal',\n initialState,\n reducers: {\n reset: (state: ModalState) => {\n Object.assign(state, initialState);\n },\n toggle: (state: ModalState) => {\n state.isOpen = !state.isOpen;\n },\n setContentId: (state: ModalState, action: PayloadAction) => {\n state.contentId = action.payload;\n },\n setClientHeight: (state: ModalState, action: PayloadAction) => {\n state.clientHeight = action.payload;\n },\n setIframeTop: (state: ModalState, action: PayloadAction) => {\n state.iframeRect = action.payload;\n },\n resetIsOpen: (state: ModalState) => {\n state.isOpen = false;\n },\n },\n extraReducers: (builder) => {\n builder.addMatcher(updateStay.match, (state: ModalState) => {\n modalSlice.caseReducers.resetIsOpen(state);\n });\n builder.addMatcher(updateModeAndTransitTime.match, (state: ModalState) => {\n modalSlice.caseReducers.resetIsOpen(state);\n });\n builder.addMatcher(updateStartTime.match, (state: ModalState) => {\n modalSlice.caseReducers.resetIsOpen(state);\n });\n builder.addMatcher(setPlan.match, (state: ModalState) => {\n modalSlice.caseReducers.resetIsOpen(state);\n });\n },\n});\n\nexport const { reset, toggle, setContentId, setClientHeight, setIframeTop } = modalSlice.actions;\n\nexport default modalSlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { AppState, ModalSpotState, Spot } from '../types';\n\nimport { toggle } from './modalSlice';\nimport appApi from '../utils/api';\n\nconst initialState: ModalSpotState = {\n spot: undefined,\n selectedImageIndex: 0,\n isDisplayRemoveButton: false,\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// スポット一覧情報を取得する処理\nexport const getSpotToApi = createAsyncThunk('favoriteSpot/spotIndex', async (id: number, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/spot_modals/${id}`);\n return response.data;\n});\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalSpotSlice = createSlice({\n name: 'modalFavoriteSpot',\n initialState,\n reducers: {\n reset: (state: ModalSpotState) => {\n Object.assign(state, initialState);\n },\n selectedImage: (state: ModalSpotState, action: PayloadAction) => {\n state.selectedImageIndex = action.payload;\n },\n setSpot: (state: ModalSpotState, action: PayloadAction) => {\n state.spot = action.payload;\n },\n setIsDisplayRemoveButton: (state: ModalSpotState, action: PayloadAction) => {\n state.isDisplayRemoveButton = action.payload;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getSpotToApi.fulfilled, (state: ModalSpotState, action) => {\n modalSpotSlice.caseReducers.setSpot(state, action);\n });\n // Modalが閉じられたらModalFavoriteSpotStateを初期化\n builder.addMatcher(toggle.match, (state: ModalSpotState) => {\n modalSpotSlice.caseReducers.reset(state);\n });\n },\n});\n\nexport const { reset, selectedImage, setSpot, setIsDisplayRemoveButton } = modalSpotSlice.actions;\nexport default modalSpotSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { ModalStartState } from '../types';\n\nimport { toggle } from './modalSlice';\nimport { updateStartTime } from './planDaySlice';\n\nconst initialState: ModalStartState = {\n id: 0,\n inputHour: 0,\n inputMinute: 0,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalStartSlice = createSlice({\n name: 'modalStart',\n initialState,\n reducers: {\n reset: (state: ModalStartState) => {\n Object.assign(state, initialState);\n },\n setTime: (\n state: ModalStartState,\n action: PayloadAction<{ id: number; startTimeHour: number; startTimeMinute: number }>\n ) => {\n const { id, startTimeHour, startTimeMinute } = action.payload;\n state.id = id;\n state.inputHour = startTimeHour;\n state.inputMinute = startTimeMinute;\n },\n changeInputHour: (state: ModalStartState, action: PayloadAction) => {\n const inputVal = Number(action.payload);\n if (inputVal < 0 || inputVal >= 24) return;\n state.inputHour = inputVal;\n },\n changeInputMinute: (state: ModalStartState, action: PayloadAction) => {\n const inputVal = Number(action.payload);\n if (inputVal < 0 || inputVal > 59) return;\n state.inputMinute = inputVal;\n },\n },\n extraReducers: (builder) => {\n // Modalが閉じられたらplanSpotを初期化\n builder.addMatcher(toggle.match, (state: ModalStartState) => {\n modalStartSlice.caseReducers.reset(state);\n });\n builder.addMatcher(updateStartTime.match, (state: ModalStartState) => {\n modalStartSlice.caseReducers.reset(state);\n });\n },\n});\n\nexport const { reset, setTime, changeInputHour, changeInputMinute } = modalStartSlice.actions;\nexport default modalStartSlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { AppState, ModalStayState, PlanSpot } from '../types';\n\nimport { toggle } from './modalSlice';\nimport { updateStay } from './planSpotSlice';\nimport appApi from '../utils/api';\n\nconst initialState: ModalStayState = {\n planSpot: undefined,\n isChangeRecommended: false,\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// 滞在時間更新処理\nexport const updateStayToApi = createAsyncThunk(\n 'modalStay/updateStay',\n async (arg: PlanSpot, thunkAPI) => {\n const { planId, id, stay, stayMemo } = arg;\n const { isChangeRecommended } = (thunkAPI.getState() as AppState).modalStay;\n await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planId}/plan_spots/${id}`, {\n custom_stay_value: isChangeRecommended ? null : stay,\n custom_stay_memo: stayMemo,\n });\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalStaySlice = createSlice({\n name: 'modalStay',\n initialState,\n reducers: {\n setPlanSpot: (state: ModalStayState, action: PayloadAction) => {\n state.planSpot = action.payload;\n },\n setStayTime: (state: ModalStayState, action: PayloadAction) => {\n if (state.planSpot) {\n state.planSpot.stay = Number(action.payload);\n }\n state.isChangeRecommended = false;\n },\n changeToRecommendedValue: (state: ModalStayState) => {\n if (state.planSpot) {\n state.planSpot.stay = state.planSpot.spot?.stay || 0;\n state.isChangeRecommended = true;\n }\n },\n changeMemo: (state: ModalStayState, action: PayloadAction) => {\n if (state.planSpot) {\n state.planSpot.stayMemo = action.payload;\n }\n },\n },\n extraReducers: (builder) => {\n // Modalが閉じられたらplanSpotを初期化\n builder.addMatcher(toggle.match, (state: ModalStayState) => {\n state.planSpot = undefined;\n });\n builder.addMatcher(updateStay.match, (state: ModalStayState) => {\n state.planSpot = undefined;\n });\n },\n});\n\nexport const { setPlanSpot, setStayTime, changeToRecommendedValue, changeMemo } = modalStaySlice.actions;\nexport default modalStaySlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { AppState, ModalTransitState, Transit } from '../types';\n\nimport { toggle } from './modalSlice';\nimport { updateModeAndTransitTime } from './planSpotSlice';\nimport appApi from '../utils/api';\n\nconst initialState: ModalTransitState = {\n transit: undefined,\n mode: '',\n isChangeRecommended: false,\n isDefaultValue: false,\n isDisabled: true,\n transitTime: 0,\n transitRemark: '',\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// 移動時間更新処理\nexport const updateTransitTimeToApi = createAsyncThunk(\n 'modalTransit/update',\n async (arg: ModalTransitState, thunkAPI) => {\n const { isChangeRecommended, transitTime, transitRemark, transit, mode } = arg;\n const { id } = (thunkAPI.getState() as AppState).plan;\n await appApi.patch(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${id}/plan_spots/${transit?.toPlanSpotId}`,\n {\n custom_transit_value: isChangeRecommended ? null : transitTime,\n custom_transit_memo: transitRemark,\n mode,\n }\n );\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst modalTransitSlice = createSlice({\n name: 'modalTransit',\n initialState,\n reducers: {\n reset(state: ModalTransitState) {\n Object.assign(state, initialState);\n },\n setTransit: (\n state: ModalTransitState,\n action: PayloadAction<{ transit: Transit | undefined; transitTime: number; transitRemark: string; mode: string }>\n ) => {\n state.transit = action.payload.transit;\n state.transitTime = action.payload.transitTime;\n state.transitRemark = action.payload.transitRemark;\n state.mode = action.payload.mode;\n state.isDisabled = state.mode === 'auto' && state.transitRemark === '';\n },\n changeMode: (state: ModalTransitState, action: PayloadAction) => {\n if (state.transit) {\n state.mode = action.payload;\n state.isChangeRecommended = true;\n state.isDisabled = false;\n state.isDefaultValue = false;\n if (state.mode === 'car') {\n state.transitTime = state.transit.car || 0;\n } else if (state.mode === 'train') {\n state.transitTime = state.transit.train || 0;\n } else if (state.mode === 'walk') {\n state.transitTime = state.transit.walk || 0;\n } else if (state.mode === 'bicycle') {\n state.transitTime = state.transit.bicycle || 0;\n }\n }\n },\n changeTransitTime: (state: ModalTransitState, action: PayloadAction) => {\n if (state.transit) {\n state.transitTime = Number(action.payload);\n state.isChangeRecommended = false;\n state.isDisabled = false;\n state.isDefaultValue = false;\n }\n },\n changeTransitRemark: (state: ModalTransitState, action: PayloadAction) => {\n if (state.transit) {\n state.transitRemark = action.payload;\n state.isDefaultValue = false;\n state.isDisabled = false;\n state.isChangeRecommended = false;\n }\n },\n setDefaultValue: (state: ModalTransitState) => {\n state.mode = 'auto';\n state.transitRemark = '';\n state.isDefaultValue = true;\n state.isDisabled = true;\n state.isChangeRecommended = false;\n if (state.transit?.autoDisplayMode === 'car') {\n state.transitTime = state.transit.car || 0;\n } else if (state.transit?.autoDisplayMode === 'train') {\n state.transitTime = state.transit.train || 0;\n } else if (state.transit?.autoDisplayMode === 'walk') {\n state.transitTime = state.transit.walk || 0;\n } else if (state.transit?.autoDisplayMode === 'bicycle') {\n state.transitTime = state.transit.bicycle || 0;\n }\n },\n },\n extraReducers: (builder) => {\n // Modalが閉じられたらplanSpotを初期化\n builder.addMatcher(toggle.match, (state: ModalTransitState) => {\n modalTransitSlice.caseReducers.reset(state);\n });\n // 確定ボタン押下後planSpotを初期化\n builder.addMatcher(updateModeAndTransitTime.match, (state: ModalTransitState) => {\n modalTransitSlice.caseReducers.reset(state);\n });\n },\n});\n\nexport const { reset, setTransit, changeMode, changeTransitTime, changeTransitRemark, setDefaultValue } =\n modalTransitSlice.actions;\nexport default modalTransitSlice.reducer;\n","import {\n createAsyncThunk,\n createEntityAdapter,\n createSelector,\n createSlice,\n type EntityId,\n type EntityState,\n type PayloadAction,\n} from '@reduxjs/toolkit';\n\nimport { getActivePlanToApi } from './planSlice';\nimport { ActiveDayState, AppState, PlanDay } from '../types';\nimport appApi from '../utils/api';\n\nconst planDayAdapter = createEntityAdapter({\n // idフィールドに`id`キー以外のものを使いたい場合は下記のように明示的に指定する\n selectId: (planDay: PlanDay) => planDay.id,\n sortComparer: (a: PlanDay, b: PlanDay) => {\n if (a.day > b.day) {\n return 1;\n }\n return -1;\n },\n});\nconst initialState: EntityState = planDayAdapter.getInitialState({\n selectedDay: 1,\n});\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\nexport const updatePlanDayToApi = createAsyncThunk('planDay/update', async (arg: void, thunkAPI) => {\n const { id } = (thunkAPI.getState() as AppState).plan;\n const { entities } = (thunkAPI.getState() as AppState).planDay;\n const { day } = (thunkAPI.getState() as AppState).activeDay;\n const planDay = Object.values(entities).find((p: PlanDay | undefined) => p?.day === day);\n if (planDay) {\n await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan/plan_days/${planDay.id}`, {\n plan_id: id,\n plan_day: {\n start_time_hour: planDay.startTimeHour,\n start_time_minute: planDay.startTimeMinute,\n fixed_goal: planDay.fixedGoal,\n },\n });\n }\n});\n\n// DAYの追加\nexport const createPlanDayToApi = createAsyncThunk('planDay/create', async (arg: void, thunkAPI) => {\n const { id } = (thunkAPI.getState() as AppState).plan;\n const response = await appApi.post(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan/plan_days/`, {\n plan_id: id,\n });\n return response.data;\n});\n\n// DAYの削除\nexport const deletePlanDayToApi = createAsyncThunk(\n 'planDay/delete',\n async (arg: EntityId, thunkAPI) => {\n const { id } = (thunkAPI.getState() as AppState).plan;\n await appApi.delete(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan/plan_days/${arg}`, {\n data: { plan_id: id },\n });\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst planDaySlice = createSlice({\n name: 'planDay',\n initialState,\n reducers: {\n reset: (state: EntityState) => {\n Object.assign(state, initialState);\n },\n setPlanDay: (state: EntityState, action: PayloadAction<{ planDays: PlanDay[] }>) => {\n planDayAdapter.setAll(state, action.payload.planDays);\n },\n deletePlanDay: (state: EntityState, action: PayloadAction) => {\n planDayAdapter.removeOne(state, action.payload);\n state.ids.forEach((id: EntityId, index: number) => {\n planDayAdapter.updateOne(state, {\n id,\n changes: { day: index + 1 },\n });\n });\n },\n updateStartTime: (\n state: EntityState,\n action: PayloadAction<{ id: number; startTimeHour: number; startTimeMinute: number }>\n ) => {\n const { id, startTimeHour, startTimeMinute } = action.payload;\n planDayAdapter.updateOne(state, {\n id,\n changes: { startTimeHour, startTimeMinute },\n });\n },\n },\n extraReducers: (builder) => {\n // 画面表示時/リロード時にサーバから取得時に呼ばれる。\n builder.addCase(getActivePlanToApi.fulfilled, (state: EntityState, action) => {\n planDaySlice.caseReducers.setPlanDay(state, action);\n });\n // DAY追加時にサーバから取得時に呼ばれる。\n builder.addCase(createPlanDayToApi.fulfilled, (state: EntityState, action) => {\n planDayAdapter.setAll(state, action.payload);\n });\n },\n});\n\n//-------------------------------------------------------------\n// Selector\n//-------------------------------------------------------------\n// 全件取得用\nexport const planDaySelectors = planDayAdapter.getSelectors((state: AppState) => state.planDay);\n\n// 選択されているPlanDayを取得する\nexport const activePlanDaySelector = createSelector(\n [(state: AppState) => state.planDay, (state: AppState) => state.activeDay],\n (state: EntityState, stateActiveDay: ActiveDayState): PlanDay | undefined => {\n const ids = state.ids.filter((id: EntityId) => stateActiveDay.day === (state.entities[id]?.day || 0));\n return state.entities[ids[0]];\n }\n);\n\nexport const { reset, setPlanDay, deletePlanDay, updateStartTime } = planDaySlice.actions;\nexport default planDaySlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { Plan, PlanMenu, FavoriteSpot, Website, AppState } from '../types';\nimport appApi from '../utils/api';\nimport { customSpotCreateToApi } from './customeSpotSlice';\n\nconst initialState: PlanMenu = {\n favoriteSpots: [],\n isWebsiteShown: false,\n plans: [],\n websites: [],\n selectedIndex: 0,\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// プラン情報を取得する処理\nexport const getPlanListToApi = createAsyncThunk('planMenu/index', async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/plans`);\n return response.data;\n});\n\n// お気に入りスポット一覧情報を取得する処理\nexport const getFavoriteSpotListToApi = createAsyncThunk(\n 'planMenu/favoriteSpotIndex',\n async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/favorite_spots`);\n return response.data;\n }\n);\n\n// お気に入りスポットを削除する処理\nexport const deleteFavoriteSpotToApi = createAsyncThunk(\n 'planMenu/favoriteSpotDelete',\n async (id: number, thunkAPI) => {\n await appApi.delete(`${(thunkAPI.getState() as AppState).config.rootPath}/favorite_spots/${id}`);\n }\n);\n\n// 近隣サイト一覧情報を取得する処理\nexport const getWebsiteListToApi = createAsyncThunk(\n 'planMenu/websiteIndex',\n async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/websites`);\n return response.data;\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst planMenuSlice = createSlice({\n name: 'planMenu',\n initialState,\n reducers: {\n reset: (state: PlanMenu) => {\n Object.assign(state, initialState);\n },\n deletePlan: (state: PlanMenu, action: PayloadAction) => {\n state.plans = state.plans.filter((plan: Plan) => plan.id !== action.payload);\n },\n deleteFavoriteSpot: (state: PlanMenu, action: PayloadAction) => {\n state.favoriteSpots = state.favoriteSpots.filter(\n (favoriteSpot: FavoriteSpot) => favoriteSpot.id !== action.payload\n );\n },\n changePlanName: (state: PlanMenu, action: PayloadAction<{ id: number; name: string }>) => {\n const { id, name } = action.payload;\n state.plans = state.plans.map((plan: Plan) => {\n if (plan.id === id) {\n plan.name = name;\n }\n return plan;\n });\n },\n setPlans: (state: PlanMenu, action: PayloadAction) => {\n state.plans = action.payload;\n },\n setFavoriteSpots: (state: PlanMenu, action: PayloadAction) => {\n state.favoriteSpots = action.payload;\n },\n setWebsites: (state: PlanMenu, action: PayloadAction) => {\n state.websites = action.payload;\n },\n setIndex: (state: PlanMenu, action: PayloadAction) => {\n if (action.payload < 5) {\n state.selectedIndex = action.payload;\n }\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getPlanListToApi.fulfilled, (state: PlanMenu, action) => {\n planMenuSlice.caseReducers.setPlans(state, action);\n });\n builder.addCase(getPlanListToApi.rejected, (state: PlanMenu) => {\n state.plans = [];\n });\n builder.addCase(getFavoriteSpotListToApi.fulfilled, (state: PlanMenu, action) => {\n planMenuSlice.caseReducers.setFavoriteSpots(state, action);\n });\n builder.addCase(getFavoriteSpotListToApi.rejected, (state: PlanMenu) => {\n state.favoriteSpots = [];\n });\n builder.addCase(getWebsiteListToApi.fulfilled, (state: PlanMenu, action) => {\n planMenuSlice.caseReducers.setWebsites(state, action);\n });\n builder.addCase(getWebsiteListToApi.rejected, (state: PlanMenu) => {\n state.websites = [];\n state.isWebsiteShown = false;\n });\n builder.addCase(customSpotCreateToApi.fulfilled, (state: PlanMenu, action) => {\n state.selectedIndex = 0;\n state.favoriteSpots = action.payload.favoriteSpots;\n });\n },\n});\n\nexport const {\n reset,\n deletePlan,\n deleteFavoriteSpot,\n changePlanName,\n setPlans,\n setFavoriteSpots,\n setWebsites,\n setIndex,\n} = planMenuSlice.actions;\nexport default planMenuSlice.reducer;\n","import { createAsyncThunk, createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { AppState, Plan, PlanDay, PlanSpot } from '../types';\nimport appApi from '../utils/api';\n\nimport { formatDate } from '../utils/datetime';\n\n// new Date().setHours(9)としてstartTimeに指定するとエラーとなる\nconst nowTime = new Date();\nnowTime.setHours(9);\n\nconst initialState: Plan = {\n id: 0,\n memo: '',\n name: '',\n priorityCar: false,\n priorityMode: '',\n startDate: undefined,\n startTime: nowTime,\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// プラン名/メモを更新する処理\nexport const updateNameToApi = createAsyncThunk('plan/updateName', async (arg: void, thunkAPI) => {\n const { id, name, memo } = (thunkAPI.getState() as AppState).plan;\n if (!name) {\n return;\n }\n\n await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${id}`, { name, memo });\n});\n\n// ゴールロック・解除, 優先する交通手段を更新\nexport const updatePlanToApi = createAsyncThunk('plan/update', async (arg: void, thunkAPI) => {\n const { id, priorityMode } = (thunkAPI.getState() as AppState).plan;\n await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${id}`, {\n priority_mode: priorityMode,\n });\n});\n\n// プランを削除\nexport const deletePlanToApi = createAsyncThunk<{ plan: Plan }, number>(\n 'plan/delete',\n async (arg: number, thunkAPI) => {\n const response = await appApi.delete(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${arg}`);\n if (response.data === 'no_content') {\n return { plan: undefined };\n }\n return { plan: response.data };\n }\n);\n\n// プランを作成\nexport const createPlanToApi = createAsyncThunk<{ plan: Plan }, void>('plan/create', async (arg: void, thunkAPI) => {\n const response = await appApi.post(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan/`);\n return { plan: response.data };\n});\n\n// アクティブプランに設定する処理\nexport const updateActivePlanToApi = createAsyncThunk<{ plan: Plan; planSpots: PlanSpot[] }, number>(\n 'activePlan/update',\n async (id: number, thunkAPI) => {\n const response = await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan`, {\n plan_id: id,\n });\n return response.data;\n }\n);\n\n// active_planの情報を取得する処理\nexport const getActivePlanToApi = createAsyncThunk<{ plan: Plan; planDays: PlanDay[]; planSpots: PlanSpot[] }, void>(\n 'activePlan/show',\n async (arg: void, thunkAPI) => {\n const response = await appApi.get(`${(thunkAPI.getState() as AppState).config.rootPath}/active_plan/`);\n return response.data;\n }\n);\n\n// 出発日を更新する処理\nexport const updateStartDateToApi = createAsyncThunk(\n 'plan/updateStartTime',\n async (arg: void, thunkAPI) => {\n const { id, startDate } = (thunkAPI.getState() as AppState).plan;\n if (!startDate) return;\n // 日付がJSTのためそのままAPIに渡すと日付がずれるので文字列として日付のみをサーバへ送信\n await appApi.patch(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${id}`, {\n start_date: formatDate(startDate, 0, '-'),\n });\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst planSlice = createSlice({\n name: 'plan',\n initialState,\n reducers: {\n reset: (state: Plan) => {\n Object.assign(state, initialState);\n },\n setPlan: (state: Plan, action: PayloadAction<{ plan: Plan }>) => {\n if (action.payload.plan) {\n Object.assign(state, action.payload.plan);\n }\n },\n changePriorityCar: (state: Plan, action: PayloadAction) => {\n state.priorityCar = action.payload;\n },\n changePriorityMode: (state: Plan, action: PayloadAction) => {\n state.priorityMode = action.payload;\n },\n changeDate: (state: Plan, action: PayloadAction) => {\n state.startDate = action.payload;\n },\n setPlanId: (state: Plan, action: PayloadAction) => {\n state.id = action.payload;\n },\n },\n extraReducers: (builder) => {\n // 画面表示時/リロード時にサーバから取得時に呼ばれる。\n builder.addCase(getActivePlanToApi.fulfilled, (state, action) => {\n planSlice.caseReducers.setPlan(state, action);\n });\n builder.addCase(deletePlanToApi.fulfilled, (state, action) => {\n planSlice.caseReducers.setPlan(state, action);\n });\n builder.addCase(createPlanToApi.fulfilled, (state, action) => {\n planSlice.caseReducers.setPlan(state, action);\n });\n builder.addCase(updateActivePlanToApi.fulfilled, (state, action) => {\n planSlice.caseReducers.setPlan(state, action);\n });\n },\n});\n\nexport const { reset, setPlan, changePriorityCar, changeDate, setPlanId, changePriorityMode } = planSlice.actions;\nexport default planSlice.reducer;\n","import {\n createAsyncThunk,\n createEntityAdapter,\n createSlice,\n type EntityState,\n type PayloadAction,\n type EntityId,\n createSelector,\n} from '@reduxjs/toolkit';\n\nimport appApi from '../utils/api';\nimport { ActiveDayState, AppState, MarkerType, Plan, PlanDay, PlanSpot } from '../types';\n\nimport { getActivePlanToApi } from './planSlice';\nimport { customSpotCreateToApi } from './customeSpotSlice';\n\n// createEntityAdapter\n// https://redux-toolkit.js.org/api/createEntityAdapter\n// 従来のreducerとの違いはデータを正規化しデータベースのように管理してくれます。(実際はDictionary型)\n// Entityにはids, entitiesがあります\n// idsは一意となるidの配列(idは指定したキーに変更可能) → selectId\n// entitiesは実際のデータを格納する。\n// 従来のreducerの場合以下のようになります。\n// {\n// tasks: [\n// { id: 1, title: 'aaa', done: false },\n// { id: 2, title: 'bbb', done: false },\n// ];\n// }\n// 上記をcreateEntityAdapterで管理する場合は以下のようになります。\n// {\n// ids: [1, 2]\n// entities: {\n// {\n// 1: {id: 1, title: 'aaa', done: false},\n// 2: {id: 2, title: 'bbb', done: false}\n// }\n// }\n// }\n// データの操作に関しては\n// https://redux-toolkit.js.org/api/createEntityAdapter#crud-functions\nconst planSpotAdapter = createEntityAdapter({\n // idフィールドに`id`キー以外のものを使いたい場合は下記のように明示的に指定する\n selectId: (planSpot: PlanSpot) => planSpot.id,\n // idsが常にpositionの昇順になるよう設定\n sortComparer: (a: PlanSpot, b: PlanSpot) => {\n if (a.position > b.position) {\n return 1;\n }\n return -1;\n },\n});\nconst initialState: EntityState = planSpotAdapter.getInitialState();\n\n//-------------------------------------------------------------\n// Componentで利用されるplanSpotの共通関数\n//-------------------------------------------------------------\nexport const getPosition = (position: number, goal: number, start: number): string => {\n if (position === 0 || position === start) {\n return 'S';\n }\n\n if (position === goal) {\n return 'G';\n }\n\n return String(position - start);\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n// プランスポット削除処理\n// storeの配列から削除し画面描画を先に行う。非同期にてサーバ通信で削除処理を実行し、結果を受け取る\nexport const deletePlanSpotToApi = createAsyncThunk(\n 'planSpot/delete',\n async (arg: number, thunkAPI) => {\n const planSpot = (thunkAPI.getState() as AppState).planSpot.entities[arg];\n if (planSpot) {\n // api部分はstimulusで使用されているものを利用\n const response = await appApi.delete(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planSpot.planId}/plan_spots/${planSpot.id}`\n );\n return response.data;\n }\n }\n);\n\n// stimulusから呼ばれる。\n// 地図上のinfowindow Startボタン押下時に呼ばれる処理\nexport const setStartFromInfoWindowToApi = createAsyncThunk(\n 'planSpot/setStartFromInfoWindow',\n async (arg: PlanSpot, thunkAPI) => {\n const { planId, id } = arg;\n // api部分はstimulusで使用されているものを利用\n const response = await appApi.patch(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planId}/plan_spots/${id}`,\n { position: 'start', custom_transit_value: null, mode: 'auto' }\n );\n return response.data;\n }\n);\n\n// 地図上のinfowindow Goalボタン押下時に呼ばれる処理\nexport const setGoalFromInfoWindowToApi = createAsyncThunk<{ plan: Plan; planSpots: PlanSpot[] }, PlanSpot>(\n 'planSpot/setGoalFromInfoWindow',\n async (arg: PlanSpot, thunkAPI) => {\n const { planId, id } = arg;\n // api部分はstimulusで使用されているものを利用\n const response = await appApi.patch(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planId}/plan_spots/${id}`,\n { position: 'goal' }\n );\n return response.data;\n }\n);\n\n// plan_spots_controller.jsから呼ばれる並び替え処理\n// 通常のfunction定義をした場合、stimulusにて呼び出した際に以下のエラーが出る\n// [Actions must be plain objects. Use custom middleware for async actions]\nexport const sortToApi = createAsyncThunk<{ plan: Plan; planSpots: PlanSpot[] }, { id: number; position: number }>(\n 'planSpot/sortToApi',\n async (arg: { id: number; position: number }, thunkAPI) => {\n const { id, position } = arg;\n const planSpot = (thunkAPI.getState() as AppState).planSpot.entities[id];\n if (planSpot) {\n const response = await appApi.put(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planSpot.planId}/plan_spots/${planSpot.id}`,\n {\n position: position + 1,\n }\n );\n return response.data;\n }\n return {\n plan: (thunkAPI.getState() as AppState).plan,\n planSpots: (thunkAPI.getState() as AppState).planSpot.entities,\n };\n }\n);\n\n// ルート最適化を行う\nexport const optimizeToApi = createAsyncThunk('plan/optimize', async (arg: void, thunkAPI) => {\n const { id } = (thunkAPI.getState() as AppState).plan;\n const { entities } = (thunkAPI.getState() as AppState).planDay;\n const { day } = (thunkAPI.getState() as AppState).activeDay;\n const planDay = Object.values(entities).find((p: PlanDay | undefined) => p?.day === day);\n const response = await appApi.put(`${(thunkAPI.getState() as AppState).config.rootPath}/reorder_plans/${id}`, {\n plan_day_id: planDay?.id,\n });\n return response.data;\n});\n\n// planSpot追加処理\nexport const createPlanSpotToApi = createAsyncThunk<{ planSpots: PlanSpot[] }, { spotId: number; position: string }>(\n 'planSpot/create',\n async (arg: { spotId: number; position: string }, thunkAPI) => {\n const { id } = (thunkAPI.getState() as AppState).plan;\n const { entities } = (thunkAPI.getState() as AppState).planDay;\n const { day } = (thunkAPI.getState() as AppState).activeDay;\n const planDay = Object.values(entities).find((p: PlanDay | undefined) => p?.day === day);\n const { spotId, position } = arg;\n const response = await appApi.post(`${(thunkAPI.getState() as AppState).config.rootPath}/plans/${id}/plan_spots`, {\n plan_spot: { spot_id: spotId, position, plan_day_id: planDay?.id },\n });\n return response.data;\n }\n);\n\nexport const initializeModeAndCustomTransitToApi = createAsyncThunk<{ planSpots: PlanSpot[] }, void>(\n 'planSpot/initializeModeAndCustomTransit',\n async (arg: void, thunkAPI) => {\n const { entities } = (thunkAPI.getState() as AppState).planSpot;\n const planSpots = Object.values(entities).filter((p: PlanSpot | undefined) => p && p.mode !== 'auto');\n\n if (planSpots.length > 0) {\n let response = null;\n for (const planSpot of planSpots) {\n response = await appApi.patch(\n `${(thunkAPI.getState() as AppState).config.rootPath}/plans/${planSpot?.planId}/plan_spots/${planSpot?.id}`,\n {\n mode: 'auto',\n custom_transit_value: null,\n }\n );\n }\n return response?.data;\n }\n return null;\n }\n);\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\n// redux-toolkit には Immer が入っているので以下のように書く必要がありません。\n// return {\n// ...state,\n// value: 123,\n// }\n// 参考サイト: https://redux-toolkit.js.org/usage/immer-reducers#redux-toolkit-and-immer\nconst planSpotSlice = createSlice({\n name: 'planSpot',\n initialState,\n reducers: {\n reset: (state: EntityState) => {\n Object.assign(state, initialState);\n },\n // planSpotSlice内から呼ばれる共通処理\n resetPosition: (state: EntityState) => {\n state.ids.forEach((id: EntityId, index: number) => {\n planSpotAdapter.updateOne(state, {\n id,\n changes: { position: index },\n });\n });\n },\n deletePlanSpot: (state: EntityState, action: PayloadAction<{ id: EntityId; position: number }>) => {\n const { id, position } = action.payload;\n // 削除対象の1つ下にあるplanSpotのカスタム移動時間を削除し、modeをautoに更新\n state.ids.forEach((planSpotId: EntityId) => {\n if (state.entities[planSpotId]?.position === position + 1) {\n planSpotAdapter.updateOne(state, {\n id: planSpotId,\n changes: { transitTime: undefined, mode: 'auto' },\n });\n }\n });\n planSpotAdapter.removeOne(state, id);\n // positionの再採番\n planSpotSlice.caseReducers.resetPosition(state);\n },\n setStart: (state: EntityState, action: PayloadAction<{ id: EntityId; position: number }>) => {\n // 処理対象となるplanSpotと次のplanSpotのカスタム移動時間をクリアする\n const { id, position } = action.payload;\n const targetPlanSpot = state.entities[id];\n // DAYの先頭に移動するPlanSpotのカスタム移動時間をクリアする\n planSpotAdapter.updateOne(state, {\n id: targetPlanSpot?.id || 0,\n changes: { transitTime: undefined, mode: 'auto' },\n });\n // DAYの先頭に移動するPlanSpotの+1のPlanSpotのカスタム移動時間をクリアする\n state.ids.forEach((_id: EntityId) => {\n if (state.entities[_id]?.position === (targetPlanSpot?.position || 0) + 1) {\n planSpotAdapter.updateOne(state, {\n id: _id,\n changes: { transitTime: undefined, mode: 'auto' },\n });\n }\n });\n\n // 引数で渡されたDAYの先頭position以降のpositionを+1に設定(更新対象のplanSpotは除く)\n state.ids.forEach((_id: EntityId) => {\n const planSpot = state.entities[_id];\n if (position <= (planSpot?.position || 0) && planSpot?.id !== id) {\n planSpotAdapter.updateOne(state, {\n id: planSpot?.id || 0,\n changes: { position: (planSpot?.position || 0) + 1 },\n });\n }\n });\n\n // DAYの先頭へ移動\n planSpotAdapter.updateOne(state, {\n id: targetPlanSpot?.id || 0,\n changes: { position },\n });\n\n // positionの再採番\n planSpotSlice.caseReducers.resetPosition(state);\n },\n setPlanSpots: (state: EntityState, action: PayloadAction<{ planSpots: PlanSpot[] }>) => {\n planSpotAdapter.setAll(state, action.payload.planSpots);\n },\n updateModeAndTransitTime: (\n state: EntityState,\n action: PayloadAction<{ mode: string; transitTime: number; transitRemark: string; id: number }>\n ) => {\n const { mode, transitTime, transitRemark } = action.payload;\n planSpotAdapter.updateOne(state, {\n id: action.payload.id,\n changes: {\n mode,\n transitTime,\n transitRemark,\n },\n });\n },\n updateStay: (state: EntityState, action: PayloadAction) => {\n const planSpot = action.payload;\n if (planSpot) {\n planSpotAdapter.updateOne(state, {\n id: planSpot.id,\n changes: { stay: planSpot.stay, stayMemo: planSpot.stayMemo },\n });\n }\n },\n deletePlanSpotWithDay: (\n state: EntityState,\n action: PayloadAction<{ planDayId: number; day: number }>\n ) => {\n const { planDayId, day } = action.payload;\n // 削除されたplanDayに紐づくplanSpotを削除する\n state.ids.forEach((id: EntityId) => {\n if (state.entities[id]?.planDayId === planDayId) {\n planSpotAdapter.removeOne(state, id);\n }\n });\n // 削除後、planSpot.dayを-1する\n state.ids.forEach((id: EntityId) => {\n const planSpot: PlanSpot | undefined = state.entities[id];\n if (planSpot && day < planSpot.day) {\n planSpotAdapter.updateOne(state, {\n id: planSpot.id,\n changes: { day: planSpot.day - 1 },\n });\n }\n });\n // positionの再採番\n planSpotSlice.caseReducers.resetPosition(state);\n },\n },\n extraReducers: (builder) => {\n // extraReducersの本家サイト: https://redux-toolkit.js.org/api/createslice\n // 外部から呼び出しや、非同期、ドメイン跨いでの呼び出しが可能とのこと\n // pending, fulfilled, rejectedの3つが用意されている\n // https://redux-toolkit.js.org/api/createAsyncThunk\n // プランスポット情報取得に成功した場合\n builder.addCase(getActivePlanToApi.fulfilled, (state, action) => {\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n });\n // infowindowのGAOLボタン押下後、更新に成功した場合\n builder.addCase(setGoalFromInfoWindowToApi.fulfilled, (state: EntityState, action) => {\n // setGoalではplanSpotsからゴールに指定されたスポットを配列の最後に入れ直しているが、サーバ側にてスポットの並び順が\n // 変更される為取得した値を設定する\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n });\n // ルート最適化取得後\n builder.addCase(optimizeToApi.fulfilled, (state, action) => {\n planSpotAdapter.setAll(state, action.payload);\n });\n // マイプランに追加押下後、更新に成功した場合\n builder.addCase(createPlanSpotToApi.fulfilled, (state, action) => {\n planSpotSlice.caseReducers.reset(state);\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n });\n // 並び替え処後、更新に成功した場合\n builder.addCase(sortToApi.fulfilled, (state, action) => {\n planSpotSlice.caseReducers.reset(state);\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n });\n // 優先する交通手段が変更された場合、planSpotのmodeをautoに更新する処理が成功した場合\n builder.addCase(initializeModeAndCustomTransitToApi.fulfilled, (state, action) => {\n if (action && action.payload) {\n planSpotSlice.caseReducers.reset(state);\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n }\n });\n builder.addCase(customSpotCreateToApi.fulfilled, (state, action) => {\n planSpotSlice.caseReducers.reset(state);\n planSpotSlice.caseReducers.setPlanSpots(state, action);\n });\n },\n});\n\nexport const {\n setPlanSpots,\n deletePlanSpot,\n setStart,\n updateModeAndTransitTime,\n resetPosition,\n updateStay,\n reset,\n deletePlanSpotWithDay,\n} = planSpotSlice.actions;\n\n//-------------------------------------------------------------\n// Selector\n//-------------------------------------------------------------\n// 全件取得用\nexport const planSpotSelectors = planSpotAdapter.getSelectors((state: AppState) => state.planSpot);\n\n// 指定されたpositionより小さいデータを取得する\ntype ReturnSelectorType = (state: AppState) => S;\nexport const planSpotPositionSelector = (position: number): ReturnSelectorType<(PlanSpot | undefined)[]> =>\n createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): (PlanSpot | undefined)[] => {\n const ids = state.ids.filter((id: EntityId) => position >= (state.entities[id]?.position || 0));\n return Object.values(state.entities).filter(\n (planSpot) => ids.includes(planSpot?.id || 0) && activeDayState.day === planSpot?.day\n );\n }\n );\n\n// 合計時間算出用Selector\nexport const staySelector = createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState) =>\n Object.values(state.entities).map((planSpot) => {\n if (activeDayState.day === planSpot?.day) {\n return planSpot?.stay || planSpot?.spot?.stay || 0;\n }\n return 0;\n })\n);\n\n// 選択されている日付のPlanSpot算出用Selector\nexport const planSpotInDaySelector = createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): EntityId[] => {\n const planSpots = Object.values(state.entities).map((planSpot) => {\n if (activeDayState.day === planSpot?.day) {\n return planSpot.id;\n }\n return 0;\n });\n return planSpots.filter((planSpot) => planSpot !== 0);\n }\n);\n\nexport const planSpotMarkerSelector = createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): (MarkerType | undefined)[] => {\n const markers = Object.values(state.entities).map((planSpot) => {\n if (planSpot && planSpot.spot && planSpot.mapSpot && activeDayState.day === planSpot.day) {\n return {\n name: planSpot.name,\n lat: planSpot.spot.lat,\n lng: planSpot.spot.lng,\n image: planSpot.mapSpot.markerImage,\n position: planSpot.position,\n spot: planSpot.mapSpot,\n day: planSpot.day,\n planSpotId: planSpot.id,\n };\n }\n return undefined;\n });\n return markers.filter((marker) => marker !== undefined);\n }\n);\n\n// 選択されている日付のPlanSpotの最大position算出用Selector\nexport const planSpotInMaxPositionSelector = createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): number => {\n const positions = Object.values(state.entities).map((planSpot) => {\n if (activeDayState.day === planSpot?.day) {\n return planSpot.position;\n }\n return 0;\n });\n if (positions.length === 0) return -1;\n if (positions?.filter((position) => position >= 0).length === 0) return -1;\n return positions?.reduce((a: number, b: number): number => Math.max(a, b));\n }\n);\n\n// 選択されている日付のPlanSpotの最小position算出用Selector\nexport const planSpotInMinPositionSelector = createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): number => {\n const positions = Object.values(state.entities).map((planSpot) => {\n if (activeDayState.day === planSpot?.day) {\n return planSpot.position;\n }\n return -1;\n });\n if (positions.length === 0) return -1;\n if (positions?.filter((position) => position >= 0).length === 0) return -1;\n return positions?.filter((position) => position >= 0).reduce((a: number, b: number): number => Math.min(a, b));\n }\n);\n\n// 指定されたspot.idはplanSpotに既に登録されているか\nexport const isRegistedAsPlanSpotSelector = (spotId: number): ReturnSelectorType =>\n createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): boolean => {\n const results = Object.values(state.entities).map((planSpot) => {\n if (activeDayState.day === planSpot?.day && planSpot?.spot?.id === spotId) {\n return true;\n }\n return false;\n });\n if (results.length === 0) return false;\n if (results?.filter((isRegisted) => isRegisted === true).length === 0) return false;\n return true;\n }\n );\n\n// 指定されたspot.idがplanSpotに存在する場合、PlanSpotインスタンスを返却する。存在しない場合はnullを返却\nexport const returnRegistedAsPlanSpotSelector = (spotId: number): ReturnSelectorType =>\n createSelector(\n [(state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (state: EntityState, activeDayState: ActiveDayState): PlanSpot | null => {\n const result = Object.values(state.entities).find((planSpot) => {\n return activeDayState.day === planSpot?.day && planSpot?.spot?.id === spotId;\n });\n\n if (result) {\n return result;\n }\n return null;\n }\n );\n\nexport default planSpotSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { PopupState } from '../types';\n\nconst initialState: PopupState = {\n isShown: false,\n contentText: '',\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst popupSlice = createSlice({\n name: 'popup',\n initialState,\n reducers: {\n reset: (state: PopupState) => {\n Object.assign(state, initialState);\n },\n showPopup: (state: PopupState) => {\n state.isShown = true;\n },\n hidePopup: (state: PopupState) => {\n state.isShown = false;\n },\n setPopupContentText: (state: PopupState, action: PayloadAction) => {\n state.contentText = action.payload;\n },\n },\n});\n\nexport const { reset, showPopup, hidePopup, setPopupContentText } = popupSlice.actions;\n\nexport default popupSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { SnsState } from '../types';\nimport { toggle as modalToggle } from './modalSlice';\n\nconst initialState: SnsState = {\n isShown: false,\n parentUrl: '',\n isDataRemote: false,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst snsSlice = createSlice({\n name: 'sns',\n initialState,\n reducers: {\n reset: (state: SnsState) => {\n Object.assign(state, initialState);\n },\n toggle: (state: SnsState) => {\n state.isShown = !state.isShown;\n },\n setParentUrl: (state: SnsState, action: PayloadAction) => {\n if (action.payload) {\n state.parentUrl = action.payload;\n }\n },\n setDataRemote: (state: SnsState, action: PayloadAction) => {\n state.isDataRemote = action.payload;\n },\n },\n extraReducers: (builder) => {\n // Modalが閉じられたらModalFavoriteSpotStateを初期化\n builder.addMatcher(modalToggle.match, (state: SnsState) => {\n state.isShown = false;\n });\n },\n});\n\nexport const { reset, toggle, setParentUrl, setDataRemote } = snsSlice.actions;\n\nexport default snsSlice.reducer;\n","import { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { spotSlidTileState } from '../types';\nimport { setDay } from './activeDaySlice';\n\nconst initialState: spotSlidTileState = {\n selectedSpotId: 0,\n isOpen: true,\n};\n\n//-------------------------------------------------------------\n// Reducer, Actionの設定\n//-------------------------------------------------------------\nconst spotSlideTileSlice = createSlice({\n name: 'spotSlideTileSlice',\n initialState,\n reducers: {\n reset: (state: spotSlidTileState) => {\n Object.assign(state, initialState);\n },\n setSpotId: (state: spotSlidTileState, action: PayloadAction) => {\n state.selectedSpotId = action.payload;\n },\n toggle: (state: spotSlidTileState) => {\n state.isOpen = !state.isOpen;\n },\n },\n extraReducers: (builder) => {\n // planDay選択時にinfowindowを閉じる\n builder.addMatcher(setDay.match, (state: spotSlidTileState) => {\n spotSlideTileSlice.caseReducers.setSpotId(state, { payload: 0, type: spotSlideTileSlice.actions.setSpotId.type });\n });\n },\n});\n\nexport const { reset, setSpotId, toggle } = spotSlideTileSlice.actions;\n\nexport default spotSlideTileSlice.reducer;\n","import {\n createAsyncThunk,\n createSlice,\n type PayloadAction,\n createEntityAdapter,\n type EntityState,\n type EntityId,\n createSelector,\n} from '@reduxjs/toolkit';\n\nimport appApi from '../utils/api';\nimport { ActiveDayState, AppState, PlanSpot, Transit } from '../types';\n\nconst transitAdapter = createEntityAdapter({\n // idフィールドに`id`キー以外のものを使いたい場合は下記のように明示的に指定する\n selectId: (transit: Transit) => transit.toPlanSpotId,\n});\n\nconst initialState: EntityState = transitAdapter.getInitialState();\n\n// 表示対象の移動時間を取得\nexport const getTransitTime = (transitTime: number, mode: string, transit: Transit | undefined): number => {\n if (!transit) {\n return 0;\n }\n if (transitTime > 0) {\n return transitTime;\n }\n if (mode === 'car' || (mode === 'auto' && transit.autoDisplayMode === 'car')) {\n return transit.car || 0;\n }\n if (mode === 'train' || (mode === 'auto' && transit.autoDisplayMode === 'train')) {\n return transit.train || 0;\n }\n if (mode === 'walk' || (mode === 'auto' && transit.autoDisplayMode === 'walk')) {\n return transit.walk || 0;\n }\n if (mode === 'bicycle' || (mode === 'auto' && transit.autoDisplayMode === 'bicycle')) {\n return transit.bicycle || 0;\n }\n return 0;\n};\n\n//-------------------------------------------------------------\n// 非同期処理\n//-------------------------------------------------------------\n\ntype GetTransitProps = {\n priorityMode: string;\n fromPlanSpot: PlanSpot;\n toPlanSpot: PlanSpot;\n};\n\n// 移動手段情報を取得する処理\nexport const getTransitToApi = createAsyncThunk(\n 'transit/create',\n async (arg: GetTransitProps, thunkAPI) => {\n const { priorityMode, fromPlanSpot, toPlanSpot } = arg;\n\n const response = await appApi.post(`${(thunkAPI.getState() as AppState).config.rootPath}/spot_transits`, {\n from_plan_spot_id: fromPlanSpot.id,\n to_plan_spot_id: toPlanSpot.id,\n mode: toPlanSpot.mode,\n priority_mode: priorityMode,\n });\n return { ...response.data, fromPlanSpotId: fromPlanSpot.id, toPlanSpotId: toPlanSpot.id, day: fromPlanSpot.day };\n }\n);\n\n// redux-toolkit には Immer が入っているので以下のように書く必要がありません。\n// return {\n// ...state,\n// value: 123,\n// }\n// 参考サイト: https://redux-toolkit.js.org/usage/immer-reducers#redux-toolkit-and-immer\nconst transitSlice = createSlice({\n name: 'transit',\n initialState,\n reducers: {\n reset: (state: EntityState) => {\n Object.assign(state, initialState);\n },\n setTransit: transitAdapter.setOne,\n deleteTransit: (state: EntityState, action: PayloadAction) => {\n // 削除対象のfrom, to合わせて削除\n state.ids.forEach((id: EntityId) => {\n const transit = state.entities[id];\n if (action.payload === transit?.fromPlanSpotId || action.payload === transit?.toPlanSpotId) {\n transitAdapter.removeOne(state, id);\n }\n });\n },\n },\n extraReducers: (builder) => {\n // transit情報取得に成功した場合\n builder.addCase(getTransitToApi.fulfilled, (state, action) => {\n transitSlice.caseReducers.setTransit(state, action);\n });\n },\n});\n\nexport const { setTransit, deleteTransit, reset } = transitSlice.actions;\nexport const transitSelectors = transitAdapter.getSelectors((state: AppState) => state.transit);\n// 指定されたpositionより小さいデータを取得する\ntype ReturnSelectorType = (state: AppState) => S;\nexport const transitPositionSelector = (position: number): ReturnSelectorType<(Transit | undefined)[]> =>\n createSelector(\n [(state: AppState) => state.transit, (state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (\n stateTransit: EntityState,\n statePlanSpot: EntityState,\n activeDayState: ActiveDayState\n ): (Transit | undefined)[] => {\n const ids = statePlanSpot.ids.filter(\n (id: EntityId) =>\n position >= (statePlanSpot.entities[id]?.position || 0) &&\n activeDayState.day === statePlanSpot.entities[id]?.day\n );\n const transits = Object.values(stateTransit.entities).filter((transit) =>\n ids.includes(transit?.toPlanSpotId || 0)\n );\n return transits.filter((transit) => transit !== undefined);\n }\n );\n\nexport const transitTimeSelector = createSelector(\n [(state: AppState) => state.transit, (state: AppState) => state.planSpot, (state: AppState) => state.activeDay],\n (stateTransit: EntityState, statePlanSpot: EntityState, activeDayState: ActiveDayState) =>\n Object.values(stateTransit.entities).map((transit) => {\n const planSpot = statePlanSpot.entities[transit?.toPlanSpotId || 0];\n if (activeDayState.day === planSpot?.day) {\n return getTransitTime(planSpot?.transitTime || 0, planSpot?.mode || 'auto', transit);\n }\n return 0;\n })\n);\nexport default transitSlice.reducer;\n","import axios from 'axios';\nimport Rails from '@rails/ujs';\nimport qs from 'qs';\n\nconst TOKEN_IDENTIFIER = 'iframe-user-token';\n\nfunction getToken(): string | null {\n return localStorage.getItem(TOKEN_IDENTIFIER);\n}\n\nconst api = axios.create({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'brackets' }),\n});\n\n// get CSRF token\napi.interceptors.request.use((config) => ({\n ...config,\n headers: { ...config.headers, 'X-CSRF-Token': Rails.csrfToken() },\n}));\n\n// get user token\napi.interceptors.request.use((config) => {\n const token = getToken();\n\n if (token) {\n return { ...config, headers: { ...config.headers, 'USER-TOKEN': token } };\n }\n\n return config;\n});\n\nexport default api;\n","export const formatTime = (time: Date): string => {\n if (time) {\n return `${time.getHours()}:${String(time.getMinutes()).padStart(2, '0')}`;\n }\n return '';\n};\n\nexport const formatDate = (startTime: Date, num: number, delimiter: string): string => {\n if (startTime) {\n const date = new Date(startTime);\n date.setDate(date.getDate() + num);\n\n return `${date.getFullYear()}${delimiter}${String(date.getMonth() + 1).padStart(2, '0')}${delimiter}${String(\n date.getDate()\n ).padStart(2, '0')}`;\n }\n return '';\n};\n","import { useDispatch } from 'react-redux';\nimport type { AppDispatch } from './store';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useAppDispatch: () => AppDispatch = useDispatch;\n","import React, { ForwardRefRenderFunction, forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, Category } from '../../types';\n\nimport { setIndex } from '../../slices/mapMenuCategorySlice';\nimport { getSpotToApi, reset, setSelectedId, setLoading } from '../../slices/mapSpotSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\n\ninterface Props {\n category: Category;\n index: number;\n}\n\nconst CategoryButton: ForwardRefRenderFunction = (props, ref) => {\n const { category, index } = props;\n const dispatch = useAppDispatch();\n const selectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const categories = useSelector((state: AppState) => state.mapMenuCategory.categories);\n\n if (categories.length === 0) {\n return
;\n }\n\n return (\n {\n dispatch(setIndex(index + 2));\n dispatch(reset());\n if (selectedIndex !== index + 2) {\n dispatch(setLoading(true));\n dispatch(setSelectedId(category.id));\n dispatch(getSpotToApi(category.id));\n }\n }}\n >\n {category.name}\n \n );\n};\n\nexport default forwardRef(CategoryButton);\n","import React, { ForwardRefRenderFunction, forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\n\nimport { setIndex } from '../../slices/mapMenuCategorySlice';\nimport { getFavoriteMapSpotToApi, reset } from '../../slices/mapSpotSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport I18n from '../../i18n/i18n';\n\nconst FavoriteButton: ForwardRefRenderFunction = (_, ref) => {\n const dispatch = useAppDispatch();\n const selectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const categories = useSelector((state: AppState) => state.mapMenuCategory.categories);\n\n if (categories.length === 0) {\n return
;\n }\n\n return (\n {\n dispatch(setIndex(1));\n dispatch(reset());\n if (selectedIndex !== 1) {\n dispatch(getFavoriteMapSpotToApi());\n }\n }}\n >\n {I18n.t('japan_concierge.active_plans.map_menu.my_favorite')}\n \n );\n};\n\nexport default forwardRef( FavoriteButton);\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconAngleLeft: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconAngleLeft;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconAngleRight: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconAngleRight;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport type { AppState, Category } from '../../types';\nimport CategoryButton from './categoryButtonComponent';\nimport FavoriteButton from './favoriteButtonComponent';\nimport IconAngleLeft from '../icons/iconAngleLeftComponent';\nimport IconAngleRight from '../icons/iconAngleRightComponent';\n\nconst App: FC = () => {\n const categories = useSelector((state: AppState) => state.mapMenuCategory.categories);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const containerRef = useRef(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const [hoveringNext, setHoveringNext] = useState(false);\n const [hoveringPrev, setHoveringPrev] = useState(false);\n const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n const updateButtonVisibility = () => {\n const container = containerRef.current;\n if (container) {\n const canScrollLeft = container.scrollLeft > 0;\n const canScrollRight = container.scrollLeft + container.clientWidth < container.scrollWidth;\n\n setCanScrollLeft(canScrollLeft);\n setCanScrollRight(canScrollRight);\n }\n };\n\n useEffect(() => {\n const updateWindowWidth = () => {\n setWindowWidth(window.innerWidth);\n };\n\n window.addEventListener('resize', updateWindowWidth);\n window.addEventListener('resize', updateButtonVisibility);\n\n return () => {\n window.removeEventListener('resize', updateWindowWidth);\n window.removeEventListener('resize', updateButtonVisibility);\n };\n }, []);\n\n useEffect(() => {\n if (!hoveringNext && !hoveringPrev) {\n updateButtonVisibility();\n }\n }, [hoveringNext, hoveringPrev]);\n\n useEffect(() => {\n updateButtonVisibility();\n if (!hoveringNext && !hoveringPrev) {\n updateButtonVisibility();\n }\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener('scroll', updateButtonVisibility);\n }\n\n return () => {\n if (container) {\n container.removeEventListener('scroll', updateButtonVisibility);\n }\n };\n }, [categories]);\n\n const handleNextClick = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerRight = container.scrollLeft + container.clientWidth;\n\n for (let i = itemRefs.current.length - 1; i >= 0; i--) {\n const item = itemRefs.current[i];\n if (!item) continue;\n const itemLeft = item.offsetLeft;\n\n if (itemLeft < containerRight) {\n container.scrollLeft = itemLeft - 35;\n break;\n }\n }\n updateButtonVisibility();\n };\n\n const handlePrevClick = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerLeft = container.scrollLeft;\n\n for (let i = 0; i < itemRefs.current.length; i++) {\n const item = itemRefs.current[i];\n if (!item) continue;\n const itemRight = item.offsetLeft + item.clientWidth;\n\n if (itemRight > containerLeft) {\n container.scrollLeft = itemRight - container.clientWidth + 35;\n break;\n }\n }\n updateButtonVisibility();\n };\n\n if (categories.length === 0) {\n return
;\n }\n\n return (\n
\n
\n {/* お気に入り */}\n (itemRefs.current[0] = el)} />\n\n {/* カテゴリー */}\n {categories.map((category: Category, index: number) => (\n (itemRefs.current[index + 1] = el)}\n category={category}\n index={index}\n key={category.id}\n />\n ))}\n
\n {windowWidth >= 576 && (\n <>\n {(canScrollLeft || hoveringPrev) && (\n !isTouchDevice && setHoveringPrev(true)}\n onMouseLeave={() => !isTouchDevice && setHoveringPrev(false)}\n onTouchEnd={() => isTouchDevice && setHoveringPrev(false)}\n >\n \n \n )}\n {(canScrollRight || hoveringNext) && (\n !isTouchDevice && setHoveringNext(true)}\n onMouseLeave={() => !isTouchDevice && setHoveringNext(false)}\n onTouchEnd={() => isTouchDevice && setHoveringNext(false)}\n >\n \n \n )}\n \n )}\n
\n );\n};\n\nexport default React.memo(App);\n","import { useDispatch } from 'react-redux';\nimport type { AppDispatch } from './store';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useAppDispatch: () => AppDispatch = useDispatch;\n\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconChevronRight: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconChevronRight;\n","import React, { FC } from 'react';\n\nimport { useAppDispatch } from '../../export/hook';\nimport IconChevronRight from '../icons/iconChevronRightComponent';\nimport { setIsShow } from '../../slices/customeSpotSlice';\nimport I18n from '../../i18n/i18n';\n\nconst backToFavoriteListButton: FC = () => {\n const dispatch = useAppDispatch();\n\n const handleClick = () => {\n dispatch(setIsShow(false));\n };\n\n return (\n \n {I18n.t('japan_concierge.active_plans.show.return_favorite_list')}\n \n \n );\n};\n\nexport default backToFavoriteListButton;\n","import React, { FC, useCallback, useState } from 'react';\nimport { GoogleMap, Marker } from '@react-google-maps/api';\n\nimport { setLatLng, setName } from '../../slices/customeSpotSlice';\nimport { useSelector } from 'react-redux';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { AppState } from '../../types';\n\ninterface MapProps extends google.maps.MapOptions {\n zoom: number;\n center: { lat: number; lng: number };\n}\n\nconst Map: FC = (mapProps: MapProps) => {\n const { zoom, center } = mapProps;\n const { lat, lng } = useSelector((state: AppState) => state.customSpot);\n const dispatch = useAppDispatch();\n const [placesService, setPlacesService] = useState(null);\n\n const onLoad = useCallback((mapInstance: google.maps.Map) => {\n mapInstance.setCenter(center);\n setPlacesService(new window.google.maps.places.PlacesService(mapInstance));\n }, []);\n\n return (\n {\n if (e.latLng) {\n dispatch(setLatLng({ lat: e.latLng.lat(), lng: e.latLng.lng() }));\n }\n if ('placeId' in e) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n placesService.getDetails({ placeId: e.placeId }, (place, status) => {\n if (status === 'OK' && place && place.geometry && place.geometry.location) {\n dispatch(setName(place.name));\n }\n });\n }\n }}\n >\n \n \n );\n};\n\nexport default Map;\n","import React, { FC } from 'react';\n\nimport I18n from '../../i18n/i18n';\nimport { customSpotCreateToApi, setName, setStay } from '../../slices/customeSpotSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../types';\n\n// interface MapProps extends google.maps.MapOptions {\n// zoom: number;\n// center: { lat: number; lng: number };\n// }\n\nconst Form: FC = () => {\n const dispatch = useAppDispatch();\n const customSpot = useSelector((state: AppState) => state.customSpot);\n\n return (\n
\n
\n

\n {I18n.t('japan_concierge.custom_spots.new.definition_window_title')}\n

\n
\n
\n
\n
\n {I18n.t('japan_concierge.custom_spots.new.spot_name')}\n \n * {I18n.t('japan_concierge.custom_spots.new.required')}\n \n
\n {\n dispatch(setName(e.target.value));\n }}\n />\n {customSpot.isNameError && (\n \n * {I18n.t('japan_concierge.custom_spots.new.spot_name_error')}\n \n )}\n
\n
\n
\n {I18n.t('japan_concierge.custom_spots.new.stay_time')}\n \n * {I18n.t('japan_concierge.custom_spots.new.required')}\n \n
\n {\n dispatch(setStay(Number(e.target.value)));\n }}\n />\n {customSpot.isStayError && (\n \n * {I18n.t('japan_concierge.custom_spots.new.stay_time_error')}\n \n )}\n
\n
\n
\n {I18n.t('japan_concierge.custom_spots.new.lat')}:{' '}\n {customSpot.lat}\n
\n
\n {I18n.t('japan_concierge.custom_spots.new.lng')}:{' '}\n {customSpot.lng}\n
\n
\n
\n {\n dispatch(customSpotCreateToApi(customSpot));\n }}\n >\n {I18n.t('japan_concierge.custom_spots.new.create')}\n \n
\n
\n
\n );\n};\n\nexport default Form;\n","import React, { FC, useEffect } from 'react';\n\nimport Map from './mapComponent';\nimport Form from './formComponent';\nimport { MapConfigProps } from '../../types';\nimport { setLatLng, getCustomSpotNameToApi } from '../../slices/customeSpotSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport I18n from '../../i18n/i18n';\n\n// import I18n from '../../i18n/i18n';\n\ntype Props = {\n mapConfig: MapConfigProps;\n};\n\nconst CustomSpotApp: FC = (props: Props) => {\n const { mapConfig } = props;\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(setLatLng({ lat: mapConfig.startLat, lng: mapConfig.startLng }));\n // 初回、activePlanIdが変更された場合呼び出し時に呼ばれる\n dispatch(getCustomSpotNameToApi());\n }, []);\n\n return (\n
\n
\n
\n

{I18n.t('japan_concierge.custom_spots.new.contents_description')}

\n

{I18n.t('japan_concierge.custom_spots.new.contents_description_note')}

\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default React.memo(CustomSpotApp);\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst iconPlus: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default iconPlus;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconCircleDelete: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconCircleDelete;\n","import React, { FC, useState } from 'react';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { IntlProvider, FormattedMessage } from 'react-intl';\n\nimport { FavoriteSpot } from '../../types';\nimport { deleteFavoriteSpotToApi, deleteFavoriteSpot, setIndex } from '../../slices/planMenuSlice';\nimport { getSpotToApi } from '../../slices/modalSpotSlice';\nimport { toggle } from '../../slices/modalSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { createPlanSpotToApi } from '../../slices/planSpotSlice';\nimport IconPlus from '../icons/iconPlusComponent';\nimport I18n from '../../i18n/i18n';\nimport IconCircleDelete from '../icons/iconCircleDeleteComponent';\n\ntype Props = {\n favoriteSpot: FavoriteSpot;\n};\n\nconst FavoriteSpotFC: FC = (props: Props) => {\n const { favoriteSpot } = props;\n const dispatch = useAppDispatch();\n const [isAddToMyPlan, setisAddToMyPlan] = useState(false);\n\n const closeClick = () => {\n dispatch(deleteFavoriteSpot(favoriteSpot.id));\n dispatch(deleteFavoriteSpotToApi(favoriteSpot.spotId));\n const event = new CustomEvent('favorite-spot-updated');\n document.dispatchEvent(event);\n };\n\n const handleClick = () => {\n dispatch(toggle());\n dispatch(getSpotToApi(favoriteSpot.spotId));\n };\n\n const createLinkElement = () => {\n return (\n {\n dispatch(setIndex(0));\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.my_plan')}\n \n );\n };\n\n const stringToHTML = () => {\n return (\n \n \n \n );\n };\n\n return (\n
\n
\n
\n {favoriteSpot.name}\n
\n
\n
\n
{favoriteSpot.name}
\n
\n\n
\n

{favoriteSpot.description}

\n
\n\n {/* プランに追加 */}\n
\n
\n {isAddToMyPlan && {stringToHTML()}}\n {\n setisAddToMyPlan(true);\n dispatch(createPlanSpotToApi({ spotId: favoriteSpot.spotId, position: 'auto' }));\n }}\n >\n \n {I18n.t('japan_concierge.spot_modals.show.add_to_my_plan')}\n \n
\n
\n
\n \n \n \n {I18n.t('japan_concierge.active_plans.show.remove_from_favorites_list')}\n \n \n
\n
\n
\n
\n );\n};\n\nexport default FavoriteSpotFC;\n","import React, { FC } from 'react';\n\nimport IconPlus from '../icons/iconPlusComponent';\nimport { useDispatch } from 'react-redux';\nimport I18n from '../../i18n/i18n';\nimport { setIsShow } from '../../slices/customeSpotSlice';\n\nconst OriginalSpotAddButton: FC = () => {\n const dispatch = useDispatch();\n\n return (\n {\n dispatch(setIsShow(true));\n }}\n >\n \n {I18n.t('japan_concierge.active_plans.show.create_new_list')}\n \n );\n};\n\nexport default OriginalSpotAddButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, FavoriteSpot, MapConfigProps } from '../../types';\nimport I18n from '../../i18n/i18n';\n\nimport BackButton from './backToFavoriteListButtonComponent';\nimport CustomSpot from './customSpotComponent';\nimport FavoriteSpotFC from './favoriteSpotComponent';\nimport OriginalSpotAddButton from './originalSpotAddButtonComponent';\n\ntype Props = {\n mapConfig: MapConfigProps;\n};\n\nconst FavoriteSpotList: FC = (props: Props) => {\n const { mapConfig } = props;\n const favoriteSpots = useSelector((state: AppState) => state.planMenu.favoriteSpots);\n const { isShow } = useSelector((state: AppState) => state.customSpot);\n\n if (isShow) {\n return (\n
\n

{I18n.t('japan_concierge.active_plans.map_menu.new_custom_spot')}

\n\n
\n \n
\n\n
\n \n
\n
\n );\n }\n\n return (\n
\n

{I18n.t('japan_concierge.active_plans.show.favorites_list')}

\n\n {mapConfig.customSpot && (\n
\n \n
\n )}\n {(favoriteSpots || []) && (\n
\n {favoriteSpots.map((favoriteSpot: FavoriteSpot) => (\n \n ))}\n
\n )}\n {favoriteSpots.length === 0 && (\n

\n {I18n.t('japan_concierge.active_plans.show.no_favorite_spots')}\n

\n )}\n
\n );\n};\n\nexport default FavoriteSpotList;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconShare: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconShare;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Rails from '@rails/ujs';\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\n\nimport IconShare from '../icons/iconShareComponent';\n\ninterface Props {\n location: string;\n}\n\nconst ExportButton: FC = (props: Props) => {\n const planId = useSelector((state: AppState) => state.plan.id);\n const planSpotIds = useSelector((state: AppState) => state.planSpot.ids);\n const rootPath = useSelector((state: AppState) => state.config.rootPath);\n const iframe = useSelector((state: AppState) => state.config.iframe);\n\n const { location } = props;\n\n return (\n \n \n \n );\n};\n\nexport default ExportButton;\n","import React, { FC, useState } from 'react';\n\nimport { createPlanToApi } from '../../slices/planSlice';\nimport { reset as planSpotReset } from '../../slices/planSpotSlice';\nimport { reset as transitReset } from '../../slices/transitSlice';\nimport { setDay } from '../../slices/activeDaySlice';\nimport { setIsInitializeMapCenter } from '../../slices/mapSlice';\nimport { useAppDispatch } from '../../export/hook';\nimport IconPlus from '../icons/iconPlusComponent';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport I18n from '../../i18n/i18n';\nimport { FormattedMessage, IntlProvider } from 'react-intl';\n\nconst CreatePlanButton: FC = () => {\n const dispatch = useAppDispatch();\n const [hovering, setHovering] = useState(false);\n\n const handleMouseEnter = () => {\n setHovering(true);\n };\n\n const handleMouseLeave = () => {\n setHovering(false);\n };\n\n const handleClick = () => {\n dispatch(planSpotReset());\n dispatch(transitReset());\n dispatch(setDay(1));\n dispatch(setIsInitializeMapCenter(true));\n dispatch(createPlanToApi());\n };\n\n const createLinkElement = () => {\n return (\n {\n dispatch(setIndex(2));\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.my_plan')}\n \n );\n };\n\n const stringToHTML = () => {\n return (\n \n \n \n );\n };\n\n return (\n
\n \n
{stringToHTML()}
\n
\n\n \n \n {I18n.t('japan_concierge.active_plans.show.create_new_plan')}\n \n
\n );\n};\n\nexport default CreatePlanButton;\n","// eslint-disable-next-line no-use-before-define\nimport React, { FC } from 'react';\nimport ExportButton from './exportButtonComponent';\nimport CreatePlanButton from './createPlanButtonComponent';\n\nconst FootUtilityApp: FC = () => (\n
\n
\n \n
\n
\n \n
\n
\n);\n\nexport default FootUtilityApp;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport I18n from '../../i18n/i18n';\nimport { staySelector } from '../../slices/planSpotSlice';\nimport { transitTimeSelector } from '../../slices/transitSlice';\n\nconst TotalTime: FC = () => {\n const stays = useSelector((state: AppState) => staySelector(state));\n const transits = useSelector((state: AppState) => transitTimeSelector(state));\n\n const stayTotal = stays.reduce((sum, stay) => sum + stay, 0);\n const transitTimeTotal = transits.reduce((sum, transitTime) => sum + transitTime, 0);\n\n const formatHour = (hour: number): string => {\n if (hour === 0) return '';\n if (I18n.locale === 'ja' || I18n.locale === 'zh-CN' || I18n.locale === 'zh-TW' || I18n.locale === 'ko') {\n return `${hour}${I18n.t('japan_concierge.active_plans.show.hours')}`;\n }\n if (hour === 1) return `${hour} ${I18n.t('japan_concierge.active_plans.show.hour')}`;\n return `${hour} ${I18n.t('japan_concierge.active_plans.show.hours')}`;\n };\n\n const formatMinute = (hour: number, minute: number): string => {\n if (hour > 0 && minute === 0) return ``;\n if (I18n.locale === 'ja' || I18n.locale === 'zh-CN' || I18n.locale === 'zh-TW' || I18n.locale === 'ko') {\n return ` ${minute}${I18n.t('japan_concierge.active_plans.show.minutes')}`;\n }\n if (hour >= 0 && minute < 2) return ` ${minute} ${I18n.t('japan_concierge.active_plans.show.minute')}`;\n return ` ${minute} ${I18n.t('japan_concierge.active_plans.show.minutes')}`;\n };\n\n const format = (time: number): string => {\n const hour = Math.floor(time / 60);\n const min = time % 60;\n\n return `${formatHour(hour)}${formatMinute(hour, min)}`;\n };\n\n return (\n
\n {I18n.t('japan_concierge.active_plans.show.total')} :\n {format(stayTotal + transitTimeTotal)}\n
\n );\n};\n\nexport default TotalTime;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconCar: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconCar;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconTrain: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconTrain;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconBicycle: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n \n \n);\n\nexport default IconBicycle;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { changePriorityMode, updatePlanToApi } from '../../slices/planSlice';\nimport { showPopup, hidePopup, setPopupContentText } from '../../slices/popupSlice';\nimport { initializeModeAndCustomTransitToApi } from '../../slices/planSpotSlice';\n\nimport IconCar from '../icons/iconCarComponent';\nimport IconTrain from '../icons/iconTrainComponent';\nimport IconBicycle from '../icons/iconBicycleComponent';\nimport { AppState, PlanSpot } from '../../types';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport I18n from '../../i18n/i18n';\n\nconst PriorityTransit: FC = () => {\n const priorityMode = useSelector((state: AppState) => state.plan.priorityMode);\n const { entities } = useSelector((state: AppState) => state.planSpot);\n const dispatch = useAppDispatch();\n\n const popup = () => {\n dispatch(setPopupContentText(I18n.t('japan_concierge.active_plans.show.auto_compute_enabled')));\n dispatch(showPopup());\n setTimeout(() => dispatch(hidePopup()), 5000);\n };\n\n const onClick = (mode: string) => {\n const planSpots = Object.values(entities).filter((p: PlanSpot | undefined) => p && p.mode !== 'auto');\n if (planSpots && planSpots.length > 0) {\n popup();\n }\n dispatch(changePriorityMode(mode));\n dispatch(updatePlanToApi());\n dispatch(initializeModeAndCustomTransitToApi());\n };\n\n return (\n
\n
\n {I18n.t('japan_concierge.active_plans.show.means_transport')}:\n
\n
\n {\n onClick('car');\n }}\n >\n \n \n {\n onClick('auto');\n }}\n >\n \n \n {\n onClick('bicycle');\n }}\n >\n \n \n
\n
\n );\n};\n\nexport default PriorityTransit;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconSort: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconSort;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\nimport { optimizeToApi, planSpotInDaySelector } from '../../slices/planSpotSlice';\n\nimport IconSort from '../icons/iconSortComponent';\nimport { useAppDispatch } from '../../active_plan/hook';\n\ninterface Props {\n location: string;\n}\n\nconst OptimizeRouteButton: FC = (props: Props) => {\n const { location } = props;\n\n const planSpotIds = useSelector((state: AppState) => planSpotInDaySelector(state));\n const dispatch = useAppDispatch();\n\n return (\n {\n dispatch(optimizeToApi());\n }}\n >\n \n {I18n.t('japan_concierge.active_plans.show.optimize_route')}\n \n );\n};\n\nexport default OptimizeRouteButton;\n","import React, { FC } from 'react';\nimport TotalTime from './totalTimeComponent';\nimport PriorityTransit from './priorityTransitComponent';\nimport OptimizeRouteButton from './optimizeRouteButtonComponent';\n\nconst TourRouteApp: FC = () => (\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n
\n
\n);\n\nexport default TourRouteApp;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconTrash: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconTrash;\n","import React, { useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { deepEqual } from 'fast-equals';\n\nimport IconTrash from '../icons/iconTrashComponent';\nimport {\n deletePlanSpot,\n deletePlanSpotToApi,\n getPosition,\n planSpotInMaxPositionSelector,\n planSpotInMinPositionSelector,\n} from '../../slices/planSpotSlice';\nimport { AppState, MarkerType } from '../../types';\nimport { deleteTransit } from '../../slices/transitSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { setContentId, toggle } from '../../slices/modalSlice';\nimport { getSpotToApi, setIsDisplayRemoveButton } from '../../slices/modalSpotSlice';\n\ntype MapPointProps = {\n planSpotMarker: MarkerType;\n};\n\nconst PlanSpotMarker = (props: MapPointProps) => {\n const { planSpotMarker } = props;\n // DAYに紐づくplanSpotの最小、最大positionを算出\n const maxPosition = useSelector((state: AppState) => planSpotInMaxPositionSelector(state), deepEqual);\n const minPosition = useSelector((state: AppState) => planSpotInMinPositionSelector(state), deepEqual);\n const containerRef = useRef(null);\n const dispatch = useAppDispatch();\n\n const handleClickDelete = () => {\n if (planSpotMarker) {\n dispatch(deletePlanSpotToApi(planSpotMarker.planSpotId || 0));\n dispatch(deleteTransit(planSpotMarker.planSpotId || 0));\n dispatch(deletePlanSpot({ id: planSpotMarker.planSpotId || 0, position: planSpotMarker.position || 0 }));\n }\n };\n\n // imageに関しては、jc-apiから返却されたspotとローカルspotのインスタンスの違いにより画像のURL取得可否がある為、サーバ側にてimgタグとして返却される\n // ため、dangerouslySetInnerHTMLにてimgを表示できるように設定。\n return (\n {\n if (planSpotMarker && planSpotMarker.spot) {\n dispatch(setContentId('spot'));\n dispatch(toggle());\n dispatch(setIsDisplayRemoveButton(true));\n dispatch(getSpotToApi(planSpotMarker.spot.id));\n const planSpot = document.getElementById(`${planSpotMarker.spot.id}`);\n planSpot?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n }\n }}\n >\n
\n \n \n {getPosition(planSpotMarker.position || 0, maxPosition, minPosition)}\n \n \n {/* eslint-disable-next-line react/no-danger */}\n
\n {/* ゴミ箱アイコン */}\n ) => {\n handleClickDelete();\n e.stopPropagation();\n }}\n >\n \n \n {/* スポット名 */}\n {planSpotMarker &&
{planSpotMarker.name || ''}
}\n
\n
\n );\n};\n\nexport default React.memo(PlanSpotMarker);\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { deepEqual } from 'fast-equals';\nimport { OverlayView } from '@react-google-maps/api';\n\nimport { AppState, MarkerType } from '../../types';\nimport PlanSpotMarker from './planSpotMarkerComponent';\nimport { planSpotMarkerSelector } from '../../slices/planSpotSlice';\n\n// Mapに関してはWrapperの子componentとして外部で指定しないと上手く表示されない。\n// 原因はわかりませんが、本家の例も同様の記載方法。useRefが影響していると思います。\n\nconst PlanSpotMarkers: FC = () => {\n // useSelector の比較ロジックは状態の「更新」が発生した場合にのみ、再レンダリングが発生する\n // 更新が発生したかどうかの判定には、SameValueではなく[===]が利用されるため、\n // 更新が発生したかどうかチェックする対象は「セレクタの返り値」であり、それは必ずしもstateとは限らない。\n // === で比較する場合、オブジェクト、配列は値ではなく参照先が同じかの判定になるため、毎回 falseとなり再レンダリングが発生する\n // deepEqualを利用して、ネストしているspotオブジェクトの値を比較できるようにしている\n // その為、planSpotのmarker以外の値が更新されたとしてもplanSpotMarkerSelectorは前回と同じ値と判定され再レンダリングの対象外となる\n const planSpotMarkers = useSelector((state: AppState) => planSpotMarkerSelector(state), deepEqual);\n\n return (\n <>\n {planSpotMarkers.map((marker: MarkerType | undefined) => {\n if (marker) {\n return (\n \n \n \n );\n }\n return null;\n })}\n \n );\n};\n\nexport default React.memo(PlanSpotMarkers);\n","import React from 'react';\n\nimport { AppState, MarkerType } from '../../types';\nimport { createPlanSpotToApi } from '../../slices/planSpotSlice';\nimport IconPlus from '../icons/iconPlusComponent';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { setContentId, toggle } from '../../slices/modalSlice';\nimport { getSpotToApi } from '../../slices/modalSpotSlice';\nimport { useSelector } from 'react-redux';\n\ntype MapPointProps = {\n mapSpotMarker: MarkerType;\n};\n\nconst MapSpotMarker = (props: MapPointProps) => {\n const { mapSpotMarker } = props;\n const dispatch = useAppDispatch();\n // imageに関しては、jc-apiから返却されたspotとローカルspotのインスタンスの違いにより画像のURL取得可否がある為、サーバ側にてimgタグとして返却される\n // ため、dangerouslySetInnerHTMLにてimgを表示できるように設定。\n const selectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const categoryColorAmount = 9 // カテゴリーの色の数\n const colorIndex = (selectedIndex - 1) % categoryColorAmount + 1;\n\n return (\n ) => {\n if (mapSpotMarker && mapSpotMarker.spot) {\n dispatch(setContentId('spot'));\n dispatch(toggle());\n dispatch(getSpotToApi(mapSpotMarker.spot.id));\n const mapSpot = document.getElementById(`${mapSpotMarker.spot.id}`);\n mapSpot?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n }\n e.stopPropagation();\n }}\n >\n {/* eslint-disable-next-line react/no-danger */}\n
\n
\n ) => {\n if (mapSpotMarker && mapSpotMarker.spot) {\n dispatch(createPlanSpotToApi({ spotId: mapSpotMarker.spot.id, position: 'auto' }));\n }\n // 親divのonclick処理を実行しないようにバブリング伝播を阻止\n e.stopPropagation();\n }}\n >\n \n \n
\n\n {/* スポット名 */}\n {mapSpotMarker &&
{mapSpotMarker.name}
}\n
\n );\n};\n\nexport default React.memo(MapSpotMarker);\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { deepEqual } from 'fast-equals';\nimport { OverlayView } from '@react-google-maps/api';\n\nimport { mapSpotMarkerSelector } from '../../slices/mapSpotSlice';\nimport { AppState, MarkerType } from '../../types';\nimport MapSpotMarker from './mapSpotMarkerComponent';\n\n// Mapに関してはWrapperの子componentとして外部で指定しないと上手く表示されない。\n// 原因はわかりませんが、本家の例も同様の記載方法。useRefが影響していると思います。\n\nconst MapSpotMarkers: FC = () => {\n // useSelector の比較ロジックは状態の「更新」が発生した場合にのみ、再レンダリングが発生する\n // 更新が発生したかどうかの判定には、SameValueではなく[===]が利用されるため、\n // 更新が発生したかどうかチェックする対象は「セレクタの返り値」であり、それは必ずしもstateとは限らない。\n // === で比較する場合、オブジェクト、配列は値ではなく参照先が同じかの判定になるため、毎回 falseとなり再レンダリングが発生する\n // deepEqualを利用して、ネストしているspotオブジェクトの値を比較できるようにしている\n const mapSpotMarkers = useSelector((state: AppState) => mapSpotMarkerSelector(state), deepEqual);\n\n return (\n <>\n {mapSpotMarkers.map((marker: MarkerType | undefined) => {\n if (marker) {\n return (\n \n \n \n );\n }\n return null;\n })}\n \n );\n};\n\nexport default React.memo(MapSpotMarkers);\n","import React, { FC, useCallback, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deepEqual } from 'fast-equals';\n\nimport { GoogleMap, Polyline } from '@react-google-maps/api';\nimport { planSpotMarkerSelector } from '../../slices/planSpotSlice';\nimport { setMap, setIsRunFitBounds, setIsInitializeMapCenter } from '../../slices/mapSlice';\nimport { AppState, MarkerType } from '../../types';\nimport PlanSpotMarkers from './planSpotMarkersComponent';\nimport MapSpotMarkers from './mapSpotMarkersComponent';\n\ninterface MapProps {\n customSpot: boolean;\n initialZoomLevel: number;\n zoom: number;\n center: { lat: number; lng: number };\n}\n\nconst App: FC = (mapProps: MapProps) => {\n // useSelector の比較ロジックは状態の「更新」が発生した場合にのみ、再レンダリングが発生する\n // 更新が発生したかどうかの判定には、SameValueではなく[===]が利用されるため、\n // 更新が発生したかどうかチェックする対象は「セレクタの返り値」であり、それは必ずしもstateとは限らない。\n // === で比較する場合、オブジェクト、配列は値ではなく参照先が同じかの判定になるため、毎回 falseとなり再レンダリングが発生する\n // deepEqualを利用して、ネストしているspotオブジェクトの値を比較できるようにしている\n // その為、planSpotのmarker以外の値が更新されたとしてもplanSpotMarkerSelectorは前回と同じ値と判定され再レンダリングの対象外となる\n const planSpotMarkers = useSelector((state: AppState) => planSpotMarkerSelector(state), deepEqual);\n const { zoom, center, initialZoomLevel } = mapProps;\n const isRunFitBounds = useSelector((state: AppState) => state.map.isRunFitBounds);\n const isInitializeMapCenter = useSelector((state: AppState) => state.map.isInitializeMapCenter);\n const day = useSelector((state: AppState) => state.activeDay.day);\n const map = useSelector((state: AppState) => state.map.map);\n const displayPlanSpotMarkers = planSpotMarkers.filter(\n (marker: MarkerType | undefined) => marker !== undefined && marker?.day === day\n );\n const dispatch = useDispatch();\n\n // 地図の中心位置を設定する\n useEffect(() => {\n if (map) {\n // 初回読み込み時、または新規にプラン作成された際に一旦ズームレベル、アプリ初期値の中心座標を表示する\n // planSpotが既に存在している場合は、fitBoundsが呼ばれる\n if (isInitializeMapCenter) {\n map.setZoom(initialZoomLevel);\n map.setCenter(center || new google.maps.LatLng(0, 0));\n dispatch(setIsInitializeMapCenter(false));\n }\n\n // planSpotが1件、または全て同じスポットの場合planSpotを地図の中心に表示する\n if (\n displayPlanSpotMarkers.length === 1 ||\n (displayPlanSpotMarkers.length > 0 &&\n displayPlanSpotMarkers.every(\n (v: MarkerType | undefined) => v?.spot?.id === displayPlanSpotMarkers[0]?.spot?.id\n ))\n ) {\n map.setCenter(new google.maps.LatLng(displayPlanSpotMarkers[0]?.lat || 0, displayPlanSpotMarkers[0]?.lng || 0));\n }\n }\n }, [displayPlanSpotMarkers]);\n\n // fitBoundsの実施を行う\n // 初回読み込み、DAYの切り替え、Planの切り替え時にplanSpotが存在している場合のみ。\n useEffect(() => {\n if (map) {\n // 地図のビューポート(位置座標とズーム値)を変更\n // planSpotに含まれているspotが全て同一の場合は、fitBoundsを行わない\n if (\n isRunFitBounds &&\n displayPlanSpotMarkers.length > 1 &&\n !displayPlanSpotMarkers.every(\n (v: MarkerType | undefined) => v?.spot?.id === displayPlanSpotMarkers[0]?.spot?.id\n )\n ) {\n map.fitBounds(\n displayPlanSpotMarkers.reduce(\n (bounds: google.maps.LatLngBounds, marker: MarkerType | undefined) =>\n bounds.extend(new google.maps.LatLng(marker?.lat || 0, marker?.lng || 0)),\n new google.maps.LatLngBounds()\n )\n );\n }\n\n // isRunFitBoundsフラグは初回読み込み時activePlan情報を取得する処理が完了後、(getActivePlanToApi)trueになる。\n // trueによりfitboundsが実施される為、以降はさせてない為フラグを初期化する\n if (isRunFitBounds) {\n dispatch(setIsRunFitBounds(false));\n }\n }\n }, [isRunFitBounds]);\n\n const onLoad = useCallback((mapInstance: google.maps.Map) => {\n mapInstance.setCenter(center);\n dispatch(setMap(mapInstance));\n }, []);\n\n const onUnmount = useCallback(() => {\n dispatch(setMap(undefined));\n }, []);\n\n const polylineOptions = {\n strokeColor: '#FF0000',\n strokeOpacity: 0.3,\n strokeWeight: 5,\n };\n\n const polylinePath: { lat: any; lng: any }[] = displayPlanSpotMarkers\n .sort((a, b) => ((a?.position || 0) > (b?.position || 0) ? 1 : -1))\n .map((marker) => ({\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n lat: marker.lat,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n lng: marker.lng,\n }));\n\n return (\n <>\n {/* 新デザイン対応により以下は不要になったが完全対応まで残しておく */}\n {/**/}\n \n \n \n \n \n \n );\n};\n\nexport default React.memo(App);\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconDoubleDown: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconDoubleDown;\n","import React from 'react';\n\nimport IconDoubleDown from '../icons/iconDoubleDownComponent';\n\nconst ScrollButton = (): JSX.Element => {\n return (\n {\n document.getElementById('planRoute')?.scrollIntoView({ behavior: \"smooth\" });\n }}\n >\n \n \n );\n};\n\nexport default ScrollButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconLink: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconLink;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getSpotToApi } from '../../slices/modalSpotSlice';\nimport { toggle } from '../../slices/modalSlice';\nimport { AppState, MapSpot, SpotLink } from '../../types';\nimport I18n from '../../i18n/i18n';\nimport { createPlanSpotToApi } from '../../slices/planSpotSlice';\nimport { focusSpotOnMap } from '../../slices/mapSlice';\nimport { setSpotId } from '../../slices/spotSlideTileSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport IconPlus from '../icons/iconPlusComponent';\nimport IconLink from '../icons/iconLinkComponent';\n\ntype SpotSlideTileCardProps = {\n mapSpot: MapSpot;\n};\n\nconst SpotSlideTileCard = (props: SpotSlideTileCardProps): JSX.Element => {\n const dispatch = useAppDispatch();\n const { mapSpot } = props;\n const mapMenuSelectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const selectedSpotId = useSelector((state: AppState) => state.spotSlideTile.selectedSpotId);\n\n return (\n {\n dispatch(setSpotId(selectedSpotId === mapSpot.id ? 0 : mapSpot.id));\n dispatch(focusSpotOnMap(new google.maps.LatLng({ lat: mapSpot.spot.lat, lng: mapSpot.spot.lng })));\n }}\n >\n
\n
\n \n
\n ) => {\n e.stopPropagation();\n dispatch(toggle());\n dispatch(getSpotToApi(mapSpot.spot.id));\n }}\n >\n {mapSpot.spot.name}\n
\n
{mapSpot.spot.description}
\n
\n ) => {\n e.stopPropagation();\n dispatch(\n createPlanSpotToApi({\n spotId: mapSpot.spot.id,\n position: mapMenuSelectedIndex === 2 ? '1' : 'auto',\n })\n );\n }}\n >\n \n {I18n.t('japan_concierge.map_partials.common.add_to_course')}\n \n
\n
\n\n {mapSpot.spot.links.length !== 0 && (\n
\n {mapSpot.spot.links.map((link: SpotLink) => (\n ) => {\n e.stopPropagation();\n }}\n >\n \n {link.name}\n \n ))}\n
\n )}\n
\n
\n
\n );\n};\n\nexport default SpotSlideTileCard;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { mapSpotSelectors } from '../../slices/mapSpotSlice';\nimport { AppState, MapSpot } from '../../types';\nimport SpotSlideTileCard from './spotSlideTileCardComponent';\nimport I18n from '../../i18n/i18n';\nimport { hidePopup, setPopupContentText, showPopup } from '../../slices/popupSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport IconAngleRight from '../icons/iconAngleRightComponent';\nimport IconAngleLeft from '../icons/iconAngleLeftComponent';\n\nconst SpotSlider = (): JSX.Element => {\n const mapSpots = useSelector((state: AppState) => mapSpotSelectors.selectAll(state));\n const isOpen = useSelector((state: AppState) => state.spotSlideTile.isOpen);\n const mapMenuSelectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const isLoading = useSelector((state: AppState) => state.mapSpot.isLoading);\n const dispatch = useAppDispatch();\n const containerRef = useRef(null);\n const itemRefs = useRef<(HTMLDivElement | null)[]>([]);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const [hoveringNext, setHoveringNext] = useState(false);\n const [hoveringPrev, setHoveringPrev] = useState(false);\n const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n const updateButtonVisibility = () => {\n const container = containerRef.current;\n if (container) {\n const canScrollLeft = container.scrollLeft > 0;\n const canScrollRight = container.scrollLeft + container.clientWidth < container.scrollWidth;\n\n setCanScrollLeft(canScrollLeft);\n setCanScrollRight(canScrollRight);\n }\n };\n\n useEffect(() => {\n const updateWindowWidth = () => {\n setWindowWidth(window.innerWidth);\n };\n\n window.addEventListener('resize', updateWindowWidth);\n window.addEventListener('resize', updateButtonVisibility);\n\n return () => {\n window.removeEventListener('resize', updateWindowWidth);\n window.removeEventListener('resize', updateButtonVisibility);\n };\n }, []);\n\n useEffect(() => {\n if (!hoveringNext && !hoveringPrev) {\n updateButtonVisibility();\n }\n }, [hoveringNext, hoveringPrev]);\n\n useEffect(() => {\n itemRefs.current = itemRefs.current.slice(0, mapSpots.length);\n\n updateButtonVisibility();\n\n if (!hoveringNext && !hoveringPrev) {\n updateButtonVisibility();\n }\n }, [mapSpots]);\n\n const handleNextClick = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerRight = container.scrollLeft + container.clientWidth;\n\n for (let i = itemRefs.current.length - 1; i >= 0; i--) {\n const item = itemRefs.current[i];\n if (!item) continue;\n const itemLeft = item.offsetLeft;\n\n if (itemLeft < containerRight) {\n container.scrollLeft = itemLeft;\n break;\n }\n }\n updateButtonVisibility();\n };\n\n const handlePrevClick = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerLeft = container.scrollLeft;\n\n for (let i = 0; i < itemRefs.current.length; i++) {\n const item = itemRefs.current[i];\n if (!item) continue;\n const itemRight = item.offsetLeft + item.clientWidth;\n\n if (itemRight > containerLeft) {\n container.scrollLeft = itemRight - container.clientWidth;\n break;\n }\n }\n updateButtonVisibility();\n };\n\n // 未選択、検索中、プラン編集画面以外の場合\n if (mapMenuSelectedIndex === 0 || isLoading || selectedIndex !== 0) {\n return
;\n }\n\n // お気に入り・カテゴリー検索にて検索結果が0件の場合\n if (mapSpots.length === 0) {\n const message = mapMenuSelectedIndex === 1 ? 'no_favorite_spots' : 'no_matching_spot_found';\n dispatch(setPopupContentText(I18n.t(`japan_concierge.active_plans.show.${message}`)));\n dispatch(showPopup());\n setTimeout(() => dispatch(hidePopup()), 3000);\n\n return
;\n }\n\n return (\n
\n
\n {mapSpots.map((mapSpot: MapSpot, index: number) => (\n
(itemRefs.current[index] = el)} key={mapSpot.id}>\n \n
\n ))}\n {windowWidth >= 576 && (\n <>\n {(canScrollLeft || hoveringPrev) && (\n !isTouchDevice && setHoveringPrev(true)}\n onMouseLeave={() => !isTouchDevice && setHoveringPrev(false)}\n onTouchEnd={() => isTouchDevice && setHoveringPrev(false)}\n >\n \n \n )}\n {(canScrollRight || hoveringNext) && (\n !isTouchDevice && setHoveringNext(true)}\n onMouseLeave={() => !isTouchDevice && setHoveringNext(false)}\n onTouchEnd={() => isTouchDevice && setHoveringNext(false)}\n >\n \n \n )}\n \n )}\n
\n
\n );\n};\n\nexport default SpotSlider;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport ScrollButton from './scrollButtonComponent';\nimport SpotSlider from './spotSliderComponent';\nimport { AppState } from '../../types';\n\nconst SpotSlideTile = (): JSX.Element => {\n const mapMenuSelectedIndex = useSelector((state: AppState) => state.mapMenuCategory.selectedIndex);\n const selectedSeasonIndex = useSelector((state: AppState) => state.mapMenuSeason.selectedIndex);\n const selectedMonth = useSelector((state: AppState) => state.mapMenuMonth.selectedMonth);\n\n // カテゴリー検索 お気に入り登録 スタート地点検索、イベント検索にて検索未実施の場合のみ何も出力しない\n if (mapMenuSelectedIndex === 0 && selectedSeasonIndex === 0 && selectedMonth === 0) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n );\n};\n\nexport default SpotSlideTile;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { optimizeToApi, planSpotInDaySelector } from '../../slices/planSpotSlice';\n\nimport IconSort from '../icons/iconSortComponent';\nimport { useAppDispatch } from '../../active_plan/hook';\n\nconst OptimizeRouteButton: FC = () => {\n const planSpotIds = useSelector((state: AppState) => planSpotInDaySelector(state));\n const dispatch = useAppDispatch();\n\n return (\n {\n dispatch(optimizeToApi());\n }}\n >\n \n \n );\n};\n\nexport default OptimizeRouteButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, PlanDay } from '../../types';\nimport { formatDate } from '../../utils/datetime';\nimport IconCircleDelete from '../icons/iconCircleDeleteComponent';\nimport { activePlanDaySelector, deletePlanDay, deletePlanDayToApi } from '../../slices/planDaySlice';\nimport { deletePlanSpotWithDay } from '../../slices/planSpotSlice';\nimport { setDay } from '../../slices/activeDaySlice';\nimport { setIsRunFitBounds } from '../../slices/mapSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\n\ntype Props = {\n planDay: PlanDay | undefined;\n};\n\nconst PlanDayFC: FC = (props: Props) => {\n const dispatch = useAppDispatch();\n const planStartDate = useSelector((state: AppState) => state.plan.startDate);\n const selectedDay = useSelector((state: AppState) => state.activeDay.day);\n const planDayIds = useSelector((state: AppState) => state.planDay.ids);\n const activePlanDay = useSelector((state: AppState) => activePlanDaySelector(state));\n const { planDay } = props;\n\n if (!planDay) {\n return
;\n }\n\n return (\n ) => {\n e.stopPropagation();\n dispatch(setDay(planDay.day));\n dispatch(setIsRunFitBounds(true));\n }}\n >\n
DAY{planDay.day}
\n {planStartDate && (\n
{formatDate(planStartDate, planDay.day - 1, '/')}
\n )}\n {planDayIds.length > 1 && (\n ) => {\n e.stopPropagation();\n // デイ削除によって繰り上がってきた新しい同日のプランデイを表示\n // 繰り上がってくるプランデイがない場合には消したのよりも1日前の日のプランデイを表示\n let day = activePlanDay?.day || 0;\n if (planDay.day === 1 || activePlanDay?.day === planDayIds.length) {\n day -= 1;\n } else if (\n activePlanDay &&\n planDay.day > 1 &&\n activePlanDay.day === planDay.day &&\n activePlanDay?.day > planDayIds.length - 1\n ) {\n day += 1;\n }\n if (day > 0) {\n dispatch(setDay(day));\n }\n dispatch(deletePlanSpotWithDay({ planDayId: planDay.id, day: planDay.day }));\n dispatch(deletePlanDay(planDay.id));\n dispatch(setIsRunFitBounds(true));\n dispatch(deletePlanDayToApi(planDay.id));\n }}\n >\n \n \n )}\n
\n );\n};\n\nexport default PlanDayFC;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { planDaySelectors, createPlanDayToApi } from '../../slices/planDaySlice';\nimport { setDay } from '../../slices/activeDaySlice';\n\nimport IconPlus from '../icons/iconPlusComponent';\nimport { useAppDispatch } from '../../export/hook';\nimport I18n from '../../i18n/i18n';\n\nconst PlanDayAddButton: FC = () => {\n const planDays = useSelector((state: AppState) => planDaySelectors.selectIds(state));\n const dispatch = useAppDispatch();\n\n if (!planDays || planDays.length === 0) {\n return
;\n }\n\n return (\n = 5 ? '--state_disabled' : ''}`}\n type=\"button\"\n aria-label=\"AddDay\"\n data-testid=\"addDay\"\n disabled={planDays.length >= 5}\n onClick={() => {\n dispatch(setDay(planDays.length + 1));\n dispatch(createPlanDayToApi());\n }}\n >\n \n {I18n.t('japan_concierge.active_plans.show.add_trip_day')}\n \n );\n};\n\nexport default PlanDayAddButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst iconCalendar: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default iconCalendar;\n","import React, { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { toggle, setContentId } from '../../slices/modalSlice';\nimport { setDate } from '../../slices/modalCalendarSlice';\n\nimport IconCalender from '../icons/iconCalendarComponent';\n\nconst PlanDayChangeButton: FC = () => {\n const dispatch = useDispatch();\n const startDate = useSelector((state: AppState) => state.plan.startDate);\n\n return (\n {\n dispatch(setContentId('calender'));\n dispatch(toggle());\n dispatch(setDate(startDate));\n }}\n >\n \n \n );\n};\n\nexport default PlanDayChangeButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { planDaySelectors } from '../../slices/planDaySlice';\nimport OptimizeRouteButton from './optimizeRouteButtonComponent';\nimport PlanDay from './planDayComponent';\nimport PlanDayAddButton from './planDayAddButtonComponent';\nimport PlanDayChangeButton from './planDayChangeButtonComponent';\n\nconst PlanDayApp: FC = () => {\n const planDays = useSelector((state: AppState) => planDaySelectors.selectAll(state));\n\n return (\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n {(planDays || []).map((planDay) => (\n \n ))}\n
\n
\n
\n \n
\n
\n );\n};\n\nexport default PlanDayApp;\n","import React, { FC } from 'react';\n\nimport { createPlanToApi } from '../../slices/planSlice';\nimport { reset as planSpotReset } from '../../slices/planSpotSlice';\nimport { reset as transitReset } from '../../slices/transitSlice';\nimport { setDay } from '../../slices/activeDaySlice';\nimport { setIsInitializeMapCenter } from '../../slices/mapSlice';\nimport { useAppDispatch } from '../../export/hook';\nimport IconPlus from '../icons/iconPlusComponent';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport I18n from '../../i18n/i18n';\n\nconst CreatePlanButton: FC = () => {\n const dispatch = useAppDispatch();\n\n const handleClick = () => {\n dispatch(setIndex(0));\n dispatch(planSpotReset());\n dispatch(transitReset());\n dispatch(setDay(1));\n dispatch(setIsInitializeMapCenter(true));\n dispatch(createPlanToApi());\n };\n\n return (\n \n \n {I18n.t('japan_concierge.active_plans.show.create_a_new_plan')}\n \n );\n};\n\nexport default CreatePlanButton;\n","import React, { FC } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppState, Plan } from '../../types';\nimport { deletePlanToApi, updateActivePlanToApi } from '../../slices/planSlice';\nimport { deletePlan, setIndex } from '../../slices/planMenuSlice';\nimport { reset as planSpotReset } from '../../slices/planSpotSlice';\nimport { reset as transitReset } from '../../slices/transitSlice';\nimport { setDay } from '../../slices/activeDaySlice';\nimport { AppDispatch } from '../../active_plan/store';\nimport IconCircleDelete from '../icons/iconCircleDeleteComponent';\n\ntype Props = {\n plan: Plan;\n};\n\nconst PlanFC: FC = (props: Props) => {\n const { plan } = props;\n const activePlanId = useSelector((state: AppState) => state.plan.id);\n const dispatch: AppDispatch = useDispatch();\n\n const closeClick = (e: React.MouseEvent) => {\n // activePlanの場合、planSpot, transitを削除する\n if (activePlanId === plan.id) {\n dispatch(planSpotReset());\n dispatch(transitReset());\n }\n dispatch(setDay(1));\n dispatch(deletePlan(plan.id));\n dispatch(deletePlanToApi(plan.id));\n // プラン選択処理(handleClick)が起動しないようにバブリングを抑止\n e.stopPropagation();\n };\n\n const handleClick = () => {\n if (activePlanId !== plan.id) {\n dispatch(setIndex(0));\n dispatch(setDay(1));\n dispatch(planSpotReset());\n dispatch(transitReset());\n dispatch(updateActivePlanToApi(plan.id));\n } else {\n dispatch(setIndex(0));\n }\n };\n\n return (\n \n {plan.name}\n \n
\n {plan.name}\n
\n
\n );\n};\n\nexport default PlanFC;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, Plan } from '../../types';\n\nimport CreatePlanButton from './createPlanButtonComponent';\nimport PlanFC from './planComponent';\nimport I18n from '../../i18n/i18n';\n\nconst PlanList: FC = () => {\n const plans = useSelector((state: AppState) => state.planMenu.plans);\n\n return (\n
\n

{I18n.t('japan_concierge.active_plans.show.my_plans')}

\n\n
\n \n
\n
\n
\n {(plans || []).map((plan: Plan) => (\n \n ))}\n
\n
\n
\n );\n};\n\nexport default PlanList;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconPencil: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconPencil;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Rails from '@rails/ujs';\nimport { AppState } from '../../types';\n\nimport IconShare from '../icons/iconShareComponent';\nimport I18n from '../../i18n/i18n';\n\nconst ExportButton: FC = () => {\n const planId = useSelector((state: AppState) => state.plan.id);\n const planSpotIds = useSelector((state: AppState) => state.planSpot.ids);\n const rootPath = useSelector((state: AppState) => state.config.rootPath);\n const iframe = useSelector((state: AppState) => state.config.iframe);\n\n return (\n \n \n \n );\n};\n\nexport default ExportButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconExternalLink: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconExternalLink;\n","import React, { FC, useEffect } from 'react';\n\nimport { getWebsiteListToApi, setIndex } from '../../slices/planMenuSlice';\nimport { useAppDispatch } from '../../export/hook';\nimport I18n from '../../i18n/i18n';\nimport IconExternalLink from '../icons/iconExternalLinkComponent';\n\nconst NearSiteButton: FC = () => {\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(getWebsiteListToApi());\n }, []);\n\n const handleClick = () => {\n dispatch(setIndex(4));\n };\n\n return (\n \n );\n};\n\nexport default NearSiteButton;\n","import React, { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { AppState, Plan } from '../../types';\n\nimport IconPencil from '../icons/iconPencilComponent';\nimport ExportButton from './exportButtonComponent';\nimport NearSiteButton from './nearSiteButtonComponent';\nimport { toggle } from '../../slices/modalSlice';\nimport { setPlan } from '../../slices/modalPlanSlice';\n\nconst PlanName: FC = () => {\n const { nearSite } = useSelector((state: AppState) => state.config);\n const plan = useSelector((state: AppState) => state.plan);\n\n const dispatch = useDispatch();\n\n const onClickByPlanEdit = () => {\n dispatch(toggle());\n dispatch(setPlan(plan));\n };\n\n return (\n
\n
\n
\n

\n {plan.name}\n

\n {/* eslint-disable-next-line react/button-has-type */}\n \n
\n
\n {nearSite && (\n
\n \n
\n )}\n
\n \n
\n
\n
\n
\n );\n};\n\nexport default PlanName;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconClock: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconClock;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconTimes: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconTimes;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconSort2: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n\n \n \n);\n\nexport default IconSort2;\n","import React, { FC } from 'react';\nimport IconLink from '../icons/iconLinkComponent';\nimport { SpotLink } from '../../types';\n\ninterface Props {\n link: SpotLink;\n}\n\nconst OutsideLink: FC = ({link}) => {\n return (\n \n \n {link.name}\n \n );\n};\n\nexport default OutsideLink;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { type EntityId } from '@reduxjs/toolkit';\n\nimport { deepEqual } from 'fast-equals';\nimport { activePlanDaySelector } from '../../slices/planDaySlice';\nimport {\n deletePlanSpotToApi,\n deletePlanSpot,\n planSpotSelectors,\n getPosition,\n planSpotInMaxPositionSelector,\n planSpotInMinPositionSelector,\n planSpotPositionSelector,\n} from '../../slices/planSpotSlice';\nimport { deleteTransit, getTransitTime, transitPositionSelector } from '../../slices/transitSlice';\nimport { getSpotToApi, setIsDisplayRemoveButton } from '../../slices/modalSpotSlice';\nimport { toggle, setContentId } from '../../slices/modalSlice';\nimport { setPlanSpot } from '../../slices/modalStaySlice';\n\nimport { AppState, SpotLink } from '../../types';\n\nimport IconClock from '../icons/iconClockComponent';\nimport IconCircleDelete from '../icons/iconTimesComponent';\nimport IconSort2 from '../icons/iconSort2Component';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { formatTime } from '../../utils/datetime';\nimport OutsideLink from './outsideLinkComponent';\n\ninterface Props {\n planSpotId: EntityId;\n}\n\nconst Spot: FC = (props: Props) => {\n const { planSpotId } = props;\n const planDay = useSelector((state: AppState) => activePlanDaySelector(state));\n const planSpot = useSelector((state: AppState) => planSpotSelectors.selectById(state, planSpotId));\n const planSpots = useSelector(\n (state: AppState) => planSpotPositionSelector(planSpot?.position || 0)(state),\n deepEqual\n );\n const transits = useSelector((state: AppState) => transitPositionSelector(planSpot?.position || 0)(state), deepEqual);\n // DAYに紐づくplanSoptの最小、最大positionを算出\n const maxPosition = useSelector((state: AppState) => planSpotInMaxPositionSelector(state), deepEqual);\n const minPosition = useSelector((state: AppState) => planSpotInMinPositionSelector(state), deepEqual);\n const dispatch = useAppDispatch();\n\n if (!planSpot || !planSpot.spot || planDay?.day !== planSpot.day) {\n return
;\n }\n\n // 削除処理\n // tsでは関数名deleteが利用できない\n const onClickDelete = () => {\n if (planSpot) {\n dispatch(deletePlanSpotToApi(planSpot.id));\n }\n dispatch(deleteTransit(planSpotId));\n dispatch(deletePlanSpot({ id: planSpotId, position: planSpot.position }));\n };\n\n const formatHour = (hour: number): string => {\n if (!hour) return '';\n return `${hour}${I18n.t('japan_concierge.active_plans.show.hour_short')}`;\n };\n\n const formatMinute = (hour: number, minute: number): string => {\n if (hour > 0 && minute === 0) return '';\n if (hour === 0 && minute === 0) return `0${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n return `${hour > 0 ? ` ${minute}` : minute}${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n };\n\n const format = (time: number): string => {\n if (!time) return `0${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n\n const hour = Math.floor(time / 60);\n const minute = time % 60;\n\n return `${formatHour(hour)}${formatMinute(hour, minute)}`;\n };\n\n // プランの起点となる出発時刻\n const planStartTime = new Date();\n // planDay.startTimeHour || 9 で判定するとplanDay.startTimeHourが0の場合もnull or undifined判定され9が設定される為以下のようにして\n // 0も設定できるようにしています\n if (planDay?.startTimeHour !== undefined) {\n planStartTime.setHours(planDay.startTimeHour, planDay.startTimeMinute || 0);\n }\n const startTime = new Date();\n if (planDay?.startTimeHour !== undefined) {\n startTime.setHours(planDay.startTimeHour || 9, planDay.startTimeMinute || 0);\n }\n\n // 表示するプランスポットのpositionより以前の全てのスポットの滞在時間の合計値\n const stayTotalBeforeSpot = planSpots.reduce((sum, p) => {\n if (p?.position !== planSpot?.position) {\n return sum + (p?.stay || 0);\n }\n return sum;\n }, 0);\n // 表示するプランスポットのpositionより以前の全ての移動時間の合計値\n const transitTotal = transits.reduce((sum, t) => {\n const targetPlanSpot = planSpots.find((p) => p?.id === t?.toPlanSpotId);\n const time = getTransitTime(targetPlanSpot?.transitTime || 0, targetPlanSpot?.mode || 'auto', t);\n return sum + time;\n }, 0);\n\n // 到着時刻\n const arrivalTime = new Date(\n planStartTime.setMinutes(planStartTime.getMinutes() + transitTotal + stayTotalBeforeSpot)\n );\n // 出発時刻\n const departureTime = new Date(planStartTime.setMinutes(planStartTime.getMinutes() + (planSpot?.stay || 0)));\n\n const isArrivalTimeWarning = arrivalTime.getDate() !== new Date(startTime).getDate();\n const isDepartureTimeWarning = departureTime.getDate() !== new Date(startTime).getDate();\n\n return (\n
\n \n \n {getPosition(planSpot.position || 0, maxPosition, minPosition)}\n \n \n \n \n \n \n\n
\n {/* スポット画像 */}\n
\n {planSpot.name}\n
\n\n {/* スポット詳細 */}\n
\n {/* 到着時刻 - 出発時刻 */}\n
\n \n {formatTime(arrivalTime)}\n \n -\n \n {formatTime(departureTime)}\n \n
\n\n {/* {スポット名} */}\n ) => {\n e.stopPropagation();\n if (planSpot?.spot) {\n dispatch(setContentId('spot'));\n dispatch(toggle());\n dispatch(setIsDisplayRemoveButton(true));\n dispatch(getSpotToApi(planSpot.spot.id));\n }\n }}\n >\n {planSpot.name}\n
\n\n {/* 滞在時間 */}\n
\n \n 滞在時間:\n \n {`${format(planSpot.stay)}`}\n \n {\n dispatch(setContentId('stay'));\n dispatch(toggle());\n dispatch(setPlanSpot(planSpot));\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.edit_visit_duration')}\n {I18n.t('japan_concierge.active_plans.show.edit')}\n \n
\n\n {/* リンク */}\n
\n {planSpot.spot.links && planSpot.spot.links.length > 0 && (\n
\n {planSpot.spot.links.map((link: SpotLink) => (\n \n ))}\n
\n )}\n
\n\n {/* 説明 */}\n {planSpot.spot.description &&
{planSpot.spot.description}
}\n
\n
\n
\n );\n};\n\nexport default Spot;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { activePlanDaySelector } from '../../slices/planDaySlice';\nimport { toggle, setContentId } from '../../slices/modalSlice';\nimport { setTime } from '../../slices/modalStartSlice';\nimport type { AppState, PlanDay } from '../../types';\n\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { formatTime } from '../../utils/datetime';\n\nconst startTime: FC = () => {\n const planDay: PlanDay | undefined = useSelector((state: AppState) => activePlanDaySelector(state));\n const dispatch = useAppDispatch();\n\n if (!planDay) {\n return
;\n }\n\n // 0も設定できるようにしています\n const startTime = new Date();\n if (planDay?.startTimeHour !== undefined) {\n startTime.setHours(planDay.startTimeHour || 9, planDay.startTimeMinute || 0);\n }\n\n return (\n
\n
\n
\n START {formatTime(startTime)}\n
\n {\n dispatch(setContentId('start'));\n dispatch(toggle());\n dispatch(setTime(planDay));\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.change_start_time')}\n \n
\n );\n};\n\nexport default startTime;\n","import React, { FC, ComponentType } from 'react';\n\ntype IconProps = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\ninterface Props {\n TransitIconComponent: ComponentType;\n formatTransitTime: string;\n}\n\nconst TransitInfo: FC = (props) => {\n const { TransitIconComponent, formatTransitTime } = props;\n\n return (\n
\n \n \n \n {formatTransitTime}\n
\n );\n};\n\nexport default TransitInfo;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconWalking: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n \n \n \n \n);\n\nexport default IconWalking;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconMapRoot: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconMapRoot;\n","import React, { useEffect, FC, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { type EntityId } from '@reduxjs/toolkit';\n\nimport { planSpotSelectors } from '../../slices/planSpotSlice';\nimport { getTransitToApi, getTransitTime, transitSelectors } from '../../slices/transitSlice';\nimport { setTransit } from '../../slices/modalTransitSlice';\nimport { toggle, setContentId } from '../../slices/modalSlice';\n\nimport { AppState } from '../../types';\n\nimport I18n from '../../i18n/i18n';\nimport { activePlanDaySelector } from '../../slices/planDaySlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport IconCar from '../icons/iconCarComponent';\nimport TransitInfo from './transitInfoComponent';\nimport IconTrain from '../icons/iconTrainComponent';\nimport IconBicycle from '../icons/iconBicycleComponent';\nimport IconWalking from '../icons/iconWalkingComponent';\nimport IconMapRoot from '../icons/iconMapRootComponent';\n\ninterface Props {\n fromPlanSpotId: EntityId;\n toPlanSpotId: EntityId;\n}\n\nconst TransitFC: FC = (props: Props) => {\n const { fromPlanSpotId, toPlanSpotId } = props;\n const priorityMode = useSelector((state: AppState) => state.plan.priorityMode);\n const fromPlanSpot = useSelector((state: AppState) => planSpotSelectors.selectById(state, fromPlanSpotId));\n const toPlanSpot = useSelector((state: AppState) => planSpotSelectors.selectById(state, toPlanSpotId));\n const planDay = useSelector((state: AppState) => activePlanDaySelector(state));\n\n const transit = useSelector((state: AppState) => transitSelectors.selectById(state, toPlanSpot?.id || 0));\n const dispatch = useAppDispatch();\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (fromPlanSpot && toPlanSpot && fromPlanSpot.day === toPlanSpot.day) {\n dispatch(getTransitToApi({ priorityMode, fromPlanSpot, toPlanSpot }));\n // 初期表示、スポットの追加、スポット間の並び替え時にローダーを表示。\n setIsLoading(true);\n }\n }, [fromPlanSpot, toPlanSpot, priorityMode]);\n\n if (!transit && isLoading) {\n return (\n
\n
\n
\n );\n }\n\n if (toPlanSpot?.position === 0 || !transit || !toPlanSpot || !planDay || planDay.day !== transit.day) {\n return (\n
\n
\n
\n );\n }\n\n const formatHour = (hour: number): string => {\n if (!hour) return '';\n return `${hour}${I18n.t('japan_concierge.active_plans.show.hour_short')}`;\n };\n\n const formatMinute = (hour: number, minute: number): string => {\n if (hour > 0 && minute === 0) return '';\n if (hour === 0 && minute === 0) return `0${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n return `${hour > 0 ? ` ${minute}` : minute}${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n };\n\n const format = (time: number): string => {\n if (!time) return 'ー';\n\n const hour = Math.floor(time / 60);\n const minute = time % 60;\n\n return `${formatHour(hour)}${formatMinute(hour, minute)}`;\n };\n\n const transitTime = getTransitTime(toPlanSpot?.transitTime || 0, toPlanSpot.mode, transit);\n const formatTransitTime = format(transitTime);\n\n // 行き方URLの取得\n const directionUrl = (): string => {\n if (toPlanSpot.mode === 'car' || (toPlanSpot.mode === 'auto' && transit.autoDisplayMode === 'car')) {\n return transit.carDirectionUrl;\n }\n if (toPlanSpot.mode === 'train' || (toPlanSpot.mode === 'auto' && transit.autoDisplayMode === 'train')) {\n return transit.trainDirectionUrl;\n }\n if (toPlanSpot.mode === 'walk' || (toPlanSpot.mode === 'auto' && transit.autoDisplayMode === 'walk')) {\n return transit.walkDirectionUrl;\n }\n if (toPlanSpot.mode === 'bicycle' || (toPlanSpot.mode === 'auto' && transit.autoDisplayMode === 'bicycle')) {\n return transit.bicycleDirectionUrl;\n }\n return '';\n };\n\n const isMode = (mode: string): boolean =>\n (toPlanSpot.mode === 'auto' && transit.autoDisplayMode === mode) || toPlanSpot.mode === mode;\n\n return (\n
\n
\n
\n
\n
\n {isMode('walk') && (\n \n )}\n {isMode('car') && (\n \n )}\n {isMode('train') && (\n \n )}\n {isMode('bicycle') && (\n \n )}\n
\n\n {\n dispatch(setContentId('transit'));\n dispatch(toggle());\n dispatch(\n setTransit({\n transit,\n transitTime,\n transitRemark: toPlanSpot?.transitRemark || '',\n mode: toPlanSpot.mode,\n })\n );\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.edit_transit_duration')}\n {I18n.t('japan_concierge.active_plans.show.edit')}\n \n
\n \n
\n
\n );\n};\n\nexport default TransitFC;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { type EntityId } from '@reduxjs/toolkit';\nimport { deepEqual } from 'fast-equals';\n\nimport { planSpotSelectors, planSpotInDaySelector } from '../../slices/planSpotSlice';\n\nimport Spot from './planSpotComponent';\nimport StartTime from './startTimeComponent';\nimport Transit from './transitComponent';\nimport { AppState } from '../../types';\n\nconst PlanSpotApp: FC = () => {\n // idsの場合、追加・削除以外変更されることが無いため1planSpotの内部情報が更新されてもここには影響受けない為再レンダリングが発生せず、\n // 画面のちらつきがおきない。\n const planSpotIds = useSelector((state: AppState) => planSpotSelectors.selectIds(state));\n // DAYに紐づくplanSpot数を取得。class=jc-plan-spotsで余分なpaddingが表示されないようにする為\n const dayPlanSpotIds = useSelector((state: AppState) => planSpotInDaySelector(state), deepEqual);\n\n if (planSpotIds.length === 0 || dayPlanSpotIds.length === 0) {\n return
;\n }\n\n return (\n
\n
\n {(planSpotIds || []).map((id: EntityId, index: number) => (\n // Componentを複数配置し、ループする場合一意となるkeyを設定する必要がある\n
\n {/* 移動情報 */}\n {index > 0 && (\n
\n \n
\n )}\n {/* スポット情報 */}\n
\n {/* START 時刻 各DAYの先頭のみに表示 */}\n {index === 0 && }\n \n
\n
\n ))}\n
\n
\n );\n};\n\nexport default React.memo(PlanSpotApp);\n","import React, { FC } from 'react';\nimport Rails from '@rails/ujs';\nimport { useSelector } from 'react-redux';\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\n\ninterface PropsType {\n iframe: boolean;\n}\n\nconst SingOutButton: FC = (props: PropsType) => {\n const { iframe } = props;\n const rootPath = useSelector((state: AppState) => state.config.rootPath);\n\n if (iframe) {\n return (\n {\n window.parent.postMessage('jc-signout', '*');\n }}\n >\n {I18n.t('japan_concierge.auth_menus.show.sign_out')}\n \n );\n }\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default SingOutButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconGoogle: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconGoogle;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconHeart: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconHeart;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconList: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconList;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconTwitter: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconTwitter;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconHandSwipe: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconHandSwipe;\n","import React, { FC, useEffect, useRef, useState } from 'react';\n\nimport SingOutButton from './signOutButtonComponent';\nimport { AppState, SocialMediaAuth } from '../../types';\nimport IconGoogle from '../icons/iconGoogleComponent';\nimport I18n from '../../i18n/i18n';\nimport Rails from '@rails/ujs';\nimport { useSelector } from 'react-redux';\nimport IconHeart from '../icons/iconHeartComponent';\nimport IconList from '../icons/iconListComponent';\nimport IconTwitter from '../icons/iconTwitterComponent';\nimport IconExternalLink from '../icons/iconExternalLinkComponent';\nimport IconHandSwipe from '../icons/iconHandSwipeComponent';\n\ninterface PropsType {\n iframe: boolean;\n socialMediaAuth: SocialMediaAuth;\n}\n\nconst LoginPage: FC = (props: PropsType) => {\n const { iframe, socialMediaAuth } = props;\n const parentUrl = useSelector((state: AppState) => state.sns.parentUrl);\n const isDataRemote = useSelector((state: AppState) => state.sns.isDataRemote);\n const rootPath = useSelector((state: AppState) => state.config.rootPath);\n\n const [showScrollHint, setShowScrollHint] = useState(false);\n const tableRef = useRef(null);\n const [isAnimating, setIsAnimating] = useState(false);\n\n const hintStyle = {\n opacity: isAnimating ? 0 : 1,\n };\n\n const checkScrollable = () => {\n if (tableRef.current) {\n const tableWidth = tableRef.current?.offsetWidth || 0;\n const parentWidth = tableRef.current?.parentElement?.offsetWidth || 0;\n\n if (tableWidth > parentWidth) {\n setShowScrollHint(true);\n } else {\n setShowScrollHint(false);\n }\n }\n };\n\n const handleHintClick = () => {\n setIsAnimating(true);\n\n setTimeout(() => {\n setIsAnimating(false);\n setShowScrollHint(false);\n }, 300);\n };\n\n const handleScroll = () => {\n if (tableRef.current && tableRef.current.parentElement) {\n const parent = tableRef.current.parentElement;\n\n if (parent.scrollLeft > 0 && showScrollHint) {\n setIsAnimating(true);\n }\n }\n };\n\n useEffect(() => {\n checkScrollable();\n window.addEventListener('resize', checkScrollable);\n\n const parent = tableRef.current?.parentElement;\n if (parent) {\n parent.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n window.removeEventListener('resize', checkScrollable);\n\n if (parent) {\n parent.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n useEffect(() => {\n if (isAnimating) {\n const timer = setTimeout(() => {\n setIsAnimating(false);\n setShowScrollHint(false);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n }, [isAnimating]);\n\n if (socialMediaAuth.name) {\n return (\n
\n
\n {I18n.t('japan_concierge.active_plans.show.username')}: {socialMediaAuth.name}\n
\n
\n \n
\n
\n );\n }\n\n return (\n // SNS認証ステータス表示(認証済みか否かでdiv内のコンテンツが書き換えられる\n
\n

\n {I18n.t('japan_concierge.active_plans.show.login_sns_for_convenience')}\n

\n\n
\n {/*
\n \n \n \n \n
*/}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n {I18n.t('japan_concierge.active_plans.show.save_favorites_list')}\n
\n
\n
\n \n {I18n.t('japan_concierge.active_plans.show.save_my_plan')}\n
\n
\n
\n \n {I18n.t('japan_concierge.active_plans.show.link_nearby_travel_sites')}\n
\n \n ({I18n.t('japan_concierge.active_plans.show.add_spots_other_websites_to_your_favorites')})\n \n
\n {I18n.t('japan_concierge.active_plans.show.with_login')}\n ⚪︎\n
\n ⚪︎\n \n ※{I18n.t('japan_concierge.active_plans.show.saved_available_all_devices')}\n \n
\n
⚪︎
{I18n.t('japan_concierge.active_plans.show.no_login')}⚪︎\n
\n \n \n ※{I18n.t('japan_concierge.active_plans.show.saved_web_browser')}\n \n
\n
×
\n {showScrollHint && (\n
\n \n {I18n.t('japan_concierge.active_plans.show.scrollable_horizontally')}\n
\n )}\n
\n
\n );\n};\n\nexport default LoginPage;\n","import React, { FC, useEffect } from 'react';\n\nimport { getFavoriteSpotListToApi, setIndex } from '../../slices/planMenuSlice';\nimport { useAppDispatch } from '../../export/hook';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../types';\nimport IconHeart from '../icons/iconHeartComponent';\nimport I18n from '../../i18n/i18n';\n\nconst FavoriteButton: FC = () => {\n const dispatch = useAppDispatch();\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n\n useEffect(() => {\n dispatch(getFavoriteSpotListToApi());\n }, []);\n\n const handleClick = () => {\n dispatch(setIndex(1));\n };\n\n return (\n \n \n {I18n.t('japan_concierge.active_plans.top_menu.my_favorite_spots')}\n \n );\n};\n\nexport default FavoriteButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconQuestionCircle: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconQuestionCircle;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\nimport IconQuestionCircle from '../icons/iconQuestionCircleComponent';\n\nconst HelpButton: FC = () => {\n const { helpUrl, helpUrlAnchorLink } = useSelector((state: AppState) => state.config);\n const jcHelpUrlWithLocale = (): string => {\n if (['ja', 'zh-TW', 'zh-CN', 'ko'].includes(I18n.locale)) {\n return I18n.locale.toLowerCase();\n }\n return 'en';\n };\n\n return (\n \n \n {I18n.t('japan_concierge.active_plans.top_menu.help_button')}\n \n );\n};\n\nexport default HelpButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconUser: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconUser;\n","import React, { FC } from 'react';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../types';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport IconUser from '../icons/iconUserComponent';\n\nconst LoginButton: FC = () => {\n const dispatch = useAppDispatch();\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n\n return (\n {\n dispatch(setIndex(3));\n }}\n >\n \n {I18n.t('japan_concierge.auth_menus.show.sign_in')}\n \n );\n};\n\nexport default LoginButton;\n","import React, { FC } from 'react';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../types';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport IconUser from '../icons/iconUserComponent';\n\nconst LoginButton: FC = () => {\n const dispatch = useAppDispatch();\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n\n return (\n {\n dispatch(setIndex(3));\n }}\n >\n \n {I18n.t('japan_concierge.auth_menus.show.sign_out')}\n \n );\n};\n\nexport default LoginButton;\n","import React, { FC, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getPlanListToApi, setIndex } from '../../slices/planMenuSlice';\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\nimport { useAppDispatch } from '../../export/hook';\nimport IconList from '../icons/iconListComponent';\n\nconst MyPlanButton: FC = () => {\n const dispatch = useAppDispatch();\n const activePlanId = useSelector((state: AppState) => state.plan.id);\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n\n useEffect(() => {\n dispatch(getPlanListToApi());\n }, [activePlanId]);\n\n const handleClick = () => {\n dispatch(setIndex(2));\n };\n\n return (\n \n \n {I18n.t('japan_concierge.active_plans.top_menu.my_plans')}\n \n );\n};\n\nexport default MyPlanButton;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconBook: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconBook;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport IconBook from '../icons/iconBookComponent';\nimport I18n from '../../i18n/i18n';\n\nconst PlanEditButton: FC = () => {\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n const dispatch = useAppDispatch();\n\n return (\n {\n dispatch(setIndex(0));\n }}\n >\n \n {I18n.t('japan_concierge.active_plans.show.edit_plan')}\n \n );\n};\n\nexport default PlanEditButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport FavoriteButton from './favoriteSpotButtonComponent';\nimport HelpButton from './helpButtonComponent';\nimport LoginButton from './loginButtonComponent';\nimport LogoutButton from './logoutButtonComponent';\nimport MyPlanButton from './myPlanButtonComponent';\nimport PlanEditButton from './planEditButtonComponent';\nimport { AppState } from '../../types';\n\nconst TopMenuApp: FC = () => {\n const { helpButton, socialMediaAuth, snsAuth } = useSelector((state: AppState) => state.config);\n\n return (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n {snsAuth && (\n
\n {!socialMediaAuth.name && }\n {socialMediaAuth.name && }\n
\n )}\n {helpButton && (\n
\n \n
\n )}\n
\n );\n};\n\nexport default TopMenuApp;\n","import React, { FC } from 'react';\nimport { Website } from '../../types';\n\ntype Props = {\n website: Website;\n};\n\nconst WebsiteFC: FC = (props: Props) => {\n const { website } = props;\n\n return (\n \n
\n {website.name}\n
\n
\n
\n
{website.name}
\n
{website.areaName}
\n
\n
\n
\n );\n};\n\nexport default WebsiteFC;\n","import React, { FC } from 'react';\n\nimport { useAppDispatch } from '../../export/hook';\nimport IconChevronRight from '../icons/iconChevronRightComponent';\nimport { setIndex } from '../../slices/planMenuSlice';\nimport I18n from '../../i18n/i18n';\n\nconst backToPlanEditButton: FC = () => {\n const dispatch = useAppDispatch();\n\n const handleClick = () => {\n dispatch(setIndex(0));\n };\n\n return (\n \n {I18n.t('japan_concierge.active_plans.show.return_plan_edit')}\n \n \n );\n};\n\nexport default backToPlanEditButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, Website } from '../../types';\n\nimport WebsiteFC from './websiteComponent';\nimport BackButton from './backToPlanEditButtonComponent';\nimport I18n from '../../i18n/i18n';\n\nconst WebsiteList: FC = () => {\n const websites = useSelector((state: AppState) => state.planMenu.websites);\n\n if (websites.length === 0) {\n return
;\n }\n\n return (\n
\n

\n {I18n.t('japan_concierge.active_plans.show.nearby_tourism_websites')}\n

\n\n
\n \n
\n\n
\n {(websites || []).map((website: Website) => (\n \n ))}\n
\n
\n );\n};\n\nexport default WebsiteList;\n","import React, { FC, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport CategoryApp from '../components/category';\nimport FavoriteSpotList from '../components/favorite_spot_list';\nimport FootUtilityApp from '../components/foot_utility';\nimport PlanRouteApp from '../components/plan_route';\nimport Map from '../components/map';\nimport MapSliderApp from '../components/spot_slider';\nimport PlanDayApp from '../components/plan_day_list';\nimport PlanList from '../components/plan_list';\nimport PlanNameApp from '../components/plan_name';\nimport PlanSpotApp from '../components/plan_spot';\nimport SnsApp from '../components/sns';\nimport TopMenuApp from '../components/top_menu';\nimport WebsiteList from '../components/website_list';\n\nimport { getMapMenuListToApi } from '../slices/mapMenuCategorySlice';\nimport { getActivePlanToApi } from '../slices/planSlice';\nimport { setParentUrl, setDataRemote } from '../slices/snsSlice';\n\nimport { AppState, ConfigProps, MapConfigProps } from '../types';\nimport { useAppDispatch } from './hook';\n\ninterface Props {\n config: ConfigProps;\n mapConfig: MapConfigProps;\n}\n\nconst App: FC = (props: Props) => {\n const dispatch = useAppDispatch();\n const { config, mapConfig } = props;\n const activePlanId = useSelector((state: AppState) => state.plan.id);\n const selectedIndex = useSelector((state: AppState) => state.planMenu.selectedIndex);\n\n useEffect(() => {\n // 初回、activePlanIdが変更された場合呼び出し時に呼ばれる\n dispatch(getActivePlanToApi());\n }, [activePlanId]);\n\n useEffect(() => {\n // 初回呼び出し時に呼ばれる\n dispatch(getMapMenuListToApi());\n dispatch(setParentUrl(config.parentUrl));\n dispatch(setDataRemote(config.iframe));\n }, []);\n\n const favariteList = () => (\n
\n \n
\n );\n\n const planList = () => (\n
\n \n
\n );\n\n const sns = () => (\n
\n \n
\n );\n\n const websiteList = () => (\n
\n {/* SNS認証機能有効 & SNSログイン中 & 連携する観光サイト情報が1件以上ある場合 */}\n \n
\n );\n\n return (\n
\n
\n
\n
\n \n
\n
\n
\n\n
\n {/* [START] plan name section */}\n
\n \n
\n {/* [END] plan name section */}\n\n {/* [START] plan_days */}\n \n {/* [END] plan_days */}\n\n {/* [START] spot map */}\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n {/* [END] spot map */}\n\n {/* [START] head utility buttons */}\n
\n \n
\n {/* [END] head utility buttons */}\n\n {/* [START] plan spot */}\n \n {/* [END] plan spot */}\n\n {/* [START] foot utility buttons */}\n
\n \n
\n {/* [END] foot utility buttons */}\n
\n
\n {selectedIndex === 1 && favariteList()}\n {selectedIndex === 2 && planList()}\n {selectedIndex === 3 && sns()}\n {selectedIndex === 4 && websiteList()}\n
\n );\n};\n\nexport default App;\n","import React, { FC, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { setStayTime, changeToRecommendedValue, updateStayToApi, changeMemo } from '../../slices/modalStaySlice';\nimport { formatTime } from '../../utils/datetime';\nimport { planSpotPositionSelector, updateStay } from '../../slices/planSpotSlice';\nimport { getTransitTime, transitPositionSelector } from '../../slices/transitSlice';\nimport { activePlanDaySelector } from '../../slices/planDaySlice';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from \"../../active_plan/hook\";\n\nconst ModalContentStay: FC = () => {\n const dispatch = useAppDispatch();\n const planDay = useSelector((state: AppState) => activePlanDaySelector(state));\n const planSpot = useSelector((state: AppState) => state.modalStay.planSpot);\n const planSpots = useSelector((state: AppState) => planSpotPositionSelector(planSpot?.position || 0)(state));\n const transits = useSelector((state: AppState) => transitPositionSelector(planSpot?.position || 0)(state));\n const htmlForId = 'stay_time_input';\n const [errorMessage, setErrorMessage] = useState('');\n\n if (!planSpot || !planDay) {\n return
;\n }\n\n // DAYの起点となる出発時刻\n const planDayStartTime = new Date();\n // planDay.startTimeHour || 9 で判定するとplanDay.startTimeHourが0の場合もnull or undifined判定され9が設定される為以下のようにして\n // 0も設定できるようにしています\n if (planDay.startTimeHour !== undefined) {\n planDayStartTime.setHours(planDay.startTimeHour, planDay.startTimeMinute || 0);\n }\n\n // 表示するプランスポットのpositionより以前の全てのスポットの滞在時間の合計値\n const stayTotalBeforeSpot = planSpots.reduce((sum, p) => {\n if (p?.position !== planSpot?.position) {\n return sum + (p?.stay || 0);\n }\n return sum;\n }, 0);\n // 表示するプランスポットのpositionより以前の全ての移動時間の合計値\n const transitTotal = transits.reduce((sum, t) => {\n const time = getTransitTime(planSpots.find((p) => p?.id === t?.toPlanSpotId)?.transitTime || 0, planSpot.mode, t);\n return sum + time;\n }, 0);\n\n // 到着時刻\n const arrivalTime = new Date(\n planDayStartTime.setMinutes(planDayStartTime.getMinutes() + transitTotal + stayTotalBeforeSpot)\n );\n // 出発時刻\n const departureTime = new Date(planDayStartTime.setMinutes(planDayStartTime.getMinutes() + (planSpot.stay || 0)));\n const htmlForMemoInputId = 'plan_spot_memo';\n\n return (\n <>\n
\n

\n {I18n.t('japan_concierge.active_plans.show.modify_time_of_stay')}\n

\n
\n
\n

\n ※{I18n.t('japan_concierge.active_plans.show.annotation_modifying_your_time')}\n

\n\n
\n \n {I18n.t('japan_concierge.active_plans.show.arrival_time')}\n \n {formatTime(arrivalTime)}\n
\n\n
\n \n
\n ) => {\n if (e.target.validity.valid) {\n setErrorMessage('');\n dispatch(setStayTime(e.target.value));\n } else {\n setErrorMessage(I18n.t('japan_concierge.active_plans.show.error_message_half_width_numbers'));\n }\n }}\n />\n {I18n.t('japan_concierge.active_plans.show.minutes')}\n ) => {\n e.preventDefault();\n dispatch(changeToRecommendedValue());\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.change_recommended_value')}\n \n {errorMessage &&\n React.createElement(\n 'span',\n {},\n I18n.t('japan_concierge.active_plans.show.error_message_half_width_numbers')\n )}\n
\n
\n\n
\n \n {I18n.t('japan_concierge.active_plans.show.departure_time')}\n \n {formatTime(departureTime)}\n
\n\n
\n \n ) => {\n dispatch(changeMemo(e.target.value));\n }}\n />\n
\n\n
\n {\n dispatch(updateStay(planSpot));\n dispatch(updateStayToApi(planSpot));\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.confirm')}\n \n
\n
\n \n );\n};\n\nexport default ModalContentStay;\n","import React, { FC, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { formatTime } from '../../utils/datetime';\nimport { AppState } from '../../types';\nimport { useAppDispatch } from '../../active_plan/hook';\n\nimport { planSpotPositionSelector, planSpotSelectors, updateModeAndTransitTime } from '../../slices/planSpotSlice';\nimport {\n changeMode,\n changeTransitTime,\n changeTransitRemark,\n updateTransitTimeToApi,\n setDefaultValue,\n} from '../../slices/modalTransitSlice';\nimport { transitPositionSelector, getTransitTime } from '../../slices/transitSlice';\n\nimport IconCar from '../icons/iconCarComponent';\nimport IconTrain from '../icons/iconTrainComponent';\nimport IconWalking from '../icons/iconWalkingComponent';\nimport IconBicycle from '../icons/iconBicycleComponent';\nimport { activePlanDaySelector } from '../../slices/planDaySlice';\nimport I18n from '../../i18n/i18n';\n\nconst ModalContentTransit: FC = () => {\n const dispatch = useAppDispatch();\n const planDay = useSelector((state: AppState) => activePlanDaySelector(state));\n const { mode, transit, transitTime, transitRemark, isDisabled, isDefaultValue, isChangeRecommended } = useSelector(\n (state: AppState) => state.modalTransit\n );\n const planSpot = useSelector((state: AppState) => planSpotSelectors.selectById(state, transit?.toPlanSpotId || 0));\n const planSpots = useSelector((state: AppState) => planSpotPositionSelector(planSpot?.position || 0)(state));\n const transits = useSelector((state: AppState) => transitPositionSelector(planSpot?.position || 0)(state));\n const [errorMessage, setErrorMessage] = useState('');\n\n // ここに記載することでundifinedの場合はreturnされるので、if文以下はtransit? || planSpot?と記載しなくて良い\n if (!transit || !planSpot || !planDay) {\n return
;\n }\n\n // DAYの起点となる出発時刻\n const planDayStartTime = new Date();\n // planDay.startTimeHour || 9 で判定するとplanDay.startTimeHourが0の場合もnull or undifined判定され9が設定される為以下のようにして\n // 0も設定できるようにしています\n if (planDay.startTimeHour !== undefined) {\n planDayStartTime.setHours(planDay.startTimeHour, planDay.startTimeMinute || 0);\n }\n const htmlForId = 'transit_time_input';\n const htmlForRemarkInputId = 'transit_remark_input';\n\n // 表示するプランスポットのpositionより以前の全てのスポットの滞在時間の合計値\n const stayTotalBeforeSpot = planSpots.reduce((sum, p) => {\n if (p?.position !== planSpot?.position) {\n return sum + (p?.stay || 0);\n }\n return sum;\n }, 0);\n\n // 表示するプランスポットのpositionより以前の全ての移動時間の合計値\n const transitTotal = transits.reduce((sum, t) => {\n if (t?.toPlanSpotId !== planSpot.id) {\n const targetPlanSpot = planSpots.find((p) => p?.id === t?.toPlanSpotId);\n const time = getTransitTime(targetPlanSpot?.transitTime || 0, targetPlanSpot?.mode || 'auto', t);\n return sum + time;\n }\n return sum;\n }, 0);\n\n // 到着時刻\n const arrivalTime = new Date(\n planDayStartTime.setMinutes(planDayStartTime.getMinutes() + transitTime + transitTotal + stayTotalBeforeSpot)\n );\n\n const isActive = (modeType: string): boolean =>\n mode === modeType || (mode === 'auto' && transit.autoDisplayMode === modeType);\n\n return (\n <>\n
\n

\n {I18n.t('japan_concierge.active_plans.show.change_mean_time_transport')}\n

\n
\n
\n
\n
\n \n {I18n.t('japan_concierge.active_plans.show.means_transport')}\n \n \n {\n dispatch(changeMode('train'));\n }}\n >\n \n \n {\n dispatch(changeMode('car'));\n }}\n >\n \n \n {\n dispatch(changeMode('walk'));\n }}\n >\n \n \n {\n dispatch(changeMode('bicycle'));\n }}\n >\n \n \n \n
\n
\n\n
\n
\n \n
\n ) => {\n if (e.target.validity.valid) {\n setErrorMessage('');\n dispatch(changeTransitTime(e.target.value));\n } else {\n setErrorMessage(I18n.t('japan_concierge.active_plans.show.error_message_half_width_numbers'));\n }\n }}\n />\n {I18n.t('japan_concierge.active_plans.show.minutes')}\n
\n {(isChangeRecommended || isDefaultValue) && (\n \n {isChangeRecommended && I18n.t('japan_concierge.active_plans.show.changed_recommended_travel_time')}\n {isDefaultValue && `※${I18n.t('japan_concierge.active_plans.show.settings_reset')}`}\n \n )}\n
\n\n
\n {errorMessage}\n
\n
\n\n
\n
\n \n {I18n.t('japan_concierge.active_plans.show.arrival_time')}\n \n {formatTime(arrivalTime)}\n
\n
\n\n
\n
\n \n ) => {\n dispatch(changeTransitRemark(e.target.value));\n }}\n />\n
\n
\n
\n {\n dispatch(setDefaultValue());\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.reset_all_settings')}\n \n\n {\n const targetMode =\n planSpot.transitTime !== transitTime && mode === 'auto' ? transit.autoDisplayMode : mode;\n dispatch(\n updateModeAndTransitTime({\n mode: targetMode,\n transitTime,\n transitRemark,\n id: transit.toPlanSpotId,\n })\n );\n if (\n planSpot.mode !== mode ||\n planSpot.transitTime !== transitTime ||\n planSpot?.transitRemark !== transitRemark\n ) {\n dispatch(\n updateTransitTimeToApi({\n mode: targetMode,\n transitTime,\n transitRemark,\n transit,\n isChangeRecommended,\n isDefaultValue,\n isDisabled,\n })\n );\n }\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.confirm')}\n \n
\n
\n \n );\n};\n\nexport default ModalContentTransit;\n","import React, { FC, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport { updateStartTime, updatePlanDayToApi } from '../../slices/planDaySlice';\nimport { changeInputHour, changeInputMinute } from '../../slices/modalStartSlice';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../active_plan/hook';\n\nconst ModalContentStart: FC = () => {\n const dispatch = useAppDispatch();\n const { id, inputHour, inputMinute } = useSelector((state: AppState) => state.modalStart);\n const [errorMessage, setErrorMessage] = useState('');\n\n const htmlForHourId = 'start_hour_input';\n const htmlForMinuteId = 'start_minute_input';\n\n if (id === 0) {\n return
;\n }\n\n return (\n <>\n
\n

\n {I18n.t('japan_concierge.active_plans.show.change_departure_time')}\n

\n
\n
\n
\n
\n スタート時間\n \n ) => {\n if (e.target.validity.valid) {\n setErrorMessage('');\n dispatch(changeInputHour(e.target.value));\n } else {\n setErrorMessage(I18n.t('japan_concierge.active_plans.show.error_message_half_width_numbers'));\n }\n }}\n />\n :\n ) => {\n if (e.target.validity.valid) {\n setErrorMessage('');\n dispatch(changeInputMinute(e.target.value));\n } else {\n setErrorMessage(I18n.t('japan_concierge.active_plans.show.error_message_half_width_numbers'));\n }\n }}\n />\n \n
\n
\n {errorMessage}\n
\n
\n\n
\n {\n dispatch(\n updateStartTime({\n id,\n startTimeHour: inputHour,\n startTimeMinute: inputMinute,\n })\n );\n dispatch(updatePlanDayToApi());\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.confirm')}\n \n
\n
\n \n );\n};\n\nexport default ModalContentStart;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../types';\nimport {\n returnRegistedAsPlanSpotSelector,\n setStart,\n planSpotInMinPositionSelector,\n planSpotInMaxPositionSelector,\n setStartFromInfoWindowToApi,\n setGoalFromInfoWindowToApi,\n} from '../../slices/planSpotSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { deleteTransit } from '../../slices/transitSlice';\nimport I18n from '../../i18n/i18n';\n\nimport { deepEqual } from 'fast-equals';\n\nconst ModalContentSpotButton: FC = () => {\n const { spot } = useSelector((state: AppState) => state.modalSpot);\n const dispatch = useAppDispatch();\n const planSpot = useSelector((state: AppState) => returnRegistedAsPlanSpotSelector(spot?.id || 0)(state));\n const minPosition = useSelector((state: AppState) => planSpotInMinPositionSelector(state), deepEqual);\n const maxPosition = useSelector((state: AppState) => planSpotInMaxPositionSelector(state), deepEqual);\n\n const startButtonClick = () => {\n if (planSpot) {\n dispatch(setStart({ id: planSpot.id, position: minPosition }));\n dispatch(deleteTransit(planSpot.id));\n dispatch(setStartFromInfoWindowToApi(planSpot));\n }\n };\n\n const goalButtonClick = () => {\n if (planSpot) {\n dispatch(deleteTransit(planSpot.id));\n dispatch(setGoalFromInfoWindowToApi(planSpot));\n }\n };\n\n if (!spot) {\n return
;\n }\n\n return (\n <>\n {planSpot && (\n
\n \n \n {I18n.t('japan_concierge.spot_modals.show.move_to_top')}\n \n \n \n {I18n.t('japan_concierge.spot_modals.show.move_to_last')}\n \n
\n )}\n \n );\n};\n\nexport default ModalContentSpotButton;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, SpotLink } from '../../types';\nimport I18n from '../../i18n/i18n';\nimport OutsideLink from '../plan_spot/outsideLinkComponent';\nimport IconPlus from '../icons/iconPlusComponent';\nimport IconTrash from '../icons/iconTrashComponent';\nimport { selectedImage } from '../../slices/modalSpotSlice';\nimport {\n createPlanSpotToApi,\n deletePlanSpot,\n deletePlanSpotToApi,\n returnRegistedAsPlanSpotSelector,\n} from '../../slices/planSpotSlice';\nimport { toggle } from '../../slices/modalSlice';\nimport { useAppDispatch } from '../../active_plan/hook';\nimport { deleteTransit } from '../../slices/transitSlice';\nimport ModalContentSpotButton from './modalContentSpotButtonComponent';\n\ninterface Props {\n isEdit: boolean;\n}\n\nconst ModalContentSpot: FC = (props: Props) => {\n const { isEdit } = props;\n const { spot, isDisplayRemoveButton } = useSelector((state: AppState) => state.modalSpot);\n const selectedImageIndex = useSelector((state: AppState) => state.modalSpot.selectedImageIndex);\n const dispatch = useAppDispatch();\n const planSpot = isEdit\n ? useSelector((state: AppState) => returnRegistedAsPlanSpotSelector(spot?.id || 0)(state))\n : null;\n\n if (!spot) {\n return
;\n }\n\n const imageUrl = spot.images[selectedImageIndex] || spot.image;\n const isDisplayRemove = isDisplayRemoveButton && planSpot;\n\n // 1件もデータがない場合、table > tbodyを表示するとwarningが出力され、rspecのテストエラーが発生する可能性がある為1件も表示するデータがない場合は\n // table自体非表示になるようフラグを設定\n const isRow =\n spot.address ||\n spot.tel ||\n spot.utilizationTime ||\n spot.holiday ||\n spot.remarks ||\n spot.url ||\n (spot.links?.length || 0) > 0;\n\n // 空文字の場合 {spot.address && ..の場合 trueとみなされ、Warning: validateDOMNesting(...)が発生するためそれを抑制する\n const isDisplay = (content: string): boolean => {\n if (content) {\n return true;\n }\n return false;\n };\n\n return (\n <>\n
\n {planSpot && isEdit && }\n

{spot.name}

\n \n
\n
\n {spot.name}\n
\n
\n
\n {spot.images.map((image: string, index: number) => (\n dispatch(selectedImage(index))}\n >\n {spot.name}\n
\n ))}\n
\n
\n {/* 編集画面のみプランに追加ボタンを表示する */}\n {isEdit && !isDisplayRemove && (\n
\n {\n dispatch(toggle());\n dispatch(createPlanSpotToApi({ spotId: spot.id, position: 'auto' }));\n }}\n >\n \n {I18n.t('japan_concierge.spot_modals.show.add_to_my_plan')}\n \n
\n )}\n {/* アクティブプランに既に登録されている場合のみプランから削除ボタンを表示する */}\n {isEdit && isDisplayRemove && (\n
\n {\n dispatch(toggle());\n if (planSpot) {\n dispatch(deletePlanSpotToApi(planSpot.id));\n }\n dispatch(deleteTransit(planSpot.id));\n dispatch(deletePlanSpot({ id: planSpot.id, position: planSpot.position }));\n }}\n >\n \n {I18n.t('japan_concierge.spot_modals.show.remove_from_my_plan')}\n \n
\n )}\n
\n {/* eslint-disable react/no-danger */}\n ') }}\n />\n {isRow && (\n
\n \n \n {isDisplay(spot.address) && (\n \n \n \n \n )}\n {isDisplay(spot.tel) && (\n \n \n \n \n )}\n {isDisplay(spot.utilizationTime) && (\n \n \n \n \n )}\n {isDisplay(spot.holiday) && (\n \n \n \n \n )}\n {isDisplay(spot.remarks) && (\n \n \n \n \n )}\n {isDisplay(spot.url) && (\n \n \n \n \n )}\n {(spot.links?.length || 0) > 0 && (\n \n \n \n \n )}\n \n
\n {I18n.t('japan_concierge.spot_modals.show.address')}\n {spot.address}
{I18n.t('japan_concierge.spot_modals.show.tel')}{spot.tel}
\n {I18n.t('japan_concierge.spot_modals.show.open_hours')}\n {spot.utilizationTime}
\n {I18n.t('japan_concierge.spot_modals.show.closed')}\n {spot.holiday}
{I18n.t('japan_concierge.spot_modals.show.note')}{spot.remarks}
{I18n.t('japan_concierge.spot_modals.show.url')}\n \n {spot.url}\n \n
\n {I18n.t('japan_concierge.spot_modals.show.other_links')}\n \n {/* eslint-disable-next-line array-callback-return */}\n
\n {(spot.links || []).map((link: SpotLink) => (\n \n ))}\n
\n
\n
\n )}\n
\n
\n \n );\n};\n\nexport default ModalContentSpot;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport interactionPlugin, { type DateClickArg } from '@fullcalendar/interaction'; // ボタンを日本語表示にするために必要\nimport allLocales from '@fullcalendar/core/locales-all';\n\nimport I18n from '../../i18n/i18n';\nimport { AppState } from '../../types';\nimport { toggle } from '../../slices/modalSlice';\nimport { changedDate } from '../../slices/modalCalendarSlice';\nimport { planDaySelectors } from '../../slices/planDaySlice';\nimport { changeDate, updateStartDateToApi } from '../../slices/planSlice';\nimport { formatDate } from '../../utils/datetime';\nimport { useAppDispatch } from '../../active_plan/hook';\n\nconst ModalContentCalender: FC = () => {\n const dispatch = useAppDispatch();\n const planDays = useSelector((state: AppState) => planDaySelectors.selectAll(state));\n const startDate = useSelector((state: AppState) => state.modalCalendar.startDate);\n const isShown = useSelector((state: AppState) => state.modalCalendar.isShown);\n\n if (!isShown) {\n return
;\n }\n\n return (\n <>\n
\n {I18n.t('japan_concierge.active_plans.show.specify_departure_date')}\n
\n
\n
\n {startDate && (\n {\n dispatch(changedDate(e.date));\n }}\n events={[\n {\n title: '',\n start: formatDate(startDate, 0, '-'),\n end: formatDate(startDate, planDays.length, '-'),\n },\n ]}\n initialDate={formatDate(startDate, 0, '-')}\n selectable\n />\n )}\n {!startDate && (\n {\n dispatch(changedDate(e.date));\n }}\n selectable\n />\n )}\n
\n
\n {\n dispatch(toggle());\n dispatch(changeDate(startDate));\n dispatch(updateStartDateToApi());\n }}\n >\n {I18n.t('japan_concierge.active_plans.show.confirm')}\n \n
\n
\n \n );\n};\n\nexport default ModalContentCalender;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState, Plan } from '../../types';\n\nimport I18n from '../../i18n/i18n';\nimport { updateNameToApi, setPlan } from '../../slices/planSlice';\nimport { changeName, changeMemo } from '../../slices/modalPlanSlice';\nimport { changePlanName } from '../../slices/planMenuSlice';\nimport { useAppDispatch } from \"../../active_plan/hook\";\n\nconst ModalContentPlan: FC = () => {\n const plan = useSelector((state: AppState) => state.modalPlan.plan);\n const isError = useSelector((state: AppState) => state.modalPlan.isError);\n\n if (!plan) {\n return
;\n }\n\n const dispatch = useAppDispatch();\n const update = () => {\n // マイプラン一覧のプラン名を変更する\n dispatch(\n changePlanName({\n id: plan?.id || 0,\n name: plan?.name || '',\n })\n );\n dispatch(setPlan({ plan }));\n // 非同期にてAPIサーバに変更後のプラン名を更新する\n dispatch(updateNameToApi());\n };\n\n const htmlForIdByName = 'plan_name';\n const htmlForIdByMemo = 'plan_memo';\n\n return (\n <>\n
\n

\n {I18n.t('japan_concierge.active_plans.show.change_plan_name_memo')}\n

\n
\n
\n
\n \n {\n dispatch(changeName(e.target.value));\n }}\n />\n {isError && React.createElement('span', {}, 'This field is required')}\n
\n\n
\n \n ) => {\n dispatch(changeMemo(e.target.value));\n }}\n />\n
\n\n
\n {\n update();\n }}\n data-testid=\"updateButton\"\n disabled={isError}\n >\n {I18n.t('japan_concierge.active_plans.show.confirm')}\n \n
\n
\n \n );\n};\n\nexport default ModalContentPlan;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconCloseModal: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconCloseModal;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppState } from '../../types';\nimport { toggle } from '../../slices/modalSlice';\n\nimport ModalContentStay from './modalContentStayComponent';\nimport ModalContentTransit from './modalContentTransitComponent';\nimport ModalContentStart from './modalContentStartComponent';\nimport ModalContentSpot from './modalContentSpotComponent';\nimport ModalContentCalender from './modalContentCalendarComponent';\nimport ModalContentPlan from './modalContentPlanComponent';\nimport IconCloseModal from '../icons/iconCloseModalComponent';\n\nconst Modal: FC = () => {\n const dispatch = useDispatch();\n const isModalOpen = useSelector((state: AppState) => state.modal.isOpen);\n const clientHeight = useSelector((state: AppState) => state.modal.clientHeight);\n const targetRef = useRef(null);\n const [styleTop, setStyleTop] = useState(0);\n const iframe = useSelector((state: AppState) => state.config.iframe);\n const spot = useSelector((state: AppState) => state.modalSpot.spot);\n const iframeRect = useSelector((state: AppState) => state.modal.iframeRect);\n\n useEffect(() => {\n if (isModalOpen) {\n // スポットは非同期でデータを取得する為、300msだと高さが取得できない為500msに変更\n setTimeout(\n () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rect = targetRef?.current?.getBoundingClientRect();\n // 計算式\n // IFrameのgetBoundingClientRect().top + ブラウザの高さ / 2 - モーダルの高さ / 2 - 12\n // 親フレームで取得したIFrameのgetBoundingClientRect().topでIFrameのtopの位置が取得出来る。スクロールするとIFrameの最上位部分が\n // 見えなくなるとマイナス値となる(15pxほどずれがある)\n const displayTop = -(iframeRect?.top || 0) + (clientHeight || 2) / 2 - (rect?.height || 2) / 2 - 12;\n if (displayTop + (rect?.height || 0) > (iframeRect?.height || 0)) {\n setStyleTop(-(iframeRect?.top || 10));\n } else {\n setStyleTop(displayTop > 10 ? displayTop : 10);\n }\n },\n spot ? 500 : 300\n );\n }\n }, [isModalOpen, iframeRect?.top, spot]);\n\n if (!isModalOpen) {\n return
;\n }\n\n return (\n
\n
\n \n {\n dispatch(toggle());\n }}\n >\n \n \n \n \n \n \n \n \n
\n
\n
\n );\n};\n\nexport default Modal;\n","import React, { FC } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppState } from '../../types';\nimport { toggle } from '../../slices/backdropSlice';\n\nconst Backdrop: FC = () => {\n const dispatch = useDispatch();\n const isbackdropShown = useSelector((state: AppState) => state.backdrop.isShown);\n\n if (!isbackdropShown) {\n return
;\n }\n\n function handleClick() {\n dispatch(toggle());\n }\n\n function handleKeyDown() {\n return false;\n }\n\n return (\n {\n handleClick();\n }}\n onKeyDown={() => {\n handleKeyDown();\n }}\n />\n );\n};\n\nexport default Backdrop;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../types';\n\nconst Popup: FC = () => {\n const content = useSelector((state: AppState) => state.popup.contentText);\n const isShown = useSelector((state: AppState) => state.popup.isShown);\n const clientHeight = useSelector((state: AppState) => state.modal.clientHeight);\n const iframeRect = useSelector((state: AppState) => state.modal.iframeRect);\n const iframe = useSelector((state: AppState) => state.config.iframe);\n const targetRef = useRef(null);\n const [styleTop, setStyleTop] = useState(0);\n\n useEffect(() => {\n if (isShown) {\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rect = targetRef?.current?.getBoundingClientRect();\n // 計算式\n // IFrameのgetBoundingClientRect().top + ブラウザの高さ / 2 - モーダルの高さ / 2 - 12\n // 親フレームで取得したIFrameのgetBoundingClientRect().topでIFrameのtopの位置が取得出来る。スクロールするとIFrameの最上位部分が\n // 見えなくなるとマイナス値となる(15pxほどずれがある)\n const displayTop = -(iframeRect?.top || 0) + (clientHeight || 2) / 2 - (rect?.height || 2) / 2 - 12;\n if (displayTop + (rect?.height || 0) > (iframeRect?.height || 0)) {\n setStyleTop(-(iframeRect?.top || 10));\n } else {\n setStyleTop(displayTop > 10 ? displayTop : 10);\n }\n }, 300);\n }\n }, [isShown, iframeRect?.top]);\n\n return (\n \n
{content}
\n
\n );\n};\n\nexport default Popup;\n","// eslint-disable-next-line no-use-before-define\nimport React, { Component } from 'react';\nimport { Provider } from 'react-redux';\n\nimport App from './app';\n\nimport { ConfigProps, MapConfigProps } from '../types';\nimport store from './store';\nimport I18n from '../i18n/i18n';\nimport Modal from '../components/modal/modalComponent';\nimport Backdrop from '../components/backdrop/backdropComponent';\nimport Popup from '../components/popup/popupComponent';\nimport { setPlanId } from '../slices/planSlice';\nimport { setConfig } from '../slices/configSlice';\nimport { setIndex } from '../slices/planMenuSlice';\n\ninterface Props {\n activePlanId: number;\n config: ConfigProps;\n locale: string;\n defaultLocale: string;\n mapConfig: MapConfigProps;\n initialActiveTab: number;\n}\n\nexport default class ActivePlan extends Component {\n constructor(props: Props) {\n super(props);\n I18n.locale = props.locale;\n I18n.fallbacks = true;\n I18n.defaultLocale = props.defaultLocale;\n // Class ComponentからReact Hooksは呼び出せない為以下のように呼び出してます\n store.dispatch(setPlanId(props.activePlanId));\n store.dispatch(setConfig(props.config));\n if (props.initialActiveTab === 1 || props.initialActiveTab === 2) {\n store.dispatch(setIndex(props.initialActiveTab));\n }\n }\n\n render(): JSX.Element {\n const { config, mapConfig } = this.props;\n\n if (google.maps.ControlPosition.RIGHT_CENTER !== undefined) {\n return (\n \n \n \n \n \n \n );\n }\n\n return <>;\n }\n}\n","import React, { useRef } from 'react';\n\ntype MapPointProps = {\n position: number;\n};\n\nconst PlanDaySpotMarker = (props: MapPointProps) => {\n const { position } = props;\n const containerRef = useRef(null);\n\n return (\n // FEチームへ\n // styleは確認用に設定しているためのものですので、適宜適切な値 or classNameの指定をお願いします。\n // 対応完了後はこのコメントの削除もお願いします\n
\n
{position}
\n
\n );\n};\n\nexport default React.memo(PlanDaySpotMarker);\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { GoogleMap, OverlayView } from '@react-google-maps/api';\n\nimport { ExportAppState, ExportPlanDaySpot } from '../../types/export_type';\nimport PlanDaySpotMarker from './planDaySpotMarkerComponent';\n\ninterface MapProps extends google.maps.MapOptions {\n exportPlanDaySpots: ExportPlanDaySpot[];\n // dayは1から始まるため、呼び出し元で-1しておく\n day: number;\n zoom: number;\n center: { lat: number; lng: number };\n}\n\nconst Map: FC = (mapProps: MapProps) => {\n const { zoom, center, day, exportPlanDaySpots } = mapProps;\n const isShow = useSelector((state: ExportAppState) => state.export.isShowMap)[day];\n const [map, setMap] = useState(null);\n const [isFitBound, setIsFitBound] = useState(false);\n\n useEffect(() => {\n if (map && !isFitBound) {\n map.fitBounds(\n exportPlanDaySpots.reduce(\n (bounds: google.maps.LatLngBounds, exportPlanDaySpot: ExportPlanDaySpot) =>\n bounds.extend(new google.maps.LatLng(exportPlanDaySpot.spot.lat, exportPlanDaySpot.spot.lng)),\n new google.maps.LatLngBounds()\n )\n );\n setIsFitBound(true);\n }\n }, [map]);\n\n const onLoad = useCallback((mapInstance: google.maps.Map) => {\n setMap(mapInstance);\n }, []);\n\n return (\n \n {(exportPlanDaySpots || []).map((exportPlanDaySpot: ExportPlanDaySpot) => (\n \n \n \n ))}\n \n );\n};\n\nexport default Map;\n","import React, { FC } from 'react';\n\ninterface Props {\n position: number;\n goal: number;\n}\n\nconst Position: FC = (props: Props) => {\n const { position, goal } = props;\n\n const getPosition = (): string => {\n if (position === 0) {\n return 'START';\n }\n\n if (position === goal) {\n return 'GOAL';\n }\n\n return String(position);\n };\n\n const addtionalClass = position === goal ? \"jc-export-course-item__position--type_last\" : \"\";\n\n return
\n
\n {getPosition()}\n
\n
;\n};\n\nexport default Position;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { ExportAppState, ExportPlanDaySpot } from '../../types/export_type';\nimport { formatTime } from '../../utils/datetime';\nimport { totalStayTransitTimeSelector } from '../../slices/exportSlice';\nimport IconPencil from '../icons/iconPencilComponent';\nimport IconChevronRight from '../icons/iconChevronRightComponent';\nimport { toggle } from '../../slices/modalSlice';\nimport { getSpotToApi } from '../../slices/modalSpotSlice';\nimport I18n from '../../i18n/i18n';\nimport { useAppDispatch } from '../../export/hook';\n\ninterface Props {\n exportPlanDaySpot: ExportPlanDaySpot;\n day: number;\n goal: number;\n startTime: Date;\n}\n\nconst PlanDaySpot: FC = (props: Props) => {\n const { exportPlanDaySpot, day, goal, startTime } = props;\n const dispatch = useAppDispatch();\n const totalStayTime = useSelector((state: ExportAppState) =>\n totalStayTransitTimeSelector(day, exportPlanDaySpot.position)(state)\n );\n\n if (!exportPlanDaySpot) {\n return
;\n }\n\n // [note] フロントでのstringのトリム用関数。汎用関数として別ファイルに切り出しても良い\n const truncate = (str: string, len: number) => (str.length <= len ? str : `${str.substring(0, len)}...`);\n\n // 滞在時間(開始)を設定\n startTime.setMinutes(startTime.getMinutes() + totalStayTime);\n // 滞在時間(終了)を設定\n const stayEndTime = new Date(startTime);\n stayEndTime.setMinutes(stayEndTime.getMinutes() + exportPlanDaySpot.stay);\n\n return (\n
\n {/* スポット名 */}\n

{exportPlanDaySpot.spot.name}

\n\n {/* 滞在時間 */}\n
\n {exportPlanDaySpot.position !== goal && `${formatTime(startTime)} 〜 ${formatTime(stayEndTime)}`}\n {exportPlanDaySpot.position === goal && `${formatTime(startTime)}`}\n
\n\n {/* メモ */}\n {exportPlanDaySpot.memo && (\n
\n \n {exportPlanDaySpot.memo}\n
\n )}\n\n
\n {/* スポット画像 */}\n {/* TODO: FEチームへ 画像のサイズは100x100で設定してますので、適宜変更してください。 対応後はこのコメントの削除もお願いします */}\n \n\n
\n {/* 説明 */}\n

\n {exportPlanDaySpot.spot.description && truncate(exportPlanDaySpot.spot.description, 100)}\n

\n\n {/* more btn */}\n {\n // dispatch(setContentId('spot'));\n dispatch(toggle());\n dispatch(getSpotToApi(exportPlanDaySpot.spot.id));\n }}\n >\n {I18n.t('japan_concierge.exports.show.more')}\n \n \n
\n
\n
\n );\n};\n\nexport default PlanDaySpot;\n","import React, { FC } from 'react';\nimport { ExportPlanDaySpot } from '../../types/export_type';\n\nimport IconCar from '../icons/iconCarComponent';\nimport IconTrain from '../icons/iconTrainComponent';\nimport IconWalking from '../icons/iconWalkingComponent';\nimport IconBicycle from \"../icons/iconBicycleComponent\";\nimport I18n from '../../i18n/i18n';\n\ninterface Props {\n exportPlanDaySpot: ExportPlanDaySpot;\n}\n\nconst Transit: FC = (props: Props) => {\n const { exportPlanDaySpot } = props;\n\n if (!exportPlanDaySpot) {\n return
;\n }\n\n const formatHour = (hour: number): string => {\n if (!hour) return '';\n return `${hour}${I18n.t('japan_concierge.active_plans.show.hour_short')}`;\n };\n\n const formatMinute = (hour: number, minute: number): string => {\n if (hour > 0 && minute === 0) return '';\n if (hour === 0 && minute === 0) return `0${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n return `${hour > 0 ? ` ${minute}` : minute}${I18n.t('japan_concierge.active_plans.show.minute_short')}`;\n };\n\n const format = (time: number): string => {\n if (!time) return 'ー';\n\n const hour = Math.floor(time / 60);\n const minute = time % 60;\n\n return `${formatHour(hour)}${formatMinute(hour, minute)}`;\n };\n\n const formatTransitTime = format(exportPlanDaySpot.transitTime);\n\n return (\n
\n
\n {/* 移動手段 */}\n
\n {exportPlanDaySpot.mode === 'train' && }\n {exportPlanDaySpot.mode === 'car' && }\n {exportPlanDaySpot.mode === 'walk' && }\n {exportPlanDaySpot.mode === 'bicycle' && }\n
\n\n {/* 移動時間 */}\n \n
{formatTransitTime}
\n
\n
\n\n {/* メモ */}\n {exportPlanDaySpot.transitMemo && (\n
{exportPlanDaySpot.transitMemo}
\n )}\n
\n );\n};\n\nexport default Transit;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { ExportAppState, ExportPlanDaySpot } from '../../types/export_type';\n\ninterface Props {\n exportPlanDaySpots: ExportPlanDaySpot[];\n day: number;\n}\n\nconst SpotList: FC = ({ exportPlanDaySpots, day }) => {\n const isShow = useSelector((state: ExportAppState) => state.export.isShowMap)[day];\n\n if (!exportPlanDaySpots || exportPlanDaySpots.length === 0) {\n return
;\n }\n\n const truncate = (str: string, len: number) => (str.length <= len ? str : `${str.substring(0, len)}...`);\n\n return (\n
    \n {exportPlanDaySpots.map((exportPlanDaySpot: ExportPlanDaySpot) => (\n
    \n {/* 上記divは削除しないでください。このmap処理の戻り値としては複数のHTMLElementを返却する場合、親となる要素が1つだけ必ず必要です */}\n {/* 表示順 */}\n
    {exportPlanDaySpot.position + 1}
    \n\n {/* スポット名 */}\n {/* FEチームへ 3点リーダーの設定はデザインコーディング時に変更してください。修正後はこのコメントの削除もお願いします */}\n
    {truncate(exportPlanDaySpot.spot.name, 20)}
    \n
    \n ))}\n
\n );\n};\n\nexport default SpotList;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconMapLocation: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconMapLocation;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconChevronDown: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconChevronDown;\n","import React, { FC } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { ExportPlanDay, ExportPlanDaySpot } from '../../types/export_type';\nimport Map from './mapComponent';\nimport Position from './positionComponent';\nimport PlanDaySpot from './planDaySpotComponent';\nimport Transit from './transitComponent';\nimport SpotList from './spotListComponent';\nimport { MapConfigProps } from '../../types';\nimport { setIsShowMap } from '../../slices/exportSlice';\n\nimport IconMapLocation from '../icons/iconMapLocationComponent';\nimport IconChevronDown from '../icons/iconChevronDownComponent';\n\nimport I18n from '../../i18n/i18n';\n\ntype Props = {\n exportPlanDay: ExportPlanDay;\n mapConfig: MapConfigProps;\n};\n\nconst ExportApp: FC = (props: Props) => {\n const { exportPlanDay, mapConfig } = props;\n const dispatch = useDispatch();\n\n return (\n
\n
\n

DAY {exportPlanDay.day}

\n
\n\n {(exportPlanDay.exportPlanDaySpots || []).length === 0 && I18n.t('japan_concierge.exports.show.no_data')}\n\n {/* planSpot / Position / Transit */}\n {(exportPlanDay.exportPlanDaySpots || []).map((exportPlanDaySpot: ExportPlanDaySpot, index: number) => (\n
\n
\n
\n
\n {/* JC-API側では移動時間・手段は前のスポットとの紐付けのため先頭のスポットは使用しない */}\n {index > 0 && index < (exportPlanDay.exportPlanDaySpots?.length || 0) && (\n \n )}\n
\n
\n\n
\n \n
\n {/* スポット情報 */}\n \n
\n
\n
\n ))}\n\n {/* 地図関連 */}\n {(exportPlanDay.exportPlanDaySpots || []).length > 0 && (\n
\n {/* 地図を見るボタン */}\n {\n dispatch(setIsShowMap(exportPlanDay.day - 1));\n }}\n >\n \n {I18n.t('japan_concierge.exports.show.view_map')}\n \n \n\n {/* 地図/マーカー表示 */}\n
\n \n \n
\n
\n )}\n
\n );\n};\n\nexport default React.memo(ExportApp);\n","import React, { FC, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { getExportInfoToApi } from '../slices/exportSlice';\nimport { ExportAppState, ExportPlanDay } from '../types/export_type';\n\nimport ExportApp from '../components/export';\nimport { MapConfigProps } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport FlameIcon from '../images/export-intro-lead-icon-1.png';\nimport { useAppDispatch } from \"./hook\";\n\ninterface Props {\n mapConfig: MapConfigProps;\n}\n\nconst App: FC = (props: Props) => {\n const { mapConfig } = props;\n const dispatch = useAppDispatch();\n const plan = useSelector((state: ExportAppState) => state.export.exportPlan);\n\n useEffect(() => {\n // 初回呼び出し時に呼ばれる\n dispatch(getExportInfoToApi());\n }, []);\n\n if (!plan) {\n return
;\n }\n\n return (\n
\n
\n {/* プラン名 */}\n

{plan.name}

\n\n {/* プランメモ */}\n {plan.memo && (\n
\n \"\"\n {plan.memo}\n
\n )}\n
\n\n {/* PlanDay */}\n {(plan.exportPlanDays || []).map((exportPlanDay: ExportPlanDay) => (\n \n ))}\n
\n );\n};\n\nexport default App;\n","import React, { FC } from 'react';\n\ntype Props = {\n additionalStyles?: { [index: string]: number | string };\n additionalClassNames?: string[];\n};\n\nconst IconTimesCircle: FC = ({ additionalStyles, additionalClassNames }: Props) => (\n \n \n \n);\n\nexport default IconTimesCircle;\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppState } from '../../types';\nimport { toggle } from '../../slices/modalSlice';\n\nimport ModalContentSpot from '../modal/modalContentSpotComponent';\nimport IconTimesCircle from '../icons/iconTimesCircleComponent';\n\nconst Modal: FC = () => {\n const dispatch = useDispatch();\n const isModalOpen = useSelector((state: AppState) => state.modal.isOpen);\n const clientHeight = useSelector((state: AppState) => state.modal.clientHeight);\n const targetRef = useRef(null);\n const [styleTop, setStyleTop] = useState(0);\n const iframe = useSelector((state: AppState) => state.config.iframe);\n const spot = useSelector((state: AppState) => state.modalSpot.spot);\n const iframeRect = useSelector((state: AppState) => state.modal.iframeRect);\n\n useEffect(() => {\n if (isModalOpen) {\n // スポットは非同期でデータを取得する為、300msだと高さが取得できない為500msに変更\n setTimeout(\n () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rect = targetRef?.current?.getBoundingClientRect();\n // 計算式\n // IFrameのgetBoundingClientRect().top + ブラウザの高さ / 2 - モーダルの高さ / 2 - 12\n // 親フレームで取得したIFrameのgetBoundingClientRect().topでIFrameのtopの位置が取得出来る。スクロールするとIFrameの最上位部分が\n // 見えなくなるとマイナス値となる(15pxほどずれがある)\n const displayTop = -(iframeRect?.top || 0) + (clientHeight || 2) / 2 - (rect?.height || 2) / 2 - 12;\n if (displayTop + (rect?.height || 0) > (iframeRect?.height || 0)) {\n setStyleTop(-(iframeRect?.top || 10));\n } else {\n setStyleTop(displayTop > 10 ? displayTop : 10);\n }\n },\n spot ? 500 : 300\n );\n }\n }, [isModalOpen, iframeRect?.top, spot]);\n\n if (!isModalOpen) {\n return
;\n }\n\n return (\n
\n
\n \n {\n dispatch(toggle());\n }}\n >\n \n \n \n
\n
\n
\n );\n};\n\nexport default Modal;\n","// eslint-disable-next-line no-use-before-define\nimport React, { Component } from 'react';\nimport { Provider } from 'react-redux';\n\nimport App from './app';\n\nimport { setId } from '../slices/exportSlice';\n\nimport store from './store';\nimport I18n from '../i18n/i18n';\nimport { setConfig } from '../slices/configSlice';\nimport { ConfigProps, MapConfigProps } from '../types';\nimport Modal from '../components/export/modalComponent';\nimport Backdrop from '../components/backdrop/backdropComponent';\n\ninterface Props {\n config: ConfigProps;\n defaultLocale: string;\n id: string;\n locale: string;\n mapConfig: MapConfigProps;\n}\n\nexport default class ActivePlan extends Component {\n constructor(props: Props) {\n super(props);\n I18n.locale = props.locale;\n I18n.fallbacks = true;\n I18n.defaultLocale = props.defaultLocale;\n store.dispatch(setConfig(props.config));\n store.dispatch(setId(props.id));\n }\n\n render(): JSX.Element {\n const { mapConfig } = this.props;\n\n return (\n \n \n \n \n \n );\n }\n}\n","import { createRoot } from 'react-dom/client';\nimport React from 'react';\n\nimport ActivePlanApp from '../japan_concierge/active_plan';\nimport ExportApp from '../japan_concierge/export';\n\nconst mount = (mountNodeId) => {\n // Integrated版の場合\n window.addEventListener('DOMContentLoaded', () => {\n const mountNode = document.getElementById(mountNodeId);\n if (mountNode) {\n const propsJSON = mountNode.getAttribute('data-react-props');\n const props = JSON.parse(propsJSON);\n const root = createRoot(mountNode);\n root.render(\n <>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n {mountNodeId === 'active_plan' && }\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n {mountNodeId === 'export' && }\n \n );\n }\n });\n};\n\nmount('active_plan');\nmount('export');\n"],"names":["initialState","isOpen","mapMenuSlice","createSlice","name","reducers","reset","state","Object","assign","toggle","actions","selectedIndex","mapMenuHeaderSlice","setIndex","action","payload","selectedMonth","mapMenuMonthSlice","setMonth","seasons","selectedId","mapMenuSeasonSlice","setId","setSeasons","extraReducers","builder","addCase","getMapMenuListToApi","fulfilled","caseReducers","rootReducer","combineReducers","activeDay","activeDayReducer","backdrop","backdropSliceReducer","config","configSliceReducer","customSpot","customSpotReducer","map","mapReducer","mapMenu","mapMenuReducer","mapMenuHeader","mapMenuHeaderReducer","mapMenuMonth","mapMenuMonthReducer","mapMenuSeason","mapMenuSeasonReducer","mapMenuCategory","mapMenuItemReducer","mapSpot","mapSpotReducer","modal","modalSliceReducer","modalCalendar","modalCalendarReducer","modalSpot","modalFavoriteSpotReducer","modalStay","modalStaySliceReducer","modalStart","modalStartSliceReducer","modalTransit","modalTransitReducer","modalPlan","modalPlanReducer","plan","planSliceReducer","planDay","planDayReducer","planMenu","planMenuReducer","planSpot","planSpotReducer","popup","popupReducer","sns","snsReducer","spotSlideTile","mapSlideTileReducer","transit","transitReducer","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","export","exportReducer","store","root","this","define","global","I18n","slice","Array","prototype","padding","number","toString","substr","toFixed","precision","decimalAdjust","isObject","obj","type","isFunction","func","isSet","value","isArray","val","call","isString","isNumber","isBoolean","isNull","exp","Math","isNaN","NaN","split","lazyEvaluate","message","scope","merge","dest","key","hasOwnProperty","DATE","day_names","abbr_day_names","month_names","abbr_month_names","meridian","NUMBER_FORMAT","separator","delimiter","strip_insignificant_zeros","CURRENCY_FORMAT","unit","format","sign_first","PERCENTAGE_FORMAT","SIZE_UNITS","DEFAULT_OPTIONS","defaultLocale","locale","defaultSeparator","placeholder","fallbacks","translations","missingBehaviour","missingTranslationPrefix","initializeOptions","locales","get","result","list","push","forEach","localeParts","firstFallback","secondFallback","length","join","indexOf","nullableFallbackLocale","pluralization","count","currentLocale","lookup","options","scopes","fullScope","getFullScope","shift","undefined","defaultValue","pluralizationLookupWithoutFallback","pluralizerKey","pluralizerKeys","pluralizer","pluralizationLookup","time","date","am","pm","prepareOptions","subject","args","arguments","attr","createTranslationOptions","translationOptions","defaults","concat","translate","translation","usedScope","optionsWithoutDefault","some","translationOption","interpolate","t","pluralize","missingTranslation","regex","matches","match","replace","nullPlaceholder","missingPlaceholder","RegExp","String","s","p1","p2","toLowerCase","apply","toNumber","formattedNumber","negative","parts","abs","buffer","sign","unshift","max","toCurrency","localize","toPercentage","localizedValue","toTime","parseDate","convertedDate","fraction","i","parseInt","Date","UTC","setTime","parse","$1","$2","$3","$6","$4","$5","strftime","meridianOptions","getTime","Error","weekDay","getDay","day","getDate","year","getFullYear","month","getMonth","hour","getHours","hour12","secs","getSeconds","mins","getMinutes","offset","getTimezoneOffset","absOffsetHours","floor","absOffsetMinutes","timezoneoffset","dateString","date_string","toHumanSize","kb","size","iterations","extend","obj1","obj2","bind","l","p","factory","activeDaySlice","setDay","getActivePlanToApi","planDays","backdropSlice","isShown","addMatcher","toggleModal","updateStay","updateModeAndTransitTime","updateStartTime","setPlan","configSlice","eventMenu","eventMonth","eventSeason","helpButton","helpUrl","helpUrlAnchorLink","iframe","nearSite","rootPath","parentUrl","snsAuth","socialMediaAuth","provider","fingerprint","setConfig","isShow","isNameError","isStayError","stay","lat","lng","customSpotCreateToApi","createAsyncThunk","async","arg","thunkAPI","appApi","post","getState","japan_concierge_custom_spot_form","data","getCustomSpotNameToApi","customSpotSlice","setIsShow","setName","trim","setStay","setIsNameError","setIsStayError","setLatLng","id","exportPlan","isShowMap","getExportInfoToApi","exportSlice","setExport","exportPlanDays","fill","setIsShowMap","totalStayTransitTimeSelector","position","createSelector","_export","totalStayTime","exportPlanDay","filter","planDaySpotsNoSelf","exportPlanDaySpots","planDaySpot","transitTime","categories","mapMenuCategorySlice","setCategories","infoWindow","isInitializeMapCenter","isPlanSpot","isRunFitBounds","selectedPlanSpotId","selectedPosition","mapSlice","setMap","openInfoWindow","close","google","maps","InfoWindow","closeInfoWindow","focusSpotOnMap","panTo","setIsRunFitBounds","setIsInitializeMapCenter","mapSpotAdapter","createEntityAdapter","selectId","spot","getInitialState","isLoading","getFavoriteMapSpotToApi","params","q","favorite","getStartSpotToApi","start_spot","getSpotToApi","round","getCenter","getSeasonSpotToApi","season","mapSpotSelectors","getSelectors","mapSpotMarkerSelector","statePlanSpot","stateActiveDay","values","entities","find","image","markerImage","mapSpotSlice","setMapSpot","addMany","removeMapSpot","removeAll","setLoading","setSelectedId","pending","rejected","startDate","modalCalendarSlice","setDate","changedDate","isError","modalPlanSlice","changeName","changeMemo","memo","planSliceSetPlan","contentId","clientHeight","iframeRect","modalSlice","setContentId","setClientHeight","setIframeTop","resetIsOpen","selectedImageIndex","isDisplayRemoveButton","modalSpotSlice","selectedImage","setSpot","setIsDisplayRemoveButton","inputHour","inputMinute","modalStartSlice","startTimeHour","startTimeMinute","changeInputHour","inputVal","Number","changeInputMinute","isChangeRecommended","updateStayToApi","planId","stayMemo","patch","custom_stay_value","custom_stay_memo","modalStaySlice","setPlanSpot","setStayTime","changeToRecommendedValue","mode","isDefaultValue","isDisabled","transitRemark","updateTransitTimeToApi","toPlanSpotId","custom_transit_value","custom_transit_memo","modalTransitSlice","setTransit","changeMode","car","train","walk","bicycle","changeTransitTime","changeTransitRemark","setDefaultValue","autoDisplayMode","planDayAdapter","sortComparer","a","b","selectedDay","updatePlanDayToApi","plan_id","plan_day","start_time_hour","start_time_minute","fixed_goal","fixedGoal","createPlanDayToApi","deletePlanDayToApi","delete","planDaySlice","setPlanDay","setAll","deletePlanDay","removeOne","ids","index","updateOne","changes","planDaySelectors","activePlanDaySelector","favoriteSpots","isWebsiteShown","plans","websites","getPlanListToApi","getFavoriteSpotListToApi","deleteFavoriteSpotToApi","getWebsiteListToApi","planMenuSlice","deletePlan","deleteFavoriteSpot","favoriteSpot","changePlanName","setPlans","setFavoriteSpots","setWebsites","nowTime","setHours","priorityCar","priorityMode","startTime","updateNameToApi","updatePlanToApi","priority_mode","deletePlanToApi","response","createPlanToApi","updateActivePlanToApi","updateStartDateToApi","start_date","formatDate","planSlice","changePriorityCar","changePriorityMode","changeDate","setPlanId","planSpotAdapter","getPosition","goal","start","deletePlanSpotToApi","setStartFromInfoWindowToApi","setGoalFromInfoWindowToApi","sortToApi","put","planSpots","optimizeToApi","plan_day_id","createPlanSpotToApi","spotId","plan_spot","spot_id","initializeModeAndCustomTransitToApi","planSpotSlice","resetPosition","deletePlanSpot","planSpotId","setStart","targetPlanSpot","_id","setPlanSpots","deletePlanSpotWithDay","planDayId","planSpotSelectors","planSpotPositionSelector","activeDayState","includes","staySelector","planSpotInDaySelector","planSpotMarkerSelector","marker","planSpotInMaxPositionSelector","positions","reduce","planSpotInMinPositionSelector","min","returnRegistedAsPlanSpotSelector","contentText","popupSlice","showPopup","hidePopup","setPopupContentText","isDataRemote","snsSlice","setParentUrl","setDataRemote","modalToggle","selectedSpotId","spotSlideTileSlice","setSpotId","transitAdapter","getTransitTime","getTransitToApi","fromPlanSpot","toPlanSpot","from_plan_spot_id","to_plan_spot_id","fromPlanSpotId","transitSlice","setOne","deleteTransit","transitSelectors","transitPositionSelector","stateTransit","transitTimeSelector","api","axios","headers","paramsSerializer","qs","arrayFormat","interceptors","request","use","Rails","csrfToken","token","localStorage","getItem","formatTime","padStart","num","useAppDispatch","useDispatch","CategoryButton","props","ref","category","dispatch","useSelector","React","className","onClick","forwardRef","FavoriteButton","_","IconAngleLeft","additionalStyles","additionalClassNames","style","focusable","xmlns","viewBox","d","IconAngleRight","App","itemRefs","useRef","containerRef","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","hoveringNext","setHoveringNext","hoveringPrev","setHoveringPrev","windowWidth","setWindowWidth","window","innerWidth","isTouchDevice","navigator","maxTouchPoints","updateButtonVisibility","container","current","scrollLeft","clientWidth","scrollWidth","useEffect","updateWindowWidth","addEventListener","removeEventListener","el","handlePrevClick","containerLeft","item","itemRight","offsetLeft","onMouseEnter","onMouseLeave","onTouchEnd","handleNextClick","containerRight","itemLeft","IconChevronRight","backToFavoriteListButton","handleClick","mapProps","zoom","center","placesService","setPlacesService","onLoad","useCallback","mapInstance","setCenter","places","PlacesService","GoogleMap","mapContainerClassName","mapTypeControl","streetViewControl","fullscreenControl","gestureHandling","clickableIcons","e","latLng","getDetails","placeId","place","status","geometry","location","Marker","Form","onChange","target","disabled","CustomSpotApp","mapConfig","startLat","startLng","Map","initialZoomLevel","iconPlus","IconCircleDelete","isAddToMyPlan","setisAddToMyPlan","alt","src","role","description","IntlProvider","FormattedMessage","defaultMessage","link","IconPlus","closeClick","event","CustomEvent","document","dispatchEvent","OriginalSpotAddButton","BackButton","CustomSpot","FavoriteSpotFC","IconShare","planSpotIds","method","CreatePlanButton","hovering","setHovering","handleMouseEnter","handleMouseLeave","planSpotReset","transitReset","FootUtilityApp","ExportButton","TotalTime","stays","transits","stayTotal","sum","transitTimeTotal","formatHour","formatMinute","minute","IconCar","IconTrain","IconBicycle","PriorityTransit","setTimeout","IconSort","transform","TourRouteApp","OptimizeRouteButton","IconTrash","PlanSpotMarker","planSpotMarker","maxPosition","deepEqual","minPosition","getElementById","scrollIntoView","behavior","block","inline","dangerouslySetInnerHTML","__html","stopPropagation","PlanSpotMarkers","planSpotMarkers","OverlayView","random","mapPaneName","OVERLAY_MOUSE_TARGET","MapSpotMarker","mapSpotMarker","colorIndex","MapSpotMarkers","mapSpotMarkers","displayPlanSpotMarkers","setZoom","LatLng","every","v","fitBounds","bounds","LatLngBounds","onUnmount","polylinePath","sort","mapContainerStyle","flexGrow","height","zoomControlOptions","ControlPosition","RIGHT_CENTER","backgroundColor","Polyline","path","strokeColor","strokeOpacity","strokeWeight","IconDoubleDown","ScrollButton","IconLink","mapMenuSelectedIndex","slideImage","links","href","url","rel","SpotSlider","mapSpots","selectAll","onScroll","SpotSlideTileCard","SpotSlideTile","selectedSeasonIndex","planStartDate","planDayIds","activePlanDay","PlanDayAddButton","selectIds","iconCalendar","PlanDayChangeButton","IconCalender","PlanDayApp","PlanDay","activePlanId","PlanList","PlanFC","IconPencil","IconExternalLink","NearSiteButton","PlanName","onClickByPlanEdit","IconClock","IconTimes","IconSort2","OutsideLink","selectById","planStartTime","stayTotalBeforeSpot","transitTotal","arrivalTime","setMinutes","departureTime","isArrivalTimeWarning","isDepartureTimeWarning","TransitIconComponent","formatTransitTime","IconWalking","cx","cy","r","IconMapRoot","setIsLoading","isMode","TransitInfo","carDirectionUrl","trainDirectionUrl","walkDirectionUrl","bicycleDirectionUrl","PlanSpotApp","dayPlanSpotIds","Transit","StartTime","Spot","parent","postMessage","IconGoogle","IconHeart","IconList","IconTwitter","IconHandSwipe","showScrollHint","setShowScrollHint","tableRef","isAnimating","setIsAnimating","hintStyle","opacity","checkScrollable","tableWidth","offsetWidth","parentWidth","parentElement","handleScroll","timer","clearTimeout","SingOutButton","handleHintClick","IconQuestionCircle","HelpButton","IconUser","LoginButton","MyPlanButton","IconBook","PlanEditButton","TopMenuApp","LogoutButton","website","areaName","backToPlanEditButton","WebsiteList","WebsiteFC","PlanNameApp","CategoryApp","MapSliderApp","PlanRouteApp","FavoriteSpotList","SnsApp","ModalContentStay","htmlForId","errorMessage","setErrorMessage","planDayStartTime","htmlForMemoInputId","htmlFor","pattern","validity","valid","preventDefault","ModalContentTransit","htmlForRemarkInputId","isActive","modeType","targetMode","ModalContentStart","htmlForHourId","htmlForMinuteId","ModalContentSpotButton","startButtonClick","goalButtonClick","isEdit","imageUrl","images","isDisplayRemove","isRow","address","tel","utilizationTime","holiday","remarks","isDisplay","content","tabIndex","ModalContentCalender","FullCalendar","plugins","dayGridPlugin","interactionPlugin","initialView","allLocales","dateClick","events","title","end","initialDate","selectable","ModalContentPlan","htmlForIdByName","IconCloseModal","Modal","isModalOpen","targetRef","styleTop","setStyleTop","rect","getBoundingClientRect","displayTop","top","maxHeight","ModalContentSpot","Backdrop","isbackdropShown","onKeyDown","Popup","ActivePlan","Component","constructor","super","initialActiveTab","render","Provider","PlanDaySpotMarker","fontSize","textAlign","isFitBound","setIsFitBound","exportPlanDaySpot","addtionalClass","stayEndTime","width","str","len","substring","truncate","directionUrl","transitMemo","SpotList","IconMapLocation","IconChevronDown","ExportApp","Position","PlanDaySpot","FlameIcon","IconTimesCircle","mount","mountNodeId","mountNode","propsJSON","getAttribute","JSON","createRoot","ActivePlanApp"],"sourceRoot":""}