{"version":3,"sources":["assets/images/icons/settings/devices.png","assets/images/icons/scenario/scenario.png","assets/images/icons/media/air-conditioner.png","assets/images/icons/media/other.png","assets/images/icons/scenario/up-arrow.png","assets/images/icons/scenario/down-arrow.png","assets/images/icons/media/left.png","assets/images/icons/settings/sound.png","assets/images/icons/media/tv.png","assets/images/icons/media/music-player.png","assets/images/icons/media/satellite.png","assets/images/icons/media/projection.png","assets/images/icons/scenario/cancel.png","assets/images/icons/scenario/save.png","assets/images/icons/controls/air-conditioner/plus.png","assets/images/icons/controls/air-conditioner/minus.png","assets/images/icons/controls/up-button.png","assets/images/icons/controls/equal-button.png","assets/images/icons/controls/down-button.png","assets/images/icons/controls/minus.png","assets/images/icons/controls/plus.png","assets/images/icons/settings/soundoff.png","assets/images/icons/settings/controls.png","assets/images/icons/alarm/cancel.png","assets/images/icons/alarm/ok.png","assets/images/icons/intercom/door_open1_icon.png","assets/images/icons/intercom/door_open2_icon.png","assets/images/icons/intercom/door_open3_icon.png","assets/images/icons/intercom/door_open4_icon.png","assets/images/icons/media/save.png","assets/images/icons/intercom.png","assets/images/icons/controls/fan-0.png","assets/images/icons/controls/fan-1.png","assets/images/icons/controls/fan-2.png","assets/images/icons/controls/fan-3.png","assets/images/icons/controls/fan-4.png","assets/images/icons/controls/air-flap-0.png","assets/images/icons/controls/air-flap-1.png","assets/images/icons/controls/air-flap-2.png","assets/images/icons/controls/air-flap-3.png","assets/images/icons/controls/air-flap-4.png","assets/images/icons/scenario/scenario-edit.png","assets/images/icons/scenario/clear-2.png","assets/images/icons/media/cancel.png","assets/images/icons/media/f1.png","assets/images/icons/scenario/trigger-create.png","assets/images/icons/pop-up/cancel.png","assets/images/icons/alarm/alarm-outside.png","assets/images/icons/call-screen/icon-call-green.png","assets/images/icons/pop-up/ok.png","assets/images/icons/media/plus.png","assets/images/icons/media/minus.png","assets/images/no-image.png","assets/images/icons/alarm/alarm-home.png","assets/images/icons/alarm/abort.png","assets/images/icons/alarm/home.png","assets/images/icons/alarm/outside.png","assets/images/icons/alarm/time.png","assets/images/icons/settings/left.png","assets/images/icons/settings/user.png","assets/images/icons/settings/search.png","assets/images/icons/settings/cross.png","assets/images/icons/icon-show.png","assets/images/icons/icon-hide.png","assets/images/icons/settings/down.png","assets/images/icons/settings/up.png","assets/images/icons/settings/signal0.png","assets/images/icons/settings/signal1.png","assets/images/icons/settings/signal2.png","assets/images/icons/settings/signal3.png","assets/images/icons/settings/microphoneon.png","assets/images/icons/settings/microphoneoff.png","assets/images/icons/temperature.png","assets/images/icons/contactor.png","assets/images/icons/camera.png","assets/images/icons/airConditioner.png","assets/images/icons/controls/plug-close-2.png","assets/images/icons/lamp.png","assets/images/icons/curtain.png","assets/images/icons/sensor.png","assets/images/icons/alarm.png","assets/images/icons/concierge.png","assets/images/icons/media.png","assets/images/icons/scenario.png","assets/images/icons/settings.png","assets/images/icons/disabled.png","assets/images/icons/scenario/scenario-playing.png","assets/images/icons/controls/air-conditioner-open.png","assets/images/icons/controls/air-conditioner-close.png","assets/images/icons/controls/air-conditioner/off.png","assets/images/icons/controls/air-conditioner/on.png","assets/images/icons/controls/on-off.png","assets/images/icons/controls/volume.png","assets/images/icons/controls/mute.png","assets/images/icons/controls/play.png","assets/images/icons/controls/program.png","assets/images/icons/settings/alarm.png","assets/images/icons/settings/cam.png","assets/images/icons/settings/database.png","assets/images/icons/settings/gateways.png","assets/images/icons/settings/intercom.png","assets/images/icons/settings/language.png","assets/images/icons/settings/main-page.png","assets/images/icons/settings/customization.png","assets/images/icons/settings/project-info.png","assets/images/icons/settings/remotes.png","assets/images/icons/settings/sensors.png","assets/images/icons/settings/setup.png","assets/images/icons/settings/sip.png","assets/images/icons/settings/concierge.png","assets/images/icons/settings/system-info.png","assets/images/icons/settings/time-mini.png","assets/images/icons/settings/users.png","assets/images/icons/settings/wifi.png","assets/images/icons/settings/doors.png","assets/images/icons/settings/inputs.png","assets/images/icons/settings/location.png","assets/images/icons/settings/servers.png","assets/images/icons/settings/virtual-controls.png","assets/images/icons/scenario/scenario-create.png","assets/images/icons/scenario/trigger.png","assets/images/icons/sensor/warning.png","assets/images/icons/media/create-media.png","assets/images/icons/call-screen/call_start.png","assets/images/icons/header/0.png","assets/images/icons/header/1.png","assets/images/icons/header/2.png","assets/images/icons/header/3.png","assets/images/icons/header/4.png","assets/images/icons/header/5.png","assets/images/icons/header/6.png","assets/images/icons/header/7.png","assets/images/icons/header/8.png","assets/images/icons/header/9.png","assets/images/icons/header/10.png","assets/images/icons/footer/arrow-left-blue.png","assets/images/icons/footer/info-btn-icon-color.png","assets/images/icons/footer/play.png","assets/images/icons/footer/scenario.png","assets/images/icons/footer/sitemap-open.png","assets/images/icons/footer/wifi-close.png","assets/images/icons/footer/cloud-close.png","assets/images/icons/footer/knx-close.png","assets/images/icons/call-screen/call-end-red.png","assets/images/icons/pop-up/media.png","assets/images/icons/scenario/clear.png","assets/images/icons/scenario/play.png","assets/images/icons/scenario/pause.png","assets/images/icons/media/remove.png","assets/images/icons/media/done.png","assets/images/icons/media/edit.png","assets/images/icons/media/off.png","assets/images/icons/media/on.png","assets/images/icons/media/on-off.png","assets/images/icons/controls/air-conditioner-auto.png","assets/images/icons/controls/air-conditioner-fan.png","assets/images/icons/controls/air-conditioner-dry.png","assets/images/icons/controls/air-conditioner-cold.png","assets/images/icons/controls/air-conditioner-hot.png","assets/images/icons/media/program.png","assets/images/icons/media/volume.png","assets/images/icons/media/mute.png","assets/images/icons/media/list.png","assets/images/icons/media/menu.png","assets/images/icons/media/play.png","assets/images/icons/media/pause.png","assets/images/icons/media/next.png","assets/images/icons/media/rewind.png","assets/images/icons/media/f2.png","assets/images/icons/media/settings.png","assets/images/icons/media/back.png","assets/images/icons/media/up.png","assets/images/icons/media/ok.png","assets/images/icons/media/down.png","assets/images/icons/media/input.png","assets/images/icons/media/right.png","assets/images/icons/media/exit.png","assets/images/icons/scenario/time.png","assets/images/icons/scenario/sunrise.png","assets/images/icons/scenario/sunset.png","i18n/locales sync /^/.//.*/.json$","serviceWorker.ts","base/fsa/createAction.ts","base/fsa/createActionCreator.ts","store/ui/actions.ts","utils/ws.ts","base/RPCService/index.ts","configs.ts","service/rpc-service.ts","store/control/actions.ts","store/debug/actions.ts","utils/session-storage.ts","store/setup/actions.ts","store/temperature/action.ts","store/user/action.ts","service/client-task.ts","hooks/rpc.ts","hooks/window-size.ts","hooks/orientation.ts","components/Container/index.tsx","utils/onclick.ts","hooks/interval.ts","components/Image/index.tsx","utils/window.ts","hooks/set.ts","hooks/set-selector.ts","components/CameraRenderer/index.tsx","types/control.ts","screens/CameraScreen/index.tsx","components/Numpad/index.tsx","hooks/message.ts","hooks/localization.ts","screens/AlarmScreen/index.tsx","hooks/numpad.tsx","screens/IntercomScreen/index.tsx","hooks/keyboard.tsx","hooks/filter.ts","screens/MediaCreateScreen/index.tsx","utils/role.ts","components/PasswordContainer/index.tsx","store/settings/actions.ts","utils/initialize.ts","screens/LoginScreen/index.tsx","utils/promise.ts","components/Settings/SettingInputComponent/index.tsx","hooks/legacy-ref.ts","hooks/search-term.ts","components/Settings/SettingsPageContainer/index.tsx","hooks/is-mounted.ts","hooks/question.ts","components/Select/index.tsx","components/Settings/SettingSelectComponent/index.tsx","components/Settings/SettingReadOnlyRowComponent/index.tsx","screens/Settings/User/UserEditScreen/index.tsx","screens/QRScreen/index.tsx","components/Settings/SettingsList/index.tsx","screens/Settings/User/UserListScreen/index.tsx","screens/Settings/User/UserEditPushTokenScreen/index.tsx","screens/Settings/User/index.ts","screens/Settings/Uart/index.ts","screens/Settings/Uart/UartScreen/index.tsx","hooks/filter-selector.ts","hooks/background-class.ts","screens/Settings/Customization/BackgroundSettingsScreen/index.tsx","screens/Settings/Customization/index.ts","components/Column/component.tsx","components/Column/index.tsx","screens/Settings/Sensor/SensorSettingsScreen/index.tsx","screens/Settings/Sensor/index.ts","screens/Settings/Device/DeviceListScreen/index.tsx","hooks/map.ts","hooks/map-selector.ts","utils/validation.ts","hooks/relations.ts","components/Settings/SettingsDeleteButton/index.tsx","screens/Settings/Device/DeviceEditScreen/index.tsx","screens/Settings/Device/DeviceSettingsScreen/index.tsx","screens/Settings/Device/index.ts","screens/Settings/Gateway/GatewayListScreen/index.tsx","components/Settings/SettingCheckboxComponent/index.tsx","screens/Settings/Gateway/GatewayEditScreen/index.tsx","screens/Settings/Gateway/SIP/SIPDetailScreen/index.tsx","screens/Settings/Gateway/SIP/index.ts","screens/Settings/Gateway/Setup/SetupIOTestComponent/index.tsx","hooks/sort-by-selector.ts","hooks/sort.ts","screens/Settings/Gateway/Setup/SetupMatchScreen/index.tsx","screens/Settings/Gateway/Setup/index.ts","screens/Settings/Gateway/index.ts","screens/Settings/Camera/CameraListScreen/index.tsx","screens/Settings/Camera/CameraEditScreen/index.tsx","screens/Settings/Camera/index.ts","hooks/control-selector.ts","hooks/glass-control.ts","screens/Settings/Control/ControlEditScreen/index.tsx","screens/Settings/Control/ControlListScreen/index.tsx","screens/Settings/Control/index.ts","screens/Settings/Intercom/IntercomListScreen/index.tsx","screens/Settings/Intercom/IntercomEditScreen/index.tsx","screens/Settings/Intercom/index.ts","screens/Settings/Door/DoorListScreen/index.tsx","screens/Settings/Door/DoorEditScreen/index.tsx","screens/Settings/Door/index.ts","screens/Settings/ProjectInformation/RoomListScreen/index.tsx","screens/Settings/ProjectInformation/AreaListScreen/index.tsx","screens/Settings/ProjectInformation/RoomEditScreen/index.tsx","screens/Settings/ProjectInformation/AreaEditScreen/index.tsx","screens/Settings/ProjectInformation/index.ts","screens/Settings/Media/MediaInputListScreen/index.tsx","screens/Settings/Media/MediaInputEditScreen/index.tsx","screens/Settings/Media/index.ts","screens/Settings/Alarm/AlarmEditScreen/index.tsx","screens/Settings/Alarm/index.ts","screens/Settings/Homepage/HomepageListScreen/index.tsx","screens/Settings/Homepage/HomepageEditScreen/index.tsx","screens/Settings/Homepage/index.ts","screens/Settings/Gateway/WiFi/WifiListScreen/index.tsx","screens/Settings/Gateway/WiFi/index.ts","screens/Settings/Gateway/WiFi/WiFiConnectScreen/index.tsx","hooks/debounce.ts","components/Widget/index.tsx","components/Range/RangeRawComponent/index.tsx","components/Range/RangeComponent/index.tsx","screens/Settings/Sound/SoundEditScreen/index.tsx","screens/Settings/Sound/index.ts","screens/Settings/Language/index.ts","screens/Settings/Language/LanguageListScreen/index.tsx","screens/Settings/Time/LocationEditScreen/index.tsx","screens/Settings/Time/index.ts","utils/download.ts","screens/Settings/Database/index.ts","screens/Settings/Database/DatabaseScreen/index.tsx","screens/Settings/SystemInfo/index.ts","screens/Settings/SystemInfo/SystemInfoScreen/index.tsx","screens/Settings/VirtualControl/VirtualControlListScreen/index.tsx","screens/Settings/VirtualControl/VirtualControlEditScreen/index.tsx","screens/Settings/VirtualControl/index.ts","screens/Settings/DoorBrand/DoorBrandListScreen/index.tsx","screens/Settings/DoorBrand/DoorBrandEditScreen/index.tsx","screens/Settings/DoorBrand/index.ts","screens/Settings/Input/InputListScreen/index.tsx","screens/Settings/Input/InputEditScreen/index.tsx","screens/Settings/Input/index.ts","hooks/current-gateway.ts","screens/SettingsScreen/BaseSettingsScreen/index.tsx","screens/SettingsScreen/DeveloperSettingsScreen/index.tsx","screens/Settings/ControlType/ControlTypeListScreen/index.tsx","screens/Settings/ControlType/ControlTypeEditScreen/index.tsx","screens/Settings/ControlType/index.ts","screens/Settings/BridgeDeviceType/BridgeDeviceTypeListScreen/index.tsx","screens/Settings/BridgeDeviceType/index.ts","screens/Settings/CameraBrand/CameraBrandListScreen/index.tsx","screens/Settings/CameraBrand/CameraBrandEditScreen/index.tsx","screens/Settings/CameraBrand/index.ts","screens/Settings/InputType/InputTypeListScreen/index.tsx","screens/Settings/InputType/index.ts","screens/Settings/TestScreen/index.tsx","screens/Settings/Server/index.ts","screens/Settings/Server/ServerSettingsScreen/index.tsx","screens/Settings/SetDateTime/index.ts","screens/Settings/SetDateTime/SetDateTimeScreen/index.tsx","screens/Settings/LeftMenu/LeftMenuEditScreen/index.tsx","screens/Settings/LeftMenu/LeftMenuListScreen/index.tsx","screens/Settings/LeftMenu/ContentListScreen/index.tsx","screens/Settings/LeftMenu/ContentEditScreen/index.tsx","screens/Settings/LeftMenu/index.ts","screens/Settings/Gateway/GatewayControl/index.ts","screens/Settings/Gateway/GatewayControl/GatewayControlScreen/index.tsx","screens/Settings/STPEditor/STPEditorListScreen/index.tsx","screens/Settings/STPEditor/STPEditorContentListScreen/index.tsx","screens/Settings/STPEditor/STPEditorContentEditScreen/index.tsx","screens/Settings/STPEditor/index.ts","screens/Settings/SettingsLogin/SettingsLoginScreen/index.tsx","screens/Settings/SettingsLogin/index.ts","screens/Settings/Concierge/ConciergeListScreen/index.tsx","screens/Settings/Concierge/ConciergeEditScreen/index.tsx","screens/Settings/Concierge/index.ts","screens/Settings/index.ts","components/Row/index.tsx","components/Button/index.tsx","components/SimpleControl/index.tsx","components/ThreePhaseControl/index.tsx","hooks/timer.ts","components/ThreePhaseControl/component.tsx","components/Controls/DimmerControl/index.tsx","components/Controls/TemperatureControl/component.tsx","components/Controls/TemperatureControl/index.tsx","components/ItemList/control.tsx","components/ItemList/scenario.tsx","components/ItemList/sensor.tsx","components/Controls/AirConditionerControl/component.tsx","components/Controls/AirConditionerControl/index.tsx","screens/MainScreen/index.tsx","screens/SettingsScreen/UserSettingsScreen/index.tsx","components/ScenarioPage/index.tsx","screens/ScenarioScreen/index.tsx","screens/SensorScreen/index.tsx","components/ItemList/index.tsx","components/MediaRenderer/index.tsx","components/ControlRenderer/index.tsx","screens/PageScreen/index.tsx","screens/MediaListScreen/index.tsx","screens/ConciergeScreen/index.tsx","components/NumpadExtended/index.tsx","hooks/numpad-extended.tsx","screens/MeetingScreen/index.tsx","hooks/update-effect.ts","utils/format.ts","components/DateTime/index.tsx","components/Header/index.tsx","components/Sidebar/index.tsx","components/MenuItem/index.tsx","components/Footer/component.tsx","components/Footer/index.tsx","components/Timer/index.tsx","screens/CallScreen/index.tsx","hooks/outside-detector.ts","screens/PopupScreen/index.tsx","components/Viewport/index.tsx","screens/ScenarioCreateScreen/index.tsx","hooks/previous.ts","hooks/force-update.ts","screens/ScenarioPopupScreen/index.tsx","screens/MediaScreen/index.tsx","screens/ScenarioTriggerCreateScreen/index.tsx","screens/ScenarioTriggerPopupScreen/index.tsx","screens/ScenarioTriggerControlUpdateScreen/index.tsx","components/NotFound404/index.tsx","components/BusyIndicator/index.tsx","screens/StpUIMediaScreen/index.tsx","components/App/component.tsx","components/App/index.tsx","rpc-application.tsx","routes.ts","store/control/state.ts","base/fsa/getType.ts","base/fsa/createHandlerMap.ts","base/fsa/createReducer.ts","store/control/reducer.ts","store/debug/state.ts","store/debug/reducer.ts","store/ui/state.ts","store/ui/reducer.ts","store/settings/state.ts","store/settings/reducers.ts","store/setup/state.ts","store/setup/reducer.ts","store/temperature/state.ts","store/temperature/reducer.ts","store/user/reducer.ts","base/fsa/combineReducer.ts","store/reducer.ts","store/index.ts","i18n/config.js","index.tsx"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","Boolean","window","location","hostname","match","createAction","type","payload","meta","undefined","error","number","createActionCreator","executor","str","toString","Array","length","fill","split","join","createType","Math","floor","random","callable","assign","setApplicationLoaded","changeBusyAction","busy","toggleScenarioScreenAction","scenario","toggleScenarioTriggerScreenAction","trigger","toggleScenarioTriggerInputScreenAction","input","toggleScenarioPopupScreenAction","toggleScenarioTriggerPopupScreenAction","toggleScenarioSTPUIInputScreenAction","uiEntity","setMediaScreenAction","media","editMode","setSTPUIMediaScreenAction","stpUIMedia","setAuthenticationAction","role","setPopupScreenAction","visible","message","icon","callback","closable","positive_button","text","timed","showCancel","showMessageAction","closePopupScreenAction","setMediaFileListAction","mediaFileList","alarmSettingUpAction","isAlarmSettingUp","setSelectedBackgroundAction","selectedBackground","WS","url","ws","retryCount","dispatch","onConnectionChanged","onmessage","onopen","connect","WebSocket","onclose","setTimeout","onerror","close","ev","this","data","send","RPCService","client","websocket","sequence","waitingList","Map","replaceAt","index","replacement","substr","handleMessage","JSON","parse","method","params","is_request","Promise","reject","set","websocketSend","answerRequest","applyResponse","toCamelCase","response","apply","toLocaleString","get","delete","stringify","firstCharacter","toLowerCase","PROD","WS_URL","host","IMAGE_PREFIX","IS_DEBUG","LOG_STATE","Configs","process","REACT_APP_IS_LOCAL","updateSoundLevel","level","ask","updateSoundState","soundState","updateFCMPushToken","request","updateControlValue","value","catch","console","log","then","updateScenarioTriggerControl","scenarioId","scenario_id","updateTemperature","whole","fraction","changeHeatingMode","link","os","token","address","username","password","r","sort","a","b","name","image_set","controls","control","temperature_settings","d","filter","c","registered_by_system","gatewayId","localeCompare","gateway_id","order","is_auto","unique_device_id","is_stop","device_id","slot","extra","is_active","is_control","status","scenarioModel","userModel","stpUIEntity","gatewayModel","configModel","bridgeDevice","area","controlModel","controlTypeModel","replace","virtualControl","camera","cameraBrand","scenarioTriggerModel","mediaDevice","relational_id","userId","stpUIId","scenarioTriggerId","time","offset","temperature","command","acceptUartLogs","BaseRPCService","controlSendErrorAction","controlId","hasError","inputSendErrorAction","inputId","mediaStatusUpdatedAction","setIntercomStatusAction","is_incoming_call","setIntercomInfoAction","info","setBellStatusAction","entityDeletedAction","setEntityListAction","entities","entityCreatedAction","entity","entityUpdatedAction","setDefaultAlarmStateAction","alarmStateModel","setSoundStateAction","addUARTMessageAction","clearUARTMessagesAction","removeSession","sessionStorage","removeItem","addRawDeviceAction","rawDevice","removeRawDeviceAction","clearRawDevicesAction","setTemperatureAction","setUserAction","clearUserAction","ClientTask","isIncomingCall","background","deviceRevealMessage","temperatureMessage","RPCContext","createContext","useRPC","useContext","useWindowSize","useState","size","setSize","useLayoutEffect","updateSize","innerWidth","innerHeight","addEventListener","removeEventListener","useOrientation","defaultValue","Container","memo","children","className","orientation","isTouchable","document","documentElement","moved","touchedObject","onClickHandler","handler","onTouchStart","target","onTouchMove","onTouchEnd","preventDefault","onClick","useInterval","timeout","callbackRef","useRef","idRef","useEffect","current","setInterval","clearInterval","useCallback","Image","props","source","src","disableErrorHandling","disablePrefix","rawInterval","interval","alt","restOfProps","setHasError","setSrc","randomValue","setRandomValue","onError","noImage","idSelector","useSet","content","selector","deps","predicate","useMemo","reduce","p","useSetSelector","setSelector","useSelector","VideoCGIRenderer","subUrl","urls","brand","video_cgi","stream","q_720p","q_360p","quality","ip","port","MJPEGRenderer","mjpeg","delay_ms","RTSPRenderer","SnapshotRenderer","CameraRenderer","cameraSet","state","cameraList","cameraBrandSet","cameraBrandList","selectedCamera","selectedCameraBrand","camera_brand_id","mode","rtsp","GatewayCommand","WindowUtil","stop","clearTimeout","CameraScreen","setSelectedCamera","cameraMode","setCameraMode","onCameraPress","onCameraModeChange","localStorage","setItem","cameraModeList","key","getItem","stopPropagation","Numpad","hash","onKeyPress","useMessage","useDispatch","failure","success","AirMode","CONTROL_TYPE_ID_LIGHT","CONTROL_TYPE_ID_CURTAIN","CONTROL_TYPE_ID_PLUG","CONTROL_TYPE_ID_THERMOSTAT","CONTROL_TYPE_ID_VALVE","CONTROL_TYPE_ID_CONTACTOR","CONTROL_TYPE_ID_AIR_CONDITIONER","BRIDGE_DEVICE_TYPE_ID_STPM","useLocalization","ns","t","useTranslation","currentLanguage","setCurrentLanguage","changeLanguage","lng","i18n","AlarmScreen","defaultAlarmState","alarmState","default","sensorTypeSet","sensorTypeList","alarmSettingUp","ui","rpc","config","isHome","setIsHome","isFlicking","setIsFlicking","isSet","setIsSet","isAborted","setIsAborted","isSetComplete","setIsSetComplete","currentTimer","setCurrentTimer","disabled","setPassword","passwordHash","keyPad","substring","useNumpad","renderNumpad","homeTimer","alarm_settings","home_timer_seconds","outsideTimer","outside_timer_seconds","isRinging","will_ring","ringing","prevState","setAlarm","handlePassword","done","setHome","abort","showHomeButton","homeButtonImage","showOutsideButton","outsideButtonImage","showRingingButton","showCancelButton","cancelButtonImage","showTimerPanel","iconOK","iconAlarmHome","iconAlarmOutside","iconCancel","iconAbort","iconHome","iconOutside","iconTime","latest_log_list","dateObject","Date","timestamp","hourString","getHours","minuteString","getMinutes","timeString","sensor_type_id","log_message","doors","yellowDoorIcon","blueDoorIcon","pingDoorIcon","limeDoorIcon","colors","IntercomScreen","intercomList","intercomState","disabledLookup","setDisabledLookup","click","intercom","openDoor","door_id_list","lookup","camera_id","useKeyboard","defaultLayout","persistLayout","keyboardRef","setKeyboardRef","keyboardLayout","setKeyboardLayoutRaw","currentInput","setCurrentInput","setKeyboardLayout","keyboardVisible","setActiveInput","activeInput","onChange","layoutName","includes","blur","layout","shift","numpad","renderKeyboard","maxLength","preventMouseDownDefault","theme","display","setInput","useFilter","MyButton","selected","iconOther","iconAirConditioner","iconTv","iconMusicPlayer","iconSatellite","iconProjection","style","MyRadioButton","label","onPress","MediaCreateScreen","bridgeDeviceList","bridgeDeviceTypeSet","bridgeDeviceTypeList","history","useHistory","inputRef","mediaName","setMediaName","bridgeDeviceId","setBridgeDeviceId","selectedType","setSelectedType","devices","device","type_id","is_media_device","onFocus","onBlur","save","trim","createMediaDevice","bridge_device_id","push","placeholder","ref","iconSave","hasAuthority","requiredRole","PasswordContainer","isFullscreen","usernameRef","passwordRef","setActivePassword","setUsername","onFocusUsername","onFocusPassword","authenticate","setSession","renderPassword","color","padding","maxWidth","textAlign","borderRadius","isAuthenticated","setSettingsAction","settings","latestVersion","fetchAndInitialize","rpc_service","sensorTypePromise","getSensorTypeList","controlTypePromise","getControlTypeList","userPromise","getUserList","controlPromise","getControlList","bridgeDevicePromise","getBridgeDeviceList","bridgeDeviceTypePromise","getBridgeDeviceTypeList","gatewayPromise","getGatewayList","cameraPromise","getCameraList","cameraBrandPromise","getCameraBrandList","mediaFilePromise","getMediaFileList","inputTypePromise","getInputTypeList","inputPromise","getInputList","scenarioPromise","getScenarioList","scenarioTriggerPromise","getScenarioTriggerList","doorPromise","getDoorList","doorBrandPromise","getDoorBrandList","intercomPromise","getIntercomList","areaPromise","getAreaList","mediaPromise","getMediaList","mediaInputPromise","getMediaInputList","virtualControlPromise","getVirtualControlList","homepageItemPromise","getHomepageItemList","alarmStatePromise","getAlarmState","soundStatePromise","getSoundState","settingsPromise","getSettings","configsPromise","getConfigs","locationPromise","getLocationList","temperaturePromise","getTemperature","menuItemPromise","getMenuList","stpUIPromise","getSTPUIList","languagePromise","getLanguageList","conciergePromise","getConciergeList","conciergeTypePromise","getConciergeTypeList","all","sensorTypes","controlTypes","users","bridgeDevices","bridgeDeviceTypes","gateways","cameras","cameraBrands","mediaFiles","inputTypes","inputs","scenarios","scenarioTriggers","doorBrands","intercoms","areas","medias","mediaInputs","virtualControls","homepageItems","configs","locations","temperatureResponse","menuItems","stpUIs","languages","concierges","conciergeTypes","lang","variables","addResources","shouldReloadPage","reload","batch","getSystemInfo","systemInfo","version","LoginContent","LoginScreen","isPromise","obj","SettingInputComponent","forwardRef","setValue","tempValue","onFocusProp","onBlurProp","restProps","newRef","useLegacyRef","passwordVisible","setPasswordVisible","event","valueLast","test","String","fromCharCode","which","internalType","valueConsistsOfStarts","iconHide","iconShow","SearchContext","React","ButtonComponent","withState","renderContent","doNotBlockUI","isMounted","componentIsMounted","useIsMounted","isBusy","setIsBusy","Element","Link","internalOnClick","output","finally","to","pathname","SettingsPageContainer","backUrl","buttons","currentNumpadInput","currentNumpadExtendedInput","title","searchable","childrenRef","isSearchActive","setIsSearchActive","searchTerm","setSearchTerm","selectedRef","onCrossClick","scrollTo","offsetParent","offsetTop","iconLeft","iconUser","iconSearch","iconCross","button","hidden","component","Provider","useQuestion","yesCallback","noCallback","isApproved","MAX_HEIGHT","ITEM_HEIGHT","selectStyles","isUp","provided","menuIsOpen","height","width","border","backgroundColor","fontSize","justifyContent","alignItems","singleValue","textOverflow","overflow","indicatorSeparator","indicatorsContainer","option","_","isSelected","borderBottom","options","borderTop","menu","marginTop","marginBottom","paddingTop","top","bottom","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","menuList","maxHeight","multiValue","marginRight","multiValueLabel","multiValueRemove","container","valueContainer","flexWrap","Select","setIsUp","styles","determineUp","select","windowHeight","min","getBoundingClientRect","noOptionsMessage","closeMenuOnSelect","isMulti","isClearable","hideSelectedOptions","SettingSelectComponent","typedMemo","SettingReadOnlyRowComponent","NotificationSetting","allowed","UserEditScreen","useParams","question","setActiveNumpadInput","renderNumpadKeyboard","userList","currentUsersRole","ROLE_SELECTION_ITEMS","m","selectedUser","setSelectedUser","setName","setRole","accountPassword","setAccountPassword","alarmPassword","setAlarmPassword","alarm","bell","intertext","notificationSettings","setNotificationSettings","toggleNotificationSelected","getValidationErrorMessage","onBackPressed","deletePressed","deleteUser","createPressed","user","notification_settings","alarm_password","updateUser","onFocusAlarmPassword","find","mobile_os","push_token","QRScreen","ListItem","columns","displayNameSelector","item","onColumnClick","column","i","flex","direction","iconUp","iconDown","headerSelector","SettingsList","items","selectedItem","onItemSelected","keyExtractor","classExtractor","notSelectableItems","displayNameExtractor","sortDisabled","setSort","filteredSortedItems","diff","acc","cur","numeric","UserListScreen","qrVisible","setQrVisible","currentUsername","currentUser","u","roles","showQR","testNotification","OS_OPTION_LIST","UserSettingsRoutes","routerLink","setOS","setToken","DEVELOPER_URL","onSavePressed","UartSettingsRoutes","uartMessageList","debug","setMessage","filterMessage","setFilterMessage","versionVisible","setVersionVisible","onlyRawMessage","setOnlyRawMessage","filteredMessageList","sendUartMessage","hideVersion","v","clear","copy","navigator","clipboard","writeText","changeRawMessage","checked","exact","useFilterSelector","useBackground","backgrounds","tags","newValue","backgroundImage","CustomizationSettingsRoutes","changeBackground","backgroundStyle","backgroundList","image","ColumnComponent","max","Column","getImage","sensor","sensor_settings","active","passive","SensorEditComponent","sensorOrSiren","isInput","changeStatus","isUpdating","updateSensorStatus","SensorSettingsRoutes","inputTypeSet","inputTypeList","sensorList","inputList","primitive_name","sirenList","controlList","controlTypeSet","controlTypeList","siren","DeviceListScreen","gatewaySet","gatewayList","selectedDevice","setSelectedDevice","useMap","useMapSelector","callbackfn","regexIp","isValidIP","isValidPort","Number","isInteger","isValidRFAddress","isValidSIPNo","isValidDuration","isValidString","messageFromEntityList","entityList","useRelations","getRelations","relations","relation","should_update","relatedEntity","control_id","SettingsDeleteButton","onPressProp","questionText","questionTextRelational","positiveButton","questionMessage","DeviceEditScreen","alarmConfig","GATEWAY_OPTION_ITEM_LIST","DEVICE_TYPE_SELECTION_ITEMS","setSelected","setType","rfAddress","setRFAddress","gateway","setGateway","nextFreeRfId","usedRfAddressList","rf_address","onDeletePressed","deleteBridgeDevice","isFieldsValid","onCreatePressed","bridgeDeviceModel","temperature_offset","temperature_hysteresis","alarm_config","updateBridgeDevice","gatewayOptionItem","DeviceSettingsRoutes","setActiveNumpadExtendedInput","renderNumpadExtendedKeyboard","isTemperatureDevice","setTemperatureDevice","temperatureOffset","setTemperatureOffset","temperatureHysteresis","setTemperatureHysteresis","firstLevelAlarmCountdownDuration","setFirstLevelAlarmCountdownDuration","secondLevelAlarmCountdownDuration","setSecondLevelAlarmCountdownDuration","thirdLevelAlarmCountdownDuration","setThirdLevelAlarmCountdownDuration","reactivationDurationAfterReset","setReactivationDurationAfterReset","sirenIntervalOnDuration","setSirenIntervalOnDuration","sirenIntervalOffDuration","setSirenIntervalOffDuration","sirenRepeatCount","setSirenRepeatCount","temperatureOffsetValue","isNaN","temperatureHysteresisValue","firstLevelAlarmCountdownDurationValue","secondLevelAlarmCountdownDurationValue","thirdLevelAlarmCountdownDurationValue","reactivationDurationAfterResetValue","sirenIntervalOnDurationValue","sirenIntervalOffDurationValue","sirenRepeatCountValue","round","first_level_alarm_countdown_duration","second_level_alarm_countdown_duration","third_level_alarm_countdown_duration","reactivation_duration_after_reset","siren_interval_on_duration","siren_interval_off_duration","siren_interval_repeat_count","onResetPressed","resetDevice","is_temperature_device","toFixed","GATEWAY_TYPES","GatewayListScreen","selectedGateway","setSelectedGateway","manageGateway","Reboot","home_network","ip_address","SettingCheckBoxComponent","GATEWAY_NETWORK_SELECTION_ITEMS","GatewayEditScreen","isUPnP","setUPnP","hasIntercomCamera","setHasIntercomCamera","rfNetworkAddress","setRFNetworkAddress","rfNetworkID","setRFNetworkID","rfNetworkChannel","setRFNetworkChannel","homeNetworkOption","setHomeNetworkOption","homeNetworkIP","setHomeNetworkIP","homeNetworkSubnetMask","setHomeNetworkSubnetMask","homeNetworkDefaultGateway","setHomeNetworkDefaultGateway","remoteNetworkOption","setRemoteNetworkOption","remoteNetworkIsStatic","setRemoteNetworkIsStatic","remoteNetworkIP","setRemoteNetworkIP","remoteNetworkPort","setRemoteNetworkPort","remoteNetworkSubnetMask","setRemoteNetworkSubnetMask","remoteNetworkDefaultGateway","setRemoteNetworkDefaultGateway","setRemoteNetworkIsStaticCheckbox","setUPnPCheckbox","setIntercomCamera","homeNetworkSettings","is_ethernet","is_static","subnet_mask","default_gateway","sipSettings","sip","intercomSettings","flat_name","server_ip","server_port","user_id","has_usb_camera","upnp","rf","network_id","channel","remote_network","setup_mode","updateGateway","deleteGateway","GATEWAY_TYPE_SELECTION_ITEMS","entries","SIPSettingsRoutes","filteredGatewayList","setUserId","setIP","flatName","setFlatName","createNullArray","count","SetupIOTestComponent","onClosePressed","deviceName","deviceImage","deviceType","device_type_id","output_count","outputs","setOutputs","input_count","setInputs","rf_power","getDirectInput","newOutputs","setDirectOutput","outputClick","useSortBySelector","useSort","s1","s2","f1","f2","MatchedItemButton","dangerouslySetInnerHTML","__html","MatchedItem","deviceTypeName","ioTestClick","deviceId","onDeviceReset","onDeviceMatch","inputCount","outputCount","searchInProgress","findInProgress","setFindInProgress","selectedBridgeDevice","setSelectedBridgeDevice","matchInProgress","setMatchInProgress","bridgeDeviceOptionList","onFindClick","findDevice","onStopFindClick","onResetClick","onIOTestClick","onMatchClick","matchDevice","onReMatchClick","reMatchDevice","SetupRoutes","panelList","filteredBridgeDeviceList","manualSearchInProgress","setManualSearchInProgress","automaticSearchInProgress","setAutomaticSearchInProgress","ioTestModalRawDevice","setIoTestModalRawDevice","manualSearchText","automaticSearchText","rawDeviceList","setup","setupMode","changeSetupMode","job","some","disableSetupModePressed","enableSetupModePressed","manualSearchPressed","scanDevices","automaticSearchPressed","GatewaySettingsRoutes","CameraListScreen","CameraEditScreen","cameraBrandOptionList","areaOptionList","areaList","areaOption","area_id","setAreaOption","cameraBrandOption","cameraBrandModel","setCameraBrandModel","useRTSP","setUseRTSP","rtspPort","setRTSPPort","remote_port","rtspRemotePort","setRTSPRemotePort","useVideoCGI","setUseVideoCGI","videoCGIPort","setVideoCGIPort","videoCGIRemotePort","setVideoCGIRemotePort","useMJPEG","setUseMJPEG","mjpegPort","setMJPEGPort","mjpegRemotePort","setMJPEGRemotePort","authentication_required","cameraModel","updateCamera","deleteCamera","CameraSettingsRoutes","useControlSelector","controlSet","isVirtual","glassControlParameters","parameters","virtualControlList","useGlassControl","bridgeDeviceType","controlTypeId","stpUIList","isSTPUIEntity","hasOwnProperty","onlyEmptyPages","setOnlyEmptyPages","pageOptionList","list","sameBridgeDevice","selectedPageNumber","page_number","page_count","occupiedBySelected","occupied","stpUI","has_home_page","nope","pageNumber","setPageNumber","isThermostat","rowNumber","row_number","rowOptionList","samePageNumber","isMediaOrAir","selectedRowNumber","row_count","setRowNumber","buttonNumberOptionList","selectedButtonNumber","button_number","controlType","render_type","itemSameBridgeDevice","buttonNumber","button_count","isThreePhase","setButtonNumber","CONTROL_TYPE_VALUE_MAP","complex","simple","three_phase","two_phase","pulse","NO_OUTPUT_OPTION","ControlEditScreen","useLocation","bridgeDeviceOption","setBridgeDevice","bridgeDeviceDimmerCount","dimmer_count","isBridgeDeviceTypeIO","is_io_device","usedOutputList","values","output_number","down_output_number","alarmControlOptionList","unshift","outputNumberOptionList","isUsedOutput","doubledOutputNumberOptionList","controlTypeOptionList","allowed_bridge_device_type_id_list","indexOf","controlTypeOption","setControlType","should_output_reverse","outputReverse","setOutputReverse","should_remember_last_value","rememberLastValue","setRememberLastValue","navigateToSTPEditor","setNavigateToSTPEditor","thermostatBridgeDeviceOptionList","bridgeDeviceItem","thermostatBridgeDevice","setThermostatBridgeDevice","thermostatBridgeDeviceType","isThermostatBridgeDeviceIO","addInput","setAddInput","outputNumberOption","outputNumber","setOutputNumber","downOutputNumber","setDownOutputNumber","doubledOutputNumber","setDoubledOutputNumber","output_time_limit","outputDurationLimitSeconds","setOutputDurationLimitSeconds","pulse_time","pulseDuration","setPulseDuration","max_limit","maxValue","setMaxValue","min_limit","minValue","setMinValue","ALARM_LEVEL_LIST","alarmLevelOption","alarm_level","setAlarmLevelOption","SIREN_LEVEL_LIST","sirenLevelOption","setSirenLevelOption","relational_control_id","alarmControlOption","setAlarmControlOption","SIREN_LIST","sirenOption","siren_type","alarmSirenOption","setAlarmSirenOption","HEATING_MODE_LIST","heatingOption","has_cooling","has_heating","heatingModeOption","setHeatingModeOption","delay_time","alarmDelaySeconds","setAlarmDelaySeconds","defaultValueOptionList","defaultValueOption","default_value","setDefaultValueOption","goToInputEditScreenWithState","goToStpEditorWithState","deleteControl","foundControl","controlName","isValidMaxDimmerValue","isValidMinDimmerValue","ioOrGlassParameters","controlParameters","temperatureSettings","is_virtual_control","is_mode_heating","updateControl","inputTypeId","setOutputReverseCheckbox","setRememberLastValueCheckbox","setAddInputCheckbox","setNavigateStpEditorCheckbox","ControlSettingsRoutes","bridgeDeviceSet","selectedControl","setSelectedControl","onCopyClick","outputString","downOutput","IntercomListScreen","doorSet","doorList","selectedIntercom","setSelectedIntercom","IntercomEditScreen","doorOptionList","door","sipID","setSipID","selectedDoorOptionList","setSelectedDoorOptionList","cameraOptionList","cameraOption","setCameraOption","intercomModel","sip_id","doorOption","updateIntercom","deleteIntercom","IntercomSettingsRoutes","DoorListScreen","doorBrandSet","doorBrandList","selectedDoor","setSelectedDoor","onTestClick","door_brand_id","DoorEditScreen","doorBranchOptionList","doorBrand","doorBrandOption","setDoorBrandOption","doorPath","setDoorPath","doorNumber","setDoorNumber","doorPathWithScheme","doorModel","door_path","door_number","updateDoor","deleteDoor","doorItem","doorBranchOption","DoorSettingsRoutes","RoomListScreen","areaSet","roomList","room","parent_area_id","selectedFloor","AREA_TYPES","AreaListScreen","RoomEditScreen","floorList","backURL","setBackURL","setFloor","floorOptionList","areaModel","updateArea","deleteArea","floor_id","floorOption","AreaEditScreen","TYPE_OPTION_LIST","ProjectInformationSettingsRoutes","MediaInputListScreen","mediaInputList","mediaInputNewList","mediaInput","bridge_device_name","selectedMediaInput","setSelectedMediaInput","MediaInputEditScreen","setSlot","setControl","valueOptionList","setValueOptionList","bridgeDeviceIdList","controlOptionList","deleteMediaInput","updateMediaInput","onRegisterSignalPressed","registerMediaInput","mediaInputItem","controlBefore","controlItem","controlRenderType","MediaSettingsRoutes","AlarmSettingsRoutes","setHomeTimer","setOutsideTimer","homeTimerValue","outsideTimerValue","updateConfigs","onApplyPressed","TYPE_NAME_MAP","UpDown","onUpClickProp","onUpClick","onDownClickProp","onDownClick","iconUpArrow","iconDownArrow","HomepageListScreen","homepageItemModelList","homepageItemList","homepageItemModelListSorted","scenarioSet","scenarioList","inputSet","mediaSet","mediaList","selectedHomepageItem","setSelectedHomepageItem","swapItemOrders","itemA","itemB","updateHomepageItem","HomepageEditScreen","show_on_homepage","scenarioOptionList","sensorOptionList","mediaOptionList","selectedControlOption","setSelectedControlOption","selectedScenarioOption","setSelectedScenarioOption","selectedSensorOption","setSelectedSensorOption","selectedMediaOption","setSelectedMediaOption","deleteHomepageItem","homepageItemModel","homepageItem","typeOption","controlOption","selectedScenario","scenarioOption","selectedSensor","sensorOption","selectedMedia","mediaOption","HomepageSettingsRoutes","WiFiSettingsRoutes","wifiNetworkList","setWiFiNetworkList","selectedWiFiNetwork","setSelectedWiFiNetwork","currentGatewayId","g","hasWifi","gatewayName","refreshNetworkList","getWifiNetworkList","networkList","onScanClick","onDisconnectPress","disconnectWifiNetwork","wifi_settings","ssid","signal","iconSignal3","iconSignal2","iconSignal1","iconSignal0","wifiNetworkName","setWiFiNetworkName","isManuel","setManuel","setGatewayId","BACK_URL","isConnectFieldsValid","onConnectPress","connectWifiNetwork","useDebounce","fn","delay","fnRef","args","Widget","RangeRawComponent","activeImage","passiveImage","columnProps","step","onInput","RangeComponent","valueProp","onChangeProp","setTempValue","timeoutRef","onChangeCallback","valueAsNumber","SoundSettingsRoutes","sound","newSound","onIntercomChange","intercom_level","onAlarmChange","onIncomingCallFlatFrontChange","incoming_call_flat_front_level","onIncomingCallOutsidePanelChange","incoming_call_outside_panel_level","onMicrophoneLevelChange","microphone_level","iconSound","iconSoundOff","microphoneOn","microphoneOff","LanguageSettingsRoutes","languageList","language","TimeSettingsRoutes","locationList","cityList","parent_id","city","setCity","townList","town","setTown","downloadStringAsFile","createElement","body","appendChild","fileName","fetch","blob","URL","createObjectURL","href","download","revokeObjectURL","DatabaseSettingsRoutes","downloading","setDownloading","uploading","setUploading","fileNameToUpload","setFileNameToUpload","downloadInputRef","downloadDBClick","downloadDB","resetDBClick","resetDB","uploadDBClick","uploadDBFile","file","fileReader","FileReader","onload","uploadDB","result","readAsDataURL","onInputFileChange","files","SystemInfoSettingsRoutes","setSystemInfo","loadInfo","onRefreshPressed","lan_ip","wan_ip","mac_address","image_version","system_time","serial_port_name","cpu_temperature","VirtualControlListScreen","idBridgeDeviceMap","idControlMap","selectedVirtualControl","setSelectedVirtualControl","VirtualControlEditScreen","virtualControlSet","controlBridgeDeviceOptionList","controlBridgeDevice","setControlBridgeDevice","deleteVirtualControl","updateVirtualControl","VirtualControlSettingsRoutes","DoorBrandListScreen","selectedDoorBrand","setSelectedDoorBrand","DoorBrandEditScreen","openCommandSuffix","setOpenCommandSuffix","doorBrandModel","door_open_command_suffix","updateDoorBrand","filteredDoorList","deleteDoorBrand","doorBrandItem","DoorBrandSettingsRoutes","InputListScreen","selectedInput","setSelectedInput","InputEditScreen","previousLocationSelectedControl","inputTypeOptionList","inputType","inputTypeOption","setInputType","sensorTypeOptionList","sensorType","sensorTypeOption","setSensorTypeOption","isInputTypeSensor","bridgeDeviceFilteredControlOptionList","bridgeDeviceFilteredVirtualControlOptionList","inputNumberOptionList","setControlOption","input_number","inputNumber","setInputNumber","DIRECTION_OPTION_LIST","setDirection","deleteInput","onGoBackPressed","updateInput","controlOptionItem","nameSuffix","InputSettingsRoutes","useCurrentGateway","panel","BaseSettingsScreenBase","getPages","baseRoute","currentGateway","pages","page","iconDevices","DeveloperSettingsScreen","ControlTypeListScreen","selectedControlType","setSelectedControlType","ControlTypeEditScreen","bridgeDeviceTypeOptionList","GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST","show_on_scenario","showOnScenario","setShowOnScenario","showOnHomepage","setShowOnHomepage","ask_value_in_initialize","askValueInInitialize","setAskValueInInitialize","glass_device_internal_icon_id","glassDeviceInternalIconId","setGlassDeviceInternalIconId","allowedBridgeDeviceTypeIdList","setAllowedBridgeDeviceTypeIdList","setShowOnScenarioCheckbox","setShowOnHomepageCheckbox","setAskValueInInitializeCheckbox","updateControlType","num","ControlTypeSettingsRoutes","BridgeDeviceTypeSettingsRoutes","CameraBrandListScreen","CameraBrandEditScreen","is_usb","isUSB","setIsUSB","authenticationRequired","setAuthenticationRequired","setAuthenticationRequiredCheckbox","required","hasRTSP","setHasRTSP","rtsp720p","setRTSP720p","rtsp360p","setRTSP360p","setHasRTSPCheckbox","hasVideoCGI","setHasVideoCGI","videoCGI720p","setVideoCGI720p","videoCGI360p","setVideoCGI360p","setHasVideoCGICheckbox","hasMJPEG","setHasMJPEG","mjpeg720p","setMJPEG720p","mjpeg360p","setMJPEG360p","mjpegDelayMS","setMJPEGDelayMS","setHasMJPEGCheckbox","setIsUSBCheckbox","parseInt","updateCameraBrand","CameraBrandSettingsRoutes","InputTypeSettingsRoutes","TestScreen","ServerSettingsRoutes","setGatewayList","gatewaySelectOptionList","connectionAddress","supervisor_connection_address","MACHINE_OPTIONS","connectedItem","connectToLocalhost","setConnectToLocalhost","setAddress","onConnectClick","connectToLocalMachine","connectToMachine","beforeConnectToMachine","SetDateTimeRoutes","pickedDateString","setPickedDateString","pickedTimeString","setPickedTimeString","pickedDate","getTimezoneOffset","dateUTC","getTime","pickedHourString","pickedMinuteString","calculatedTime","updateTimeAndWeather","leftMenuIconList","iconUrl","intercomIcon","canSpecial","scenarioIcon","mediaIcon","alarmIcon","conciergeIcon","sensorIcon","curtainIcon","lampIcon","plugIcon","airConditionerIcon","cameraIcon","contactorIcon","temperatureIcon","settingsIcon","LeftMenuEditScreen","selectedMenuItem","setSelectedMenuItem","menuItemName","setMenuItemName","menuIcon","setMenuIcon","deleteMenu","menuEntity","content_list","is_special","updateMenu","translatedLeftMenuIconList","menuItem","MenuElementIcon","ColorfulText","LeftMenuListScreen","menuItemList","ContentListScreen","selectedContent","setSelectedContent","contentListSorted","tempAOrder","tempBOrder","newContents","mediaTypeOptionsList","ContentEditScreen","menu_id","selectedMenu","sortedContentList","relationalIdExists","contentExists","returnPushedArray","array","tempArray","newContentList","rel_id","menuContent","LeftMenuSettingsRoutes","GatewayControlRoutes","onShutdownClick","Shutdown","onRestartClick","onSupervisorRestartClick","RestartSupervisor","onWorkerRestartClick","RestartWorker","getColumns","bridgeDeviceTypeId","rowNumberToString","n","STPEditorContentEditScreen","stpUIEntityList","currentSTPUIEntity","currentControl","controlTypeName","displayName","setDisplayName","contentType","setContentType","groupType","setGroupType","deviceList","CONTENT_TYPES","contentTypeOptionList","controlPageOptionsList","slice","deleteSTPUI","display_name","updateSTPUI","GROUP_CONTROL_TYPES","display_name_length","STPEditorRoutes","stpDeviceList","deviceTypeSet","selectedDeviceType","sortedEntityList","selectedUiEntity","setSelectedUiEntity","SettingsLoginRoutes","ConciergeListScreen","conciergeList","conciergeTypeList","selectedConcierge","setSelectedConcierge","callIntercom","ConciergeEditScreen","conciergeTypeOptionList","conciergeTypeOption","setConciergeTypeOption","conciergeURL","setConciergeURL","sipNumber","setSipNumber","types","conciergeModel","conciergeURLWithScheme","updateConcierge","deleteConcierge","concierge","conciergeItem","ConciergeSettingsRoutes","SettingsRoutes","Row","Button","textStyle","containerStyle","position","DisabledIcon","PhaseStatus","SimpleControl","isTimedOut","setIsTimedOut","end","start","useTimer","ms","race","current_value","ThreePhaseControlComponent","isTwoPhase","curtainStatus","Up","up","Down","down","Stop","upButton","equalButton","downButton","ThreePhaseControl","DimmerControl","TemperatureControlComponent","valueTemperature","homeValueTemperature","temperatureClick","minusIcon","plusIcon","TemperatureControl","thermostatControlTypeList","setWhole","setFraction","controlRef","bridge_device","room_temperature_whole","room_temperature_fraction","isPlus","newWhole","newFraction","imageSet","heat_on","cold_on","heat_off","cold_off","Control","renderById","Scenario","is_playing","playingIcon","Sensor","fans","fan0","fan1","fan2","fan3","fan4","flaps","flap0","flap1","flap2","flap3","flap4","NoBorder","AirConditionerControlComponent","minus","plus","fanMinus","fanPlus","airFlapMinus","airFlapPlus","activeIcon","open","airConditionerActive","airConditionerPassive","iconOff","iconOn","fan_speed","flap_speed","iconMinus","iconPlus","MediaOtherControl","mute","play","volumeMinus","volumePlus","iconOnOff","iconProgram","iconVolume","iconMute","iconPlay","Media","mediaButtonPressed","airClick","isOpen","createMinusPlus","isMinus","airFanMinus","airFanPlus","airMinus","airPlus","otherClick","otherPlus","otherMinus","otherVolumePlus","otherVolumeMinus","otherMute","otherPlay","MainScreen","homePageItemList","homePageSortedList","switchToHomeMode","iconUsers","iconProjectInfo","iconGateways","iconSetup","iconSensors","iconRemotes","iconIntercom","iconCam","iconAlarm","iconSip","iconMainPage","iconWifi","iconLanguage","iconCustomization","iconLocation","iconDatabase","iconSystemInfo","iconControls","iconVirtualControls","iconInputs","iconDoors","iconServers","iconConcierge","UserSettingsScreen","ScenarioPage","scenarioTriggerList","scenarioTriggerControls","scenarioStpUIList","createScenario","createTrigger","openTrigger","openTriggerInput","openSTPUITrigger","scenarioCreateIcon","triggerCreateIcon","triggerIcon","stpUiEntity","s","ScenarioScreen","SensorScreen","goSettingsPage","warningIcon","ItemList","sensors","MediaRenderer","ControlRenderer","PageScreen","mediaIcons","mediaCreateIcon","iconTV","typeId","MediaListScreen","stpUIMediaList","onCreatePress","onControlPress","onSTPUIMediaPress","ConciergeMessageScreen","back","conciergeRequest","createConciergeRequest","leftArrowIcon","ConciergeScreen","filteredConciergeList","conciergeTypeSet","itemClicked","goToMeetingPage","NumpadExtended","specialKeys","defaultSpecialKeys","ConciergeItemComponent","conciergeType","startCallIcon","MeetingScreen","onKeyPressed","getInput","useNumpadExtended","effect","hook","mountingRef","useUpdate","dayNames","formatNumber","digitCount","DateTime","counter","setCounter","dateTime","date","getFormattedTime","getDate","getMonth","getFullYear","getFormattedDate","dayName","getDay","getFormattedDayName","weatherIcons","weatherIcon0","weatherIcon1","weatherIcon2","weatherIcon3","weatherIcon4","weatherIcon5","weatherIcon6","weatherIcon7","weatherIcon8","weatherIcon9","weatherIcon10","Header","locked","onDateTimeClick","broadcastTimeAndWeather","getRTC","Sidebar","MenuItem","explode","FooterComponent","scenarioModelList","onScenarioClick","onEditPress","onLoginPress","onLogoutPress","doLogout","infoButton","playIcon","sitemapActive","wifiPassive","cloudPassive","knxPassive","Footer","scenarioListFiltered","show_on_footer","Timer","second","setSecond","minuteStr","secondStr","minuteAndSecondString","CallScreen","videoElement","bellStatus","intercomSoundLevelDB","incomingCallSoundLevelDB","hasUSBCamera","intercomName","cameraId","setCameraId","setNoImage","mediaPath","setMediaPath","isCallOpen","setIsCallOpen","isCallStarted","setIsCallStarted","isIndoorCall","setIsIndoorCall","intercomSoundLevel","setIntercomSoundLevel","answerCall","responseMessage","answerIntercomRequest","door_id","hangUp","setInfo","changeSound","newLevel","increaseSound","decreaseSound","srcObject","getTracks","mediaDevices","getUserMedia","video","autoPlay","iconCallGreen","iconCallEndRed","useOutsideDetector","enabled","handleClickOutside","contains","PopupScreen","popupState","centerAreaRef","remainingTime","setRemainingTime","clearInt","iconInfo","iconFailure","iconSuccess","answer","onPositiveButtonClick","onCancelClick","ceil","ConnectionIndicator","lineHeight","Viewport","isConnected","checkSelected","getNumber","divider","SimpleDevice","isPulse","setZero","setOne","ThreePhaseDevice","iconUpButton","iconEqualButton","iconDownButton","Device","increase","SimpleScenario","ThreePhaseScenario","ScenarioCreateScreen","scenarioName","setScenarioName","setScenarioId","scenarioScreen","selectedOrderOption","setSelectedOrderOption","previousSelectedOrderOption","usePrevious","setDevices","operations","setOperations","forceUpdate","useForceUpdate","newDevices","changed","aName","bName","operation_list","operationList","operation","deviceInfo","operationInfo","delay_seconds","limit","add","move","newScenarios","splice","remove","updateScenario","isSucceeded","addDelay","newDelay","sec","getDelay","iconClear","ScenarioPopupScreen","scenarioPopupScreen","isDeleting","setDeleting","stopScenario","playScenario","edit","deleteSelected","deleteScenario","toUpperCase","iconStop","iconStart","iconEdit","iconDelete","mediaScreen","mediaButtonLookup","button_list","isRegistered","registered","deletion","registration","MyIconButton","MyTemperatureButton","MyTextButton","LeftAirConditionerParent","iconAuto","iconFan","iconDry","iconCold","iconHot","iconF","iconFan0","iconFan1","iconFan2","iconFan3","iconFan4","iconFlap0","iconFlap1","iconFlap2","iconFlap3","iconFlap4","RightAirConditionerParent","LeftTvParent","iconList","iconMenu","iconRewind","iconF1","iconPause","iconNext","iconF2","iconSettings","iconBack","iconOk","iconInput","iconRight","iconExit","RightTvParent","MediaScreen","defaultEditMode","setEditMode","deleteMedia","iconRemove","format","valid","fullCheck","hourFirst","hour","minute","ScenarioTriggerCreateScreen","selectedTrigger","triggerScreen","timeRef","diffRef","triggerName","setTriggerName","timeStr","setTimeStrRaw","diffStr","setDiffStrRaw","setTriggerId","setTimeStr","setDiffStr","setActiveNumberInput","triggerType","setTriggerType","isBefore","setIsBefore","setSelectedScenario","beforeAfterClicked","isBeforeClicked","astronomicalTimeClicked","isBeginningOfTheDay","selectedDays","setSelectedDays","dayClicked","day","days","dayList","delayInSeconds","day_list","delay_in_seconds","updateScenarioTrigger","onFocusTime","onBlurNumber","onChangeTime","onFocusDiff","onChangeDiff","hourStr","minStr","focus","iconSunrise","iconSunset","iconScenario","ScenarioTriggerPopupScreen","triggerPopupScreen","deleteScenarioTrigger","ScenarioTriggerControlUpdateScreen","triggerControlScreen","selectedSTPUIEntity","selectedUIEntity","selectedScenarioId","NotFound404","sendBrokenLink","BusyIndicator","StpUIMediaScreen","selectedStpUIEntity","stpUIMediaScreen","setSelectedMedia","iconMedia","AppComponent","routes","leftMenuList","lockedReason","isPc","applicationLoaded","scenarioCreateScreenVisible","scenarioTriggerCreateScreenVisible","scenarioTriggerControlUpdateScreenVisible","mediaScreenVisible","popupScreenVisible","stpUIMediaScreenVisible","popupVisible","sidebarVisible","setSidebarVisible","matchPath","path","strict","match2","leftMenu","l","route","timer","App","scenarioScreenVisible","scenarioTriggerScreenVisible","scenarioTriggerControlVisible","scenarioSTPUIControlVisible","mediaStatus","rawLeftMenuList","alarmRinging","RPCApplication","rpcRef","rpcService","setRPCService","connected","setConnected","setRetryCount","ping","onOpen","initialControlState","getType","actionCreator","createHandlerMap","actionCreators","isArray","merge","objs","createReducer","defaultState","handlerMapsCreator","handlerMap","action","controlReducer","handle","initialDebugState","debugReducer","pop","initialUIState","busyCount","uiReducer","initialSettingsState","settingsReducer","initialSetupState","setupReducer","originalRawDevice","initialTemperatureState","temperatureReducer","reducers","initialState","initialUserState","userReducer","initialAppState","persistConfig","storage","whitelist","persistedBackgroundReducer","persistReducer","appReducer","store","createStore","applyMiddleware","next","getState","err","persistor","persistStore","loadLanguage","langValue","require","use","initReactI18next","init","resources","tr","translations","en","defaultNS","Application","ReactDOM","render","getElementById","serviceWorker","ready","unregister"],"mappings":"yFAAAA,EAAOC,QAAU,k1F,gBCAjBD,EAAOC,QAAU,81F,gBCAjBD,EAAOC,QAAU,8qZ,cCAjBD,EAAOC,QAAU,soX,gBCAjBD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,mBCA3CD,EAAOC,QAAU,IAA0B,kC,cCA3CD,EAAOC,QAAU,kiJ,cCAjBD,EAAOC,QAAU,05Q,gBCAjBD,EAAOC,QAAU,IAA0B,0C,cCA3CD,EAAOC,QAAU,syY,gBCAjBD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,iBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,8vE,cCAjBD,EAAOC,QAAU,0W,cCAjBD,EAAOC,QAAU,syE,cCAjBD,EAAOC,QAAU,kd,cCAjBD,EAAOC,QAAU,0hC,eCAjBD,EAAOC,QAAU,0nC,gBCAjBD,EAAOC,QAAU,IAA0B,sC,kBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,iBCA3CD,EAAOC,QAAU,IAA0B,6C,gBCA3CD,EAAOC,QAAU,IAA0B,6C,gBCA3CD,EAAOC,QAAU,IAA0B,6C,gBCA3CD,EAAOC,QAAU,IAA0B,6C,gBCA3CD,EAAOC,QAAU,IAA0B,kC,eCA3CD,EAAOC,QAAU,8jG,gBCAjBD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,2C,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,cCA3CD,EAAOC,QAAU,89L,gBCAjBD,EAAOC,QAAU,IAA0B,oC,qBCA3CD,EAAOC,QAAU,IAA0B,2C,gBCA3CD,EAAOC,QAAU,07G,gBCAjBD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,yDCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,uBCA3CD,EAAOC,QAAU,IAA0B,kC,cCA3CD,EAAOC,QAAU,k9K,cCAjBD,EAAOC,QAAU,8hF,cCAjBD,EAAOC,QAAU,0sD,cCAjBD,EAAOC,QAAU,8rE,cCAjBD,EAAOC,QAAU,8tD,eCAjBD,EAAOC,QAAU,k7E,cCAjBD,EAAOC,QAAU,87E,cCAjBD,EAAOC,QAAU,stE,cCAjBD,EAAOC,QAAU,83B,cCAjBD,EAAOC,QAAU,k6B,cCAjBD,EAAOC,QAAU,08B,cCAjBD,EAAOC,QAAU,s6E,cCAjBD,EAAOC,QAAU,8pF,cCAjBD,EAAOC,QAAU,8zE,cCAjBD,EAAOC,QAAU,0gH,cCAjBD,EAAOC,QAAU,05G,cCAjBD,EAAOC,QAAU,kuW,cCAjBD,EAAOC,QAAU,spJ,cCAjBD,EAAOC,QAAU,s8H,cCAjBD,EAAOC,QAAU,0lF,cCAjBD,EAAOC,QAAU,kxT,cCAjBD,EAAOC,QAAU,skE,cCAjBD,EAAOC,QAAU,8sF,gBCAjBD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,81F,cCAjBD,EAAOC,QAAU,s3T,cCAjBD,EAAOC,QAAU,k3B,gBCAjBD,EAAOC,QAAU,IAA0B,8C,gBCA3CD,EAAOC,QAAU,IAA0B,kD,gBCA3CD,EAAOC,QAAU,IAA0B,mD,cCA3CD,EAAOC,QAAU,slS,cCAjBD,EAAOC,QAAU,0hS,cCAjBD,EAAOC,QAAU,07R,gBCAjBD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,kC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,cCA3CD,EAAOC,QAAU,koK,cCAjBD,EAAOC,QAAU,84L,cCAjBD,EAAOC,QAAU,0mL,cCAjBD,EAAOC,QAAU,0wF,cCAjBD,EAAOC,QAAU,k0N,cCAjBD,EAAOC,QAAU,0/K,cCAjBD,EAAOC,QAAU,kgI,cCAjBD,EAAOC,QAAU,0iK,cCAjBD,EAAOC,QAAU,suI,cCAjBD,EAAOC,QAAU,0qT,cCAjBD,EAAOC,QAAU,0jL,gBCAjBD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,0oJ,cCAjBD,EAAOC,QAAU,8sF,cCAjBD,EAAOC,QAAU,syL,cCAjBD,EAAOC,QAAU,0vK,cCAjBD,EAAOC,QAAU,smQ,cCAjBD,EAAOC,QAAU,0tI,gBCAjBD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,8+H,gBCAjBD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,8C,cCA3CD,EAAOC,QAAU,0wO,cCAjBD,EAAOC,QAAU,8qJ,gBCAjBD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,gC,cCA3CD,EAAOC,QAAU,8uB,cCAjBD,EAAOC,QAAU,02K,cCAjBD,EAAOC,QAAU,07T,cCAjBD,EAAOC,QAAU,0zT,gBCAjBD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,cCA3CD,EA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","file":"static/js/main.3966c9e5.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjQ0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjQ0KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNDo0NCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiNjE3ZDJmNS1mNDgzLTUxNDAtYjdiNS01YWZiYmJkYjAwOTIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyMTAxYzkwZC04NzJhLWZjNGUtYTc4OS05NDA5MTFlNjNjNzciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3Nzc2MDZlZi03M2ViLWFmNGItYTQ2Yi0yNjY1M2E3NDQ2MjgiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Nzc2MDZlZi03M2ViLWFmNGItYTQ2Yi0yNjY1M2E3NDQ2MjgiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6MjQ6NDQrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YjYxN2QyZjUtZjQ4My01MTQwLWI3YjUtNWFmYmJiZGIwMDkyIiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI0OjQ0KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+7Nj/+QAAAj5JREFUeJzt3DFSFEEARuF/LUqEQApS74Cpl/AW3MHSCxh6EENIvIDGEBMZmUKC2Rq4AVrU9GxD975m3le1kdZ2w6ue7pkaXa3X64jjxa4noH8ZBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBgExiAwc4KcJlkv/PN5xu/pSbhCYPZm/J1fST62ngjcj14DrQqvAX1LcthpLnQfknxvPUhphbxL8rr1JAZx0mMQ9xCY0gr5kmS/x0QGcN1jkKk95LzHBAb0vuWXTwXxpd+HrVp+eWkPOdpMwE9yUf51Pp6bOoxBYEp7yFGS237TkSsExiAwcx4ujmaU4/qDx2dXCIxBYAwCYxCY57ipb+Opn0s9+kDhCoExCMwSLln3L0s971GqxnWFwJRWyM+Mced7PPFnv5Pc9ZrIPXebsbcyFeSqfi4o+9nNewGvNp+tTAV5m+QsycvaGWl7pRflbjLGe1m1G/cu70N8uDgCj72wcUtBviY5qJqOqpSCnCV5k+RTh7m0sqtje9W4pU09+fsPdi5rvrwjN3W1MWdTv02nt/Y075I1mv9/oKnLWctLVuky6iVrBEu4DxnqlOUKgTEIjEFgDAKzhE19qIeLrhCYJawQj72qt4QVMgX33MgVArOEFeIpS/WWsEI8ZameQWAMAmMQGIPAGATGIDAGgXmON4ZN/0/E1lwhMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBgExiAwBoExCMwfzWSL4dhmWmgAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMi0xOFQxNjoyMToyNCswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0xOFQxNjoyMToyNCswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDVmN2MwZTItMjU4Ny0xNjQ4LThlMzktYjM5MDBjYTRjMTgzIiB4bXBNTTpEb2N1bWVudElE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\"","module.exports = __webpack_public_path__ + \"static/media/up-arrow.6cc7ada8.png\";","module.exports = __webpack_public_path__ + \"static/media/down-arrow.b5b0c37b.png\";","module.exports = __webpack_public_path__ + \"static/media/left.532229d2.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjI4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjI4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODoyOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmMDg4OTAwMC01MDlhLTYwNGUtOTRiMC05Y2Y0Njg4NDIzY2MiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiMTMwYTJkOC1mNWI2LTE0NGMtOWY2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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/music-player.daadb599.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGh2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTEyLTI5VDEwOjMzOjI5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMS0xMlQxODoxNTo0NyswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMS0xMlQxODoxNTo0NyswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGRhZGJmOGMtMzY4NS1iODQ1LWE3MGQtZDMxMDZlYmNhZmI0IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NGY5MDE0YjctMDZiYy05MzQxLTlmYzMtYmM1ZTA3Y2M0M2IwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGM3NGNiNTAtOWJhZi1iZjQ1LTg5ZGYtMDc2NGE3MTE0ZTJjIj4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+NTE5QTU2MThERDBEOEM2RjY4QjBGNkE5QzBCQzVCMjE8L3JkZjpsaT4gPHJkZjpsaT44OUY1QzA1RDk4Q0RFREVCNzZFOTdBQjg1QjVEOEVBMTwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBjNzRjYjUwLTliYWYtYmY0NS04OWRmLTA3NjRhNzExNGUyYyIgc3RFdnQ6d2hlbj0iMjAxOC0xMi0yOVQxMDozMzoyOSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowZGFkYmY4Yy0zNjg1LWI4NDUtYTcwZC1kMzEwNmViY2FmYjQiIHN0RXZ0OndoZW49IjIwMTktMTEtMTJUMTg6MTU6NDcrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4kLqITAAAd5klEQVR4nO2deXQT1933f3dmNBrtsizbkrzveAcHCmYx+xKcAqZ5EqA5CSmhb96mObx907wn3XKyNMlpk/QhaZ6Q9pCWJk/SQEiAlKaQBGIMxgEMsQHveJU3ybIlSxpJoxnNff+w5McQCKQxtuz4c46PPbp3xvfO9/7u/f3uvTNCGGOYZupATHQBphlbpgWdYlBfl4gQGq9yTDNGTFvoFGNa0CnGtKBTjGlBpxjTgk4xpgWdYkwLOsWYFnSKMS3oFGNa0CnGtKBTjK8VdHppbfLxtZPzE8XSpUuRIAhEdHS0ore3lzSZTDFqtVomiqLY09ODnU7nEEKot7Ky0j/RZQ030M2scLxXXLZt20Z0dHTERkVFJSYmJmZERUVlxsfHm7RarY4gCN7hcPjNZnPz6dOn3+J5vvngwYPiuBYwzAkrC33hhRd0bW1tBSUlJevnzp07PyEhIZZhGKVSqZQSBEFijEVRFEWfz+epq6s7W1NT0wYA01Y6irAQ9P777yfz8/PzpFJpydatW9fNnDlzjkQiAZIkged5ged53uPxOHme9yOERL/fzwOAAyHET3TZw40JF3TRokUKmUxWmJmZ+eOioqI1Wq1WDwABt9vtdjqd5oaGhtqWlpYWp9PpFATBpdPpJH6/v3dgYKD6zJkz017bNUyYoG+++Sa6dOmS3GazLSspKdleXFy8VK1WKzmO4xoaGuq7urouIIROVFdXnzObzXav1+vz+XyAMeZJkiQ+/PBD10SVPZyZMEEFQWCSk5O/v3nz5p/l5+fPlEqltNVqtVZUVFSeOnVqL8uyZ2fPnt1vtVrdLMuSarUa2e12wm63o0AgMN3V3oAJEfTll1+mOY5bvXLlyv+XkZGRTxAEYTabOz/55JNDhw8f/jNFUU1Go5Hfvn07fvDBB7N0Op3aZDIlJSQkaAYHB/lz585d1Ol0tYODg76JKH84M+5hy86dOwmVSpWTk5Pz7Jw5c74PANDe3t584sSJt8+cOfMWRVFdkZGRlN/vj9NqtcuSk5OX5+bm5kilUplMJpMLgiA0NzfX/fa3v32yurr6vMPhmB5HRzHuFsqyrDo9PX3djBkzFhIEQTgcjr6enp73+vv730YI9URFRSkMBsM8vV6/Pjc3d1lqauoMURQFAEA8z/MSiYTCGPPz58+P5Tjuy8rKykDo2o899hgRCATQ0aNHob6+PvA1xZiyjKug27dvR6IoJhmNxmVKpVILALihoeGUw+F4TxTFbp/PRw0NDS2+6667fpaWlnaHSqXSIIRQR0eHua+vr2tgYMCKEBI4juuTy+U1c+bMESsrK+G5554je3t7IzDGJr1er0pOTh7wer29Go3GWVNT852y4HEV1OFwUJmZmXkGgyGLJEnS5XI5W1tb91osltaOjg5RJpOll5aWPpafn79AIpHQXq/X++mnn35eV1f3SXt7+1mv19tPEASt1+v7tVrt4Kuvvor37Nmjstvtpvz8/JK4uLiF0dHR2qysLPNHH330r56enhOlpaWWAwcOfGdmk8ZVUJZlGYPBkK/T6XQAAC0tLXXV1dWVL774ov/ZZ5+NNplMD8yZM2ceRVESi8XSd+jQoYPNzc3vSqXSUw6HA+3du3dEmF/84hfo1Vdf1cvl8gVpaWkPxMXFzTEajdE0TdPp6enOWbNmFe/atevXPT09hwFgaDzrOZGMq6Aejwf6+vo8Q0NDdolEQnR3dx/s7++3rlu3DrEsW7By5coNDMPIXC6X/fTp0/svX778RiAQqHvppZcwAIx0nbt27ZJ1dXXFyuXy5dnZ2dvj4uIyNRqNEmMMGGNQq9VqpVKpKikpeWDfvn3mDRs2nDl48CA3nnWdKMZVUI7jfFVVVRU6nU6q0WgCfr///T179vBFRUUyvV4/JyIiIgZjjG02W6vD4djv9Xobd+/ePSLkCy+8QAGASqlUzp8zZ86dGRkZxUlJSekMwzCjvXWMMRAEgWbOnPm9+vr6tV1dXe2rVq0yf/LJJ1N+PB1XQXmeFyorKyvdbndDYWEhp9FoBgAAMMYyk8kUR1EUFQgEAs3NzV9yHNe0e/duIXTu7t27pUNDQ/GRkZErsrOzNyUlJeWrVCoVRVHXrQPGGFQqlWrBggV3VldXf9nc3DwIAO5xquqEMa6CVlVVYQBwJSYmup955pkRa+F53ltTU3MuOzu7ECFE1NbWHh4aGuoPpe/duzeC5/lZRqPxB6mpqcvT0tLSCYK46W4LhBCRkZGRfeedd26x2Wyta9euvfDxxx9P6XAmLNZDV65ciWQyWZzBYMhSKBR+hNAZrVbr6+zsROnp6caMjIxVaWlpW41GY55Wq9VcKybGWAz+xgAQSh4puN1uH3rrrbf+XFZW9l+iKJr/8Y9/TFmvNywEBQBYvnw5QRAElZ6eHoiMjMQMw6jsdnvijBkz7ly8ePEDcXFxKVKpVBrKjzHGPM/7WZZl7Xa71e12sxzHgVKp1Gg0GpVGo1HIZDJZcB0V9/T09L322mtPNjU1HaBpenDv3r1TcjwNG0FD7Ny5kyIIIlatVi+Mjo5enZ2dXWwymUwURUlC5eE4zj8wMGBrbW398vLly/V9fX0XBUEY6O3tJZVKpUGlUukKCwvzioqKFul0umiapqWiKOLz58+ffeutt562Wq0n33//fXZcKzZOTPh66GieeOIJucfjic/Jybk/NTW1JCEhIUWhUChRsFUhhMDlcrGtra1N5eXl77AsW9HY2NjR0dFhz8rKEuvr60Emk0k4jmNaW1sTu7q6vlyzZs0DycnJWRKJhMrNzS2YO3fuhsOHD7cXFxc3l5eXT7nxNGwEffzxx5VKpfKOwsLC/5WXl7csJiZGTxAEOToPy7J8TU3N5/v373+J5/lLr7/++mAo7fPPPw/96QcAtqKiYiAmJsb+wQcf4DVr1txfUFCQJ5fLZcuXL7+rqanpssVi6QEA5/jVcHwIC0Gff/55RNN0zuzZs3+dl5c3W6fTaa8dCgKBQKC3t7eyvb39FY7jzr7xxhveUNrvf/979fHjxxmfzxewWq1eiqL8Fy9eFGprazsuXbq0nyAIJj4+Plqv1xv1en3UokWL1jU1NdUWFxdXlJeXT6k9SWGx0ZokSYnRaCzIzc3Nu56YAABOp9PW3Nz8kVwurwyJ+eijj0reeOONbL1ev2Xt2rU/WbVq1daioqISk8k046c//Sn16aefipGRkb21tbUHy8rK/iWKokhRFD1v3ryFq1at2kRRlHH16tVh0ajHirCojMvlokiSjGQYRn6DLKLD4WgaGBg44ff7PQAAf/rTn0iO42YlJyc/nJOTs5RhGBXLsq7BwcGBs2fPnuru7v7z888/X//LX/6S37BhQ3tZWdmhwsLCxcnJyakKhYJZu3ZtaUtLS31NTc3fAcAyfrW9vYSFhXZ1dQWqqqrqLRZL3/XS/X6/v62trWZoaKht27ZtGACAoqjImTNnbioqKvqByWRK0ul0kXFxcYn5+fmz1q1bd290dPT3u7q6tAAABw8e9FgsltrBwcFeAMAkSaKYmJioe++990darbagtLRUPX61vb2EhaB79uzhHA5HdUVFxVG/3++/NlQKCtpRV1fnAgB48MEHUUdHR35qauoGpVKpCuVDwxAxMTGGvLy85RaLRb9ixQoEABAIBAa7urraEUIoONcLubm5uffdd98jWq02/e67777KAZushIWgAAAMw1gqKyv3lZeXHwsEAsLoNIIgRIVCIahUKgQA0Nrainp6etQAIIFRM0KjKSgoyExISJDz/PB+sk2bNrnVajWLMQ4ADM/1kiSJCgsL582aNatUIpHErlu3Lmzux79L2FTgtdde8/p8vprjx4+/29DQUBcIBAIAw7GnRCJBCQkJKC0tjQAACAQC4PP5eLfb7YJRy2qjwFardWDGjBnOEydOhLpomcFgiMQYjzQAjDFERUXpV6xYsd5gMMxzOp2y8ajr7SRsBAUAwBi7urq6jhw7duyg3W4fQAiFnoCTBAIBI8MwDADAqVOnxPb29is1NTVVHo+HBQAc6qYxxuDxePhjx44dUavVXaFr22w2nVKpTLl2HhghRKSmpmYsWLDgbolEkjh//vywuifflLAq/J49e7AgCIMNDQ3/PHfu3GmO4ziEEJAkKVUqldk8zxt3795NAAA4HI6OsrKyA+fPnz/tdDodgiDwPM8Lg4ODjra2tiONjY1/27x588j+XbfbnSyXyxOu938lEgldXFy8cubMmWsZhokar/reDsIibBnN3//+d/HRRx9tbG1tPZKVlZWdlJSUThAEER8fnyEIwpwrV650AYDz8uXLHqlUWj40NOTMysqanZ2dneP3+z0ul6shISHhzM6dOxtD1/zVr34Vk56efo9SqdTcaO5ap9NpHnzwwe0Oh6OLpumPjxw5MilnkcinnnrqazM8/fTT41OSUaxevVpwuVwOlmVlaWlpBVKpVEoQhNzr9QrNzc2XJRKJo6GhISCXy319fX3mzs7Olvr6+hMY45Pd3d1nlUpl66FDhzAAwJNPPqmKjY1dv2jRogcjIyP1of8hiqKIEEKiKAYQQgRCCGm12giFQqFpbm5uSkhIsDY1NQk3LmV4EpaClpeX46KiInZwcNDF87w+ISEhhaZpGgDUZrMZt7e3W5OTky2dnZ2ovb09wDCMWxTFoffff3/ozJkzvpCYJSUlisTExEVr1qx5JDExMTf0SKLNZhswm81dZrO5JxAI+NRqtRYhBARBEHq9Ptrv90NnZ2dDRkbGUH19/aRaOw1LQQEAKioqAnl5edbu7m6vyWSaYTKZ4hiGUen1+iSPx0NZrVbKarU6VCqVEBkZGaiqqsJLly5Fy5YtI0tLS9Hs2bNTMMZ3lJSU/J/8/PyFUqmUxhiLra2t7R999NH7e/bseaO2tvZkb2+vWS6Xq6OioqIJgiClUqlUq9XqOzo6egYGBlrq6uq8Ny9t+BC2ggIAVFVVBXJycga6uroCycnJWTqdTqdWqzU5OTkFkZGRSXFxcfHR0dGRHo8H5s2bF4sQkisUisTU1NQlKSkp/1FaWvpobm5ugVwul2KMwe/3+8rKyt7dt2/fyx0dHRetVmtDS0tLLUVRTGZmZp5CoVABAGg0GrVcLtc0NTU1aLXazra2tkmzGB52TtG17N6923bfffd9WlFRkRsVFXWfXC5XyGQyeXFx8aKZM2fmWCwWe29vbyfP8z6GYRDDMOqoqChdYmJiVjCGJTDGoYVxG8Mwx5KTk/uOHDkiAAAsWbLEUVVVdWTu3LkroqKiDAghgiAIIisrKy8/P/+u9vb2luLi4s7y8vJJIWrYCwoAgDHubGtrO9La2lqYnZ1dSBAESdM0qdfroyIiIiLT0tKSaJqWBJ/wJimKIgmCQDhI8DKI47hBAOhduHBhYNeuXQAAoFarRY1GwzEMQ4yOZTUajXbNmjUbGhoa6mpqavYtWbLEVVZWFvaihlUceiMQQj6O46qqqqr+YbPZLKPnekmSJKRSKY0QQjRNS2mapgiCQHa73dHf39/f1tbWwXGcDwCwz+djqquroz/44AM6dH56ejphMBiidTqdHq6ZRoyLi4t/6KGHHo+Pj/+eRCJhxq3C34KwHkNDXLx4EZYsWcIODQ0NcRynT09PzyFJ8rqT6TzP+6urqy/X1NR89tlnn/21qqrqEsYYGQwGE0VRMrPZzFZVVfUTBGFfvHixJCEhISE5OXnrHXfcseja5TuKogitVqv1er2BixcvVqelpblbWlrC2uudFIICAJw4cQLPmzfP3tPTw6pUqiSj0RhLkuS1PQxubW1tOnDgwB9Onjz5Z57nL1ZVVdV4PJ5Bk8mUajAYEhISEpJMJlN8UlJSdmxs7My0tLT7ly5dulqv10dzHCd6PB4nxpgnCEKCEEIkSRKxsbEJg4ODjoGBgeYZM2awDQ0NE3IPboVJMYaG+N3vfsc98sgjZw8fPvw3vV4flZGRkTU6ned5f2Nj40mz2XzUYrFY3333Xbx+/XpCEIQT9fX1GWlpabkxMTHGkpKSdXa73YEQIhUKhZwgCGhsbGyrra2tc7lcl1JTU1PS09MXGo1GU3DCQbN8+fIN/f39bZ2dnYcBwDNBt+CmTBoLDXHu3Dlvamqq3e12y9LS0rLlcrkMgmMfy7Ku8vLyg83NzacOHz7MAwA0NjbiM2fOeFevXm1KS0tbqVQqVSRJUgqFQqFUKhUEQaDGxsaKffv2vfbuu+++bbPZym02W7PP51MlJiamBWepiIiICF0gEKAuXrxYo1arB7u7u8PSQZoUTtG1CIJgrq2tPVRVVVUhCMLI9BzDMFKDwWCQSqWq0fl/8pOfSDiO0ygUCkXos9DWUIfD0X/q1Km3BgcH9zudzrq9e/d2DwwMXDh58uR/d3V1tYScZJlMJluyZMmqnJycNTKZ7EZbZSacSSnoO++8E7Db7fXHjx9/78qVK40QXBOlaZopKChYGhUVteyee+4xPfzww7Knn35aGRUVNTc7O/tumUx21XpncCXHJpVKm19//XV3bW2tCACwe/duD8MwTSzLtoXCHoQQUqvVqtLS0ntnzZoV98wzz4TlcDUpBQUA2L9/v9vn8529cOHC8eDLHAEAUGJiYu7GjRv/99KlSx/Oy8v7cUJCwuPz58//9fz584sFQQh4vV6fx+NhQ5bNcRy4XC7FPffcIwld+5lnnkGJiYnamJiYmNEhEkEQRFpaWkZ8fPxMgiDC0tsNy1Z2q6hUqp7Lly8fiI6OTly5cuV6hBCSSCTSO+64Y05OTk6O2+120jSt1Gg0aofD0W82m1uampo6JBIJzsjIyM7Ozi5ACOnlcvlCmqY7ly9f3m4ymQidTkfp9fr5crk8GUbFphhj5PP5+La2Nssf//jHySloaNosHHn++ed9O3bsqC4rK9tnNBqTsrOz8xBChFQqZWialqrV6ggAALfbPXT8+PF3mpqaDpw/f37A4/GQixcvXkyS5I9TUlKyFyxYsB5jTJjN5ssWi8VuNBqzMzIyStVq9VWL3SzLslar9bRGo2mZmBrfnEltoQAAr7zyimP79u1Hjx49mhgbGxuv1Wp1AP/j9AAAtLa21p8/f/6vSqXyitvtDtjtdrBarc4vvvgiLjExMWPGjBl5sbGxCRaLpZNhmBiKooTgRAQZcoqGhoYcFy5cOCmRSP5AUVTnBFX3pkx6QQEAfD6fvba29tA///nPlPXr1/+HSqUa2ZmAMcYEQTQpFArL008/PeIRb9q0qc/hcJT39/dvTklJSdVoNBERERE6QRBEiqKI0PsaBEHgu7u72xoaGg54vd6/REZGNj/11FNhGbIATGKnaDRvv/22yPP8lbNnzx6srq6+MDqUAQA/wzADWq0W8vLyRqxWp9NhkiRFmUymABi26ODWTgJjDKIoBpxO51BTU1P5lStXXuQ47j83btzYtHjx4rAVE2CKWCgAAMaY7+7uPnvs2LEP0tPTMw0Ggyk4/pNSqXRWc3PzHQihL+bMmeMpKSkBuVxuNBqNJTqdLvLafUYcx/nMZrPZbrd/6vV6/woAFzds2DApHmqaMoK+8847eMuWLYPd3d2fnz59+nvr16//IUmSJMaY0uv1s5cvX74NIWTs6Ohocjqdcp1Ot7ywsPAHNE2PhCvB50/ddXV1Z2w2298UCsWnS5cuve7jGeHKTZ/gBphc3/T78MMPy/V6/crNmzc/k5WVlQfDdcQEQaD6+vpau93uYBhGk5GRkSKTyeQkSUJwvBS7u7u7qqurT4mi+OqGDRvOTHRd/h2mnKAAADt27NDr9frNP/zhD3ckJSWlhMbH0A4/jDEOrdSIoohZlnV3dnZe6uzsfJ/n+ffWr18/qaxyNFPCKboWQRAG2tvbD3/22WcfORwOe6jREgRBouAek6DAuL+/v7ehoeFQd3f3c6Io7prMYgJMUQsFAHjggQdIuVy+oKSk5GcrVqy4k6bpkTeoBMdKV1tbW4fX693rdrv/WxCE7jVr1kz6N2VPWUEBALZs2aI0mUzrt23b9kRiYmIqwzAyAIC+vr7e+vr6L/x+/+tKpbJ80aJFk8KDvRW+saCT6euz1q1bR4qiGD1r1qz1q1evvicqKmqmw+Go7+np+RdBEH/dsGFD90SXcay5JUEnM4sXLyYJgoguKCiYm5GRkeL1ei/HxcVV3XvvvYM3Pzt8uNVecsoLCgAwe/ZsFBERoZw3bx6l1Wpdjz322KR7ZmVa0CnGrQo6JjNFgUCgGiGkmm4c/z4hwaKjo9fabLbGm2S/IWMiKMdxSQghjSiG5ZrvhDAq9r1uWujFHdfmwxjTXznhG3BLgo56NP66hAoHACCKIkgkkutW5HYjCAKIojihYRZCCAKBAEilUiBJ8kNBED5GCFUAQAsApGKMFxAEsZYgiI0+n++q88bCIMZ8cp4kSfD7/cBxHNzgZdNjTmhXBU3TEx4zi6IIUqnU4vf7X2pra9udkpKyAAAWA0A9ADwFAAcbGxs/sNlslcuWLfs5x3ExAP9Th287bI3pHQ/d1DVr1qw+efLkldGCXruVZSyPQy27o6Njb0xMzGy/f+LmCRBCgBB6CSH0l5SUlN8AwDoAeCOYLAeANzMzM09kZmY+V1lZCUVFRS/6fL4xERPgNi2fWa3WXoxx6+249tfR3t4+4d+FJpVKP7Tb7bvlcvlvAOD/AsAeAAg96CQFgEvBz0Emkz0LAEUIoY1j5VDeloFu1H7m7xRBUT6Wy+U/AoCtMCzmwwBgC2axB4/3AMDWrKysH4mi+PFYDhO3RdCJcIgAwmbOuQIA7gYABQC8p1AoOBh+FkYEAE/w+L1g+t1Bh2nMuC1drsUyMS+3DL58bKJpAYDZMHxvTwY/+wQAngCAfcHjkwBAB/ONbAkdiy2zYy6oKIrwm9/8Rr1ixYoIpVIJAMMW6/f7oaenBziOA6PRCHq9HkJ7uQiCAEEQoL29HTiOg5iYGDAYDBBybiiKAkEQoKOjA9xuN8TGxoLBYBg5XxRFYBgGXn75ZSoMYuFUAKgCgEIAWAQARxUKhQUAXhyVZxEMv3n7QjD/mDFmgoaCZZ7nYcuWLac2bdoEoWdyQwM+RVGAEAJBEEAQhOumkyQJLMuC0+kEiURy1fV1Oh1QFAUulwt6e3tBKpWOxG8YY5BKpeFgpQsAYD8AZALAJpZly4LdLAAAsCwrBYBNAMACwH6M8YJbueitWu8tC3oztzrorgNN00BR1HX/s9vtxgqFAmiavm66zWbDer0etFot0mq1X0kfGBjAkZGREBERgSIiIr6S3tbWhuPi4mCiwpbgpMJajPE2hFAsBL1ZlmXfg+FudhEMi7kVAP7Q2dn5l4yMjDf9fj/c4IH0b8yYdrkYYwgEAjecUAhuXL7K8kZD0zTwPH/DdJIkQRCEG14/IiJiwi3U7/dvlMvllT6f77ngR1sBYDMMj5l+GLbMPwDAcykpKQ8JgrBx9PlhNbEAABBsbfhaTzc0Pej1egGG3yr91cJQFHg8HpDL5ddNp2kaWJYFhmHw9USlaRoEQZhQb5cgCPD5fD9nGAY8Hs+zBEF0w7DXOxuGx8z9Ho/nL1qt9iGM8c85jhvTqOAb7Vi4UV6WZR0kSWpC1hEa00Z308FXr42kjyaUN/QTOv/aMoR+rncNgIkLl66HKIpA0/SHJEl+DMOhTAsMO0ALAGCt3+/fGAgERsocmqiPi4vLHxwcvHS9a47pGPp1hL7BiiRJQAgBz/MQCASuu3Vl+JV9U59gY96IMd7o9/uvatgAw/eDoiiQSCRXrbx827F0TATt7+8HjUYzstohkUi+0ppCx16vN1wmAG47IRFDDX00oZ7I4/G4EEICQRDg8XjA5XJ9KydgTLpchFASRVFEIBAAjDE0NDT8Z2Zm5rrRDkoo1lSpVKv8fj8O7VifauKGwrfQ3yRJ5rAsu1MikVw1lFAUBe3t7ZCSkrJIFMVTt3LtcetyMcbto4937NjhfvLJJ8Fut498plKpoKmpCTiOO4sx/s58JzZC6NIXX3yxMzMzE1iWHRn7NRoNvPLKK2O+i/K2bOO8WUv6rm1VGav7MW4WOpkIxy5+rNZCASZI0HC8qRPNhC1wX6/7nRZobLiZ83krfKtIfHSgP83Y8W3uafhMrUxzFf+usUwLGuZ80whjWtBJwDex1mlBJxG3Iuq0oFOMaUGnGNOCTjGmBZ1iTAs6xZgWdIpxS4J+15a7JjPTFjrFmBZ0ijEt6BTj/wPAEZzVwSMMLwAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/projection.b1e5ba92.png\";","module.exports = __webpack_public_path__ + \"static/media/cancel.c139061e.png\";","module.exports = __webpack_public_path__ + \"static/media/save.a8a3380b.png\";","module.exports = __webpack_public_path__ + \"static/media/plus.0ad74278.png\";","module.exports = __webpack_public_path__ + \"static/media/minus.8bc3a620.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArUlEQVR4nO3ZsRGDMADFUDnnfcg+ZAwGIgUDMREpMoQK602g+7gxhiRJkkUN4GNHmAbw2BGmCbDvu92huK7rfwKeZ81DMMbgZUfYGsAOsDWAHWBrADvA1gB2gG35ASbAcRx2h2b52+AA1v38SZIkyboG8LYjTMvfBifAtm12h+K+794Gl/8l1gB2gK0B7ABbA9gBtgawA2wNYAfYJsB5nnKGp+sw8LUjkiRJIvgBtYsXH/HIO98AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+klEQVR4nO3aMU7DQBBA0UkcaElDhWu3vhiVj+WeO/gSNPYBHCkFkRAKN8i6ME7QvFePViPt11YbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/K3dgpnjwjkeyyUivkpDpYt97fv+o67rp3V2YivDMAxd171HxM+tuUPhnOe2bZumaV7WW40tjOP4GQte7v0Gu/DABJCcAJITQHICSE4AyQkgOQEkJ4DkBJCcAJITQHICSE4AyQkgudJ/gOs0Td9VVV022YbVzPO8j4hraW7JV6+38FL8R+eION17CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BcZ7xtaYrDvrQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAACsklEQVR4nO3dv4oaYRSG8bMzGasxxcYFkYgELVN4CUGwsE4r6ey8sAWrQARNkSqVIAb0CkwQxNgkJuPijqYIaVUy345/3udXD4fj8CBTfMyYAQAAAAAAALh+N6de4AndmpnvYM6Dmf1wMOcsXWsAt51O50O5XL5LOmg4HH5ptVrvzCxysNfZeXbqBZ6IX6lU8tVq9VXSQYvFYmpmnoOdztLV/jAchwDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQg7tCbQn0zK6SxiGMvNpuNk9fgRlHkmdlLM/vtYl6Kdmb27dBFe29Ss9l80263P+ZyuZ2ztVJSLBaDTCaTOILVarWdz+ePLnZK03Q6jWq12ms7EMHef4AgCHalUinI5/NOl7skYRh6YRhmTr3Hf3i0I14GzjOAOAIQRwDiCEAcAYgjAHEEII4AxBGAOAIQRwDiCEAcAYgjAHEEIG7veYD1ev292+2+z2azF3UgIooiv16v1wqFwvOksyaTyXQ8Hg9939+62C0ty+Xyxsx+HrrumBMzQfJ1Unc3Go0+u/h4dK/X+9RoNN6a2S8He6VpZ38Phex1zNfDN8l3SZ2znT3P+zfvEu/DQTwDiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQNwxL4q8SHEcWxzHiedst1snH6E+V9cawKrf798PBoMw6aDZbPbVzB4c7AQAAAAAAAAAwCn8AaT2aN3xjkS0AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAASZQTFRFAAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3AapoQAAAGJ0Uk5TACNSalkfAUq97//ztTQCVdz9oEjis0TZTdvgEYPrDo0YlPwbnBWb+RSkGaj+n574BFhPdHcqWpHpgvTV6OrkqUDF+wY1lc7RSQcMVBOPF5OF9xL2l/qI9QsPiYaSFkfDQwmdULeGAAABTElEQVR4nO3X11LCYBCG4bUQdVEiih0BwV+kGWwEsKCxR1GxYS/3fxNKcEYED/PFk30vYJ/Z2aMlkiRJkiRJ8qiu7p5eH5bQ+voH2D84hDQC+jB/FRxBIqMhdhrDEdr4BKMRbXKK4Yg+zWhkJjzLaCQSDTIaic3FGY0k5lv3wCBqIcloZDH1ew8Eks5kGY0kch2G60h6yegw3EEC+WYa0XL7PVxCNLWyuua0TlT4w3AD8ZnF72EFHFIqMx7ZYA+QTS+QoiCCCCKIIP+IbHmBbHuBVOIeIDu7Fh7Z2z84PHI6xiGkndjN8kSnSRDS2lm1jEfo/MLCI6Qua3iE7FK7gnjnrsxrPEKxm1s8QuqujkfovmTgEXqoGniElFnHI6Qea3iEIk8WHiE7auERUs/+hpHNIBF6CTd+vZAORch+zb2l3j+wiCRJkiRJ0k+f209ZMu94IFwAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/controls.48d606a7.png\";","module.exports = __webpack_public_path__ + \"static/media/cancel.c86e6d50.png\";","module.exports = __webpack_public_path__ + \"static/media/ok.9f7859a2.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open1_icon.708a178c.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open2_icon.7eab34c8.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open3_icon.62a52306.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open4_icon.ebf6aa1a.png\";","module.exports = __webpack_public_path__ + \"static/media/save.a8a3380b.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/fan-0.ecf2abed.png\";","module.exports = __webpack_public_path__ + \"static/media/fan-1.12a5ba3f.png\";","module.exports = __webpack_public_path__ + \"static/media/fan-2.8e4f1b4e.png\";","module.exports = __webpack_public_path__ + \"static/media/fan-3.aac50a87.png\";","module.exports = __webpack_public_path__ + \"static/media/fan-4.49bc8b5d.png\";","module.exports = __webpack_public_path__ + \"static/media/air-flap-0.132a598d.png\";","module.exports = __webpack_public_path__ + \"static/media/air-flap-1.601a9fb3.png\";","module.exports = __webpack_public_path__ + \"static/media/air-flap-2.df0beb07.png\";","module.exports = __webpack_public_path__ + \"static/media/air-flap-3.135cfd4d.png\";","module.exports = __webpack_public_path__ + \"static/media/air-flap-4.c75dbd28.png\";","module.exports = __webpack_public_path__ + \"static/media/scenario-edit.1b81664a.png\";","module.exports = __webpack_public_path__ + \"static/media/clear-2.460bc19c.png\";","module.exports = __webpack_public_path__ + \"static/media/cancel.c139061e.png\";","module.exports = __webpack_public_path__ + \"static/media/f1.dddb1448.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAHP2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMi0yNVQxODozNDo0MiswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0yNVQxODozNDo0MiswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGJkNTU3OTQtNDY2Zi03NzQzLWE4ZDUtMDA4N2Y0MTBlZWUxIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZGM1MjU1YmItMzc0YS03NjQ4LTk3N2MtZTUyMzc4ZjEzZGRkIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ODJjOWFhMGYtMjdlNS04ODQ1LWEyNWEtZjM2NTg2ZjA5MDEyIj4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjlkYWIwMGI4LTkxOTEtNzU0ZC1hMTI2LWQ5NjVhODA5MmFhNDwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjgyYzlhYTBmLTI3ZTUtODg0NS1hMjVhLWYzNjU4NmYwOTAxMiIgc3RFdnQ6d2hlbj0iMjAxOS0xMi0yNVQxNTozOTowOSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoyNGM0Y2I3Ni04YWRkLTFhNGUtOWFkMC0xZjQ4ZjM3Zjk3M2QiIHN0RXZ0OndoZW49IjIwMTktMTItMjVUMTU6NTE6NTgrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGJkNTU3OTQtNDY2Zi03NzQzLWE4ZDUtMDA4N2Y0MTBlZWUxIiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI1VDE4OjM0OjQyKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2lu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\"","module.exports = __webpack_public_path__ + \"static/media/cancel.c86e6d50.png\";","module.exports = __webpack_public_path__ + \"static/media/alarm-outside.911e9d72.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/ok.9f7859a2.png\";","module.exports = __webpack_public_path__ + \"static/media/plus.0ad74278.png\";","module.exports = __webpack_public_path__ + \"static/media/minus.8bc3a620.png\";","module.exports = __webpack_public_path__ + \"static/media/no-image.67015b05.png\";","module.exports = __webpack_public_path__ + \"static/media/alarm-home.46c024cd.png\";","module.exports = __webpack_public_path__ + \"static/media/abort.75e219e6.png\";","module.exports = __webpack_public_path__ + \"static/media/home.1f57313f.png\";","module.exports = __webpack_public_path__ + \"static/media/outside.1075b8f4.png\";","module.exports = __webpack_public_path__ + \"static/media/time.c55756f7.png\";","module.exports = __webpack_public_path__ + \"static/media/left.532229d2.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFwmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI0KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NGI2NWM2My01MWFlLTM2NDAtYTNjOC0yM2IwMzc3OWNjNzQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphNWVlODVjYi0xNTcxLTFjNGYtYTk4NC0yOWFhMmYz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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAEAQAAAA5p3UDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAAAGAAAABgAPBrQs8AAAAHdElNRQflBw0MHhgEIHqxAAAD90lEQVR42u3dv04UURTH8VFBsTHGGKEAfA7o0MrGaGKMghTia9ha6BOQUPEC2thgrYQoCglKg4qJlRY2WLDr5v4sRmdB+TO7e2fOufD9PMDuOff322UXdocsAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6II0Nia9eqXw86e0vCxduWI9U8c7hP5+6f59hSdPFKanFfr6rGdKgnT9utRoaJdWS5qctJ6t9A5hcFDh3bvdOywuShcuWM/mmnTtmrS9rT21WgrT09YzHrpDuHRJWlvbc4WwsqJw8aL1jC4dHH4aJTgw/MLqKiX4R7nwfZegXPh/ra9LQ0PWM7sgjY///zO/RAkcvSZQGByUPnzobIe1NV4TZFmmsLTU2cH5KkF34f8R5uas5zeXv9Xrlm0JegpfkvTtm/X5m1N486b7A7QrQe/hS9LmpvX5m5MmJvIQ0ylBnPAlhYcPrc/fBWlyMpUSRAtfz57x28EdpNu3pV+/ei5BhW8RO3urd5DnzxXOnLE+c3c8l4Dwa+KxBIRfM08lIHwjHkpA+MYsS0D4TliUgPCdqbMEhO9UHSUgfOeqLAHhJ6KKEhB+YmKWgPATFe8PSF++9B7+06cK/f3WZ3LsxHkm4JGfNNsSEL4LNiUgfFfqLQHhu1RPCQjftWpLQPhJqKYEhJ+UuCU4uuGftB6gOm/fZtmPH1FuSvPzJ042GtYboSSFy5elzc14T//NpnTzpvVeKCEP//PnuD//KUESFEZHqwmfErhXffh/tVrSnTvW+2KH+sKnBO4ojI4qfPpUX/g7S3D3rvX+x5rCyIhN+JTAXB7+x4924VMCM/Ge9hcWpJmZ3j9Z1Gwq3LplfS7HQrxH/sKCdPZslkX8jKGDaxYdaQrDw7HDL26bEvimMDwsbWxUEX5xH9FKMDVlfV5HijQ0lF9csbrw2/dFCVypM/z2fVICF/ILMtUbfnHflMBWvKtxdR5+MUO0byDdu2d9nknxEH4xCyWol6fwi5koQT3yL2q+f+8p/GI2SlCtaOGHFy9ih1/MSAmqkUL4xawOrl52pCicPq2wstJz+BU87e87s6am4nw1fWLC+vzNSQ8epBR+e+4IJQhLS9bnb056/Di18Nuz91qCrS3r8zeXH2J64e+ev9sSLC5an7856dSp/J8qphd+e4duStBoSOPj1rO7IJ0/L71+Xfrsani13/kOnbw7aDSkGzesZ3aldAkcht/eoUwJmk3C38ehJXAcfnuHg0pA+IfatwQJhN/eYa8SEH5pCufOSbOz0vfv0tev0qNH0sCA9Vwd7aCrV6XlZWlrS3r5Uhobs54JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk6TekUzckHIKQVwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wNy0xM1QxMjozMDoyNCswMDowMC0/55oAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDctMTNUMTI6MzA6MjQrMDA6MDBcYl8mAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABwlBMVEUAAAD//wD//wD//wD/vwD/zDPVKyvbJEn/2yTfIEDf3yDm5hro6Bfq1RXr2BTw4R7x4xzz2xjz3Bf03iHr4B/r4h3s2Rzt2xvt3Bru3Rrv3hnv3yDw4B/bHTrcHDndHD7x3Rzy3Rvy3hrgGT7s4Bnt2x7u3B3u3hzw3B7x3xzt2xvt3Bru3Bru3R7u3h3v3xzv2xzw3Rrw3h3t3Bzu3Bzu3Rzu3Rvu3hrv3h3v2x3v3B3w3hvu3Rzu3hzv3Bvv3Bvv3B3u3R3v3Bzv3Rvv3R3v3h3w3h3w3Bzw3Rzu3Rzu3Rvu3hvu3h3v3B3v3Rzv3Rzv3Rzv3Rzv3hvw3Bvw3B3w3R3w3Rzu3Rzu3Rzv3R3v3hzv3Rzw3Rvw3RvdHT3w3R3u3R3u3hzcHDzu3BzdGzvv3R3dHTzv3Rzw3RzdHDzw3hzv3R3v3Rzv3Rvv3R3w3hzu3Rzv3Rzv3Rzv3Rzv3Rzv3Rzv3hzv3Rvv3RzdHDzv3RzdHDzdHDzv3RzcHDzv3BzdHDzw3Rzv3Rvv3Rzv3Rzv3hzv3Rzv3Rzv3Rzv3Rzv3Rzv3Rzv3Rzv3Rzu3Rzv3Rzv3Rzv3Rzv3RzdHDzv3Rz///+fE8FRAAAAk3RSTlMAAQIDBAUGBwcICAoLDA0REhUWFxkaGxwdHh8gISMkJSUmJykpKiwuMzc5Ojs8PT9AREZISUpLTU5PUFRaXF5fYGlucXJzdHZ3eHl6e3x+f4CBgoSFhoeIiY6RlJWWl5eYmZqan6qys7W2t7vCw8TGyM/R09Xa3d/g4uLj5OTl5efn6Onr7O3w8fLz9PX29/n8/f7CEI95AAAAAWJLR0SVCGB6gwAAAl5JREFUWMPt1mtfEkEUB+Bj5iWwNEsIshAzozI0JIuumpUWC1rZVa28dTHFLE0jizRTMxTdnQ9cwK7snJnRyX2p5+Xs/5n9DTOcHYDd2qHl6S+05me0d0XWvGZlhoy3MIPnu5atFzJpm6va5/O6ipn3a9qXY5vTvJPNL2MJlWRK/Tbac937Hz4/0BsnuG5L+4ooqwm5I+uPPF/hcBKW9CVPUzxO2iV9KM7l5K6ct/chlxpWQn7/JaWF8Xt5vmqC5r+UUtH+h8cOsb5unvZDB0HkFUKmarG/uEpxNQJCH0kHlhpoH6A9UcS+PZtI1pkj9cgPiX3UyCycykUq0foXxOvvyKVmHUZk/yciXgDtO82xEWM3B/D+l0l5Qp5kM0344A2LfCsKqoF05kCCCFeAzu9DnJws5o2SkKj/XGWi9wCcSWb0HPZf9f9PIxNNusGxzIz6sT+uzxhkoiuuzMnmLoH1cI2J3k+33s/cH5Hj4RFOxkvSwxdUNNwi8DDC3UaAZ5v0H7N3rKMJevQHBR+kPDxGftxuPDk6L+iflHf8pv2cK/fMt2SMtgl93lt0BM6a//Nn/nD6P+XxFqSCdEtqTDLfH/r9XegEBXFT9CXQ94/yh9/Q/udpti07x2+JfPmDRdp/rOR9GAoYfzN8ub7hSsf7NXR+um1b3F9038n/0E01wZb+xwm6f5pqtcsu6dt4PNXnBEkf4fDpaAXIerZLTHef3wPSHmqaX8U2um0i1nujRu7+aHj9muf2/rvmuW0yV8JB3c94tnkDLXzNvH87M1jwmRkseYB9gx7YrR1afwFR8xxOBvQjRAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAACPElEQVRYhe2Xv4sTQRTHv7M/sjtoeRsOAqlimsPslQtBj2CRxiIYziaNnaQPJJBSJAFbkfwBNnsTzUHK2AkWEiy2OhUsPIOlVcjPnbHwLuxuNuZW94qDfOE1897M+8ybYX4AO8WrMqX0MwAOQASMX/jK3g4kzuSyLJ/U63XJNE1IkuRzcs7hOA7a7TZ3XfcxgDcAIMeVnVJ6WqvV9qrVKkaj0ZqfEIJSqQRd18lwODSXy+XLuHJfitu2LRhjwdKvjDEmbNsWhBB+2UmJEYAEyh5cXgEAkiRBCLHyRQVIAngK4C4AaUvslRQFIKOq6sd0On3LNM0EIev7N5VKha5/LAC6rr8qFAq3+/2+Ksub9263240EcOUyLhaLe5VKRe31eiCEhFrU5ECECriuq2ua5m06DoSwyNlDAAiALIADbK9O9OluAdATicTr+Xxe3hh9DVoBKIryzDCMh4wxZDIZhO1yVVUxGAxiBViVWVGUJ81mU2u1WkgmkzAMY82KxWKsyQFPBabT6Z5hGBiPx1A04EHbH/j+OTCbz64PwCvjANg/9LftHwLSrzgvzz+K5TjdAewAdgA3GsB7EAnOOQGAn5+ADy/8gd/eATnT9TaJLWOH+jnnIIQIIYQfgFL61XGcbD6fx/mP79DOE76Od7IzHN0/gmVZYCz86rcsCwD+6u90OtB1/ctkMgHgf7mWZVk+aTQaUi6XW/tY/K8CH5NjAG/D4sqU0rOLd/vG9/2/GCGEU0rPADyKdWY3Xr8Bkj7CLsBIlScAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAACWElEQVRYhe2Xz2sTQRiGn5nNJjvVQ8GuFAoFIdZiMdtbA1VL9OqhGPTSHrxJ74UWchRpoNci/QNESBdFCHjyJvQg1UOkUC14MJYe20tpmnRnPPQH2XSLRjeikBeGhfm+4X125mP3G+gqXuWVUp8BDZiWoY9j+eYFIk5zy7JW5ubmpOd5SClDQa01lUqFYrGogyB4CLwEsOJyV0q9np2d7ZuZmWFra+tMXAjB5OQkjuOItbU17/DwcCku7xPpUqlkfN9v3frT4fu+KZVKRgihTxYlYgQQLdveerwGQEqJMeY01i7AZeAxcAOQP8n9JbUDkLZt+/3g4OAFz/OSQpyt34GBgcjzjwXAcZxnuVzuYi6Xs6PMAdbX1+nt7e0MQKPRuDU1NWVPT08fAbX41HaPnr7vdwYgCAInlUohpeBmwXDlTjj+6QVUy5faMo8CEMAQMEJMRdYOgJNMJp/X6/X8udmdBEgkEk9c173n+z7pdJqoQrNtu6MAjwqFQmphYYFyuRyZPDY21jmAWq3W57oue3t7JFJwtxhOfPcUDuoHnQNoljsC/aPhuf5RkDtx/jyP9FcqvQvQBegC/NMAzR8io7UWANsfYXUxnPj1LWS8AK0Nq4uw/SEc33wDUu40T5koQ601QghjjAkDKKU2K5XK0Pj4ONXv30hVk6GFV4cOmLg9QU9PD7u7OySq4Y7+2nCD4eHrZLPZc5uSbDbL8vIyjuN82d/fB8Kda96yrJX5+XmZyWTOXCz+VC0XkwfAq6i8vFJq47hvP7e//50hhNBKqQ3gfqxv9t/rB/hozrkxS7lBAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAACdElEQVRYhe2XT0gUURzHP292Z3eehWvkxoIgLOi6JO1482AmWxcPHaKlLnro1tmTwh4jXPDeuUNG7FKXhU5JluAhUmJD0IQO7ZIXST3I7B9mXgc1fLlB5mwU7Bd+DMz3997v8x5v/vygLX+VkVJuAB6gfgrv0MscHyD8LB4IBPLT09OGbdsYhqGZnudRKpXI5XKe67p3gee+AkgpN6amphKdnZ3kC/kTAChFJNJFPB5nfn5+w3GcJIDRbLI/keM4/bZts7i4yOrKKt8i77X4KlZYWFggFotRrVYTR+OCfgEA4mjV3UkYzepmbQ+e3QIhBEqpHzt/WoBLwH3gCj7t3mkA+kzTfNfb23vOtu2QECePT09PT+sALMt6lE6nz6fTabNZcYC1tbXWATQajdGJiQlzcnLyAKhL96u7B9fx8fHWALiua4XDYQxDcDWriF/X/Y9PoVy8eKrizQAEkAAG8fER/V0AKxQKPanX65lfZrcSIBgMPohGozcLhQJ9fX00O2imabYU4F42mw3Pzs5SLBabJg8PD7cOoFqtdkejUfb39wmG4UZOT1x6CLV6rXUAxxUdhNiQfi82BMaOnx/PA/2Vk94GaAO0Af5pgOMvIuV5ngDYWoXlOT3x8ytI2S6ep1ieg60V3d98CYaxA8D2Onx4rPu1vcMiSiGEUEopHUBKuVkqlRIjIyOUK18Il0PaBP2JGmPXxujo6GB3d4dgOaD5A8kGyeRlBhIDvF16w/briOa7rkfXhRqVSgXLsj45jgPofUEmEAjkZ2ZmjFQqdfK//oz6qTG5A7xolpeRUq4LIZq1VmcKIYQnpVwHbvu6sv9e3wF9PdorkkGuWgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAB3RJTUUH5QIWDy4Ii2+9kQAABrZJREFUeJztnF2IXVcVx//rTLSZfAxpqqWmmkgsacVqVHyprSWi4EfxQUiVvglKKxQsRatCQYSg+OCDggjqg4IPEiGK7aMPivUh+J1GQiSl0zS2NG3TpBmTJpk5/58P59zem+k9997MnHvPuTP7BxfucPdZa5+z9lp77X3WHimRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikbhWoukOXCvADPBuSZ+PiE9IeqekLZIySbmk85L+I+lxSYcknYwIGuru2gbYBnwNeBrIGcwV4J/AfcB1Tfd9zQG8FfgZ8BrgIcboYOAs8E1gtul7WDMAW4EfA5dHNMRyXgUeBDY0fS9TDxDA/cDCCo3R8ZRTwIebvp+pB9gFPMnoYWqQUX4FbGr6ngaRNd2BEfi0pNu0+owwJH1M0u2r7tEYaXVMtT0LfFJFP1edugI3RMQ+SX9Zraxx0XYPuUHSrXUJi4iQ9EHbb6pLZt202kMkbYuI61XvAnaHpI2SFmuUWRut9pCIuE71D5qNkmZqllkbrfYQIFR4R51bHx2ZraTVHrIeabtBUL3eIUkeg8zaaHXIKrOiukNMrhYbpO0esu5oxENsZ1mWeVg7oBOy6hzRI8mzHZJmsixbqlH3UJoKWR8Hdkq6IOllSU9ExKXljcYUslQlD7hZ0t2SMsARcUTSsZp1D6QRgwD7gS9GhCX9XdKnJL3BIIWDjGVi7yvP9u0R8VNJs5Jy4EtaDwbJsixUzF+dT98HVDjI5DwkyzKpWDTOlG0mPse2YVJf0uSznip9jS8Y22CQSdPEABiZ9WiQVtPUpC51R2nlaC3T3oFtVqK+St6yJKKROaQRg5TZVSdeV8btMu0d2GalXajQ1/mts6G5Pgxi+3JP8VrlwwaWVP9Wx6KK/ax+/ZopBwFlm4m/M2lkDomIV3v+3CTpzRVNz6moRKyTFyVdrujXFnXfleSSFmrWPZSmQtYLna+S5oA5SS/1aXcGmI+I3TWptqR/RUTf7ZCI2KHuGuSKpDM16R2ZprKsk+qO0u0R8baKdv+LiD+oGK118IqkJ/r9AMzo6uqWc8DpmvSOTFMGeVrS2fL7Zkkf6NcoIgB+J+m/NehE0p8kHa34fU7Se9U1yHMR8WINeq+JRgwCPAc8VRawZcA+2xsrmh8HfgEsrrJQ7rTtH0XEhYo+7Sk/RVWd/Q+g7vmrnQBh+wDdCvZTtisL2ICbgMcZXvFexQXgG0Df8h+KQfHtHvkXgf3jewItBLgLeLl8AEvAt4BKjy1H7+/LttfCAvA9YMsA2TuBIz3XHAXePp47bynAFuAxujW7x4E9Q67ZBfyE4ojBsFrfnCIsPghsHiAzAx6hW1mf2/7OoMGxZsnz/LO2F1ywZPuHtgcerrG9Kc/ze2wftH3S9kXbS3me57YXbZ+3fdT2922/z/bAGizbe22fcJf5QeFzTWN7zvZveh7GK7b3l69Ph1270fateZ5/xvYDtr9i+wu299m+eZghShnX2z5YGtOlQQ/YbnXxx1ixfaftUz1GOWb7QxPQO1s+/Nd6dB+2vXPculsNsAF4mCKzoZwbDgPvH6POWeDrwPkenaeBe8alc6oA5ijOD3bWGjnwV+DuuidXYDtwgOKYWycxWAC+SkVavC4BdgCHeoxiYB74MsVe12rlZ7b3Ar8GLvVkYxcp0uLKTGzdArwDOEhxpLljlAXgkO2PsoLjaGVau6sMUSe4enG5AHy3DoOvWYAbgR+U8d09hjlTGuY+2+8q54Gq+qoNwFuAO8sdgaM9Ru7Iex54aCVGHieNV1n0o3xIn5P0iIoTVJ0UFhW7xM+r2OM6HhHPqNiZXYqIzZJuKq+5TdJuSdt09Z7dFUmHJR2Q9MeqrfimaKVBpNdLOfcAD0TEvcCOnle6y8mlIjwNaXNC0s8l/TLLshcq2jVKaw3SoTwP+B5J96o4kXuLii37kS5X8cbx35J+K+kxSfOj1BU3ResN0sF2JulGYG9E3CHpI+Wn36r6KRUlqn9TEZ6OZVl2tk+7RB1Q/HeHu4BzvJG8nKynck0xlTuaZcXKoMn4UkS08pTtMKZ2E43qyvhxVMtPjKk1yIDK+Fafsh3GVIastczUekgKWRPC9qBKxtcBtvZbBAIREZtsbxtBHZIuTPoc4SBaFWvL1fmjKhaAw9iqYnuk35vBeUmjFLktSno0y7I/j9zJMdMqDylH/C2S7lilqN3lZxhXgO2r1FUraVJvGa3yEBUx/VlJRyakb3FZJX4ikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEYhT+D+BSjgivgfHOAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAA1jSURBVHja7J15dJxlGcV/mUmavUtaulBKWlsolkWoUDYBAYWKiF2sqEVUQERRPALihlqPIFX0gHAE/0DcABELCLRsYmVTyyZ7N9oCLV1pm7ZpszTJPP7x3DmZDplJmmS25L3nzEky88323e8++/umyMwI6DuIhFMQCA0IhAYEQgMCoQGB0EBoQCA0IBAaEAgNCIQGQgMCoQGB0IBAaEAgNBAaEAgNCIQGBEIDCoTQovBZ9h7FefzZcjmOOBgoAdqAViAK1Ov3QGgGUAFUSzkxYDvQ3EuvPR74OHAYUAnUASuBfwMvAC2B0N5FjU76vjrh24DVwBs9JLUI+ABwHnASMA4YADQAG4GBev3X8pnUQiI0AowCTtDtIKAM2KmTvBD4J9DUjdeOAlOAi4DTgJEJj5UCQ4BTgHV6/aU5dgl9gtDBUtA04FRgaIKvPRjYT3/vLanFIutzwOnAiBTHjZZleE1qDoT2EAOBScBRwLAkUzlayooB5cACoLELr1kq8/plqX54mmObZQ2a8pXMQiK0SJ91qIhNpeCpwCAd+/dOlFoBfAKYpYuhOs2xrcASqfPtQGjvpDDrFQDtSlJoMqnHArv1nPtTKHUQ8DHgHCk+HZkN8plPAq8DW0OU2zvYBdwOHKNItzoNqR8BqnTMbUlK3Qf4JDBTxxV3YmafAeYDDwIrZNbzOnIsJLwDXK6ccFea4yqlvM8CM2ReUfQ6TWb22E7IbABekukuCDIBigp0fegY4EZFp+nM5W5gEfBXYDHwfuDTwPGqBKVCPfBfKfM+YE0++81CJXSYlLY6IY24GThRPjEVdgCvipSRqgDVpDm+EXgW+AvwKPBWN8iM5ErNhULovjKTHwQekuJiyhnnyicOSuNCWqTWYqUqqbBFyrwfeADY0MXPV6KLpFJpkwHvApuzrexCCIpGAWcoiDlMFZ1K4Fa8JPdt/X1KQrGhoxNe0oWga1GCz9wbMieq6HGAgrF6RcT/k2VoCQp11AKfUr54jNQV00m6QbdWqeOnIn1EN95ng8icBzwiZXUFA4BD8WL+6cAE3dcEvCJr8phy2Lb+rtBaYDpwNl7aK03wT7XAJVLHdcoNv4fXZKftBaktIm+hVPmgct2ukjkFL0PO0GeMJjxepfO7TqZ8fX8ltEima4YIPTyFudwf+Lryzp8o+LkCL8/N0uOdYafM4t1SUn0XP2Op/PlMVZkmJpEZT50OlGqXAZuyodLiPCRzgio40/GOSnGaY/cDLhDhc0TqjxQAnaNIONLJ+8XwnmdXC/plwHGqNE2TtUg10RDVLWvF/OI8I/NQnaQZIjPaxXRmtvLRK/Bm91VSw9lSeypUA0coSo4A/+mE2HLgQ/qMJ3dC5m6Z23cUcMX6E6ERkXmeAozxe/n8kVJkGXCZ/OJVUt7FMr/FKRS0n4gfrjz3KV0UyagQiTOBM/ESYjqskBlfDKztT2lLJMEfndFF30eKE366zO9lCkJ+o7/PTeHn4hiO13Wb9HkWyecl+sNTFW2fTOrmQBxvKcJ9BHiZ7jXduwczy+UtambHmtktZrbKege7zGy+mY3Ve5SY2QVm9oqZ7e7kuVvM7G4zm21mI82syMwGmtl0M7vLzDZ38vxWM1tsZnPNbLKZlWb7nOZSoVHgaHxSYGo388dUSj0er/VergjzD1LqRR2kF4moAT4s/7sdb5tNlok9MU3hIo43gHuU/rxKDmaPclVYKNYJOhf4qEp7vY0GfErvYp3cqHzlJUqF0pUAtwJPAMvl24/qxGc2y1fegxfzl5Cjkc9cEBqVSi6Q39w3g+/VpMj1+3hfMwp8BviWPkNZmufWKzqt0i0dXgT+hteAl2arKpQPhBbhLaxTgfNV/8w0GqWYy4F/Keg5S0WJ46XU7k7G7xSBd+CttpXkuGea7QZ3Cd7LPAoYm6X3LNeFc5Wi6PhoyvVS1q5uvm4r3gC/Ay/o55zMXKQt5coZJ5K+MZ0JMz8Z+JlSkLvxycBW+diTdX9XsUNk/lmpyTvkSQM8m4QWyReNVh6XbetQhrfffqhI+DaRsRMvtB9N+kZ5opl9SgHQAryFlzeIZPm9amRyy3NYXjxI/vQrUu7TwNXA43St09IIrFIEvI08QzYVGlWuOWYvzVsm/PghwKVS5k34iGY98AOZ33QjKlWqbG1UerMCr9v2O0KLZWr36SRdyBZqpdIq4JcKkObKF56QptBRjhf0qxQELVSe29DfCB0gQofr93z47gcpKCoTmc/j7bfLlNoMTeGWyuWPi6XmqIKkhv5GaFeS9GxjBD6/W4qPsSwBfiXSTqR9EVRHmIC30hpUTMi5UrMZFJVKCQPyjNAifC3oecC1UuUSKXUePr/UluYijTfkZ+PD2xX9SaE9qcpkmtQavD1WrOBoJT6vVImPmdSmef5YPTeG13V7UrAoCEKLRGY5+b38YhQ+vVCJj4eulhnego/EjE9xziIidYa+52B8nWpjtr9ANk9uRR4rNBFD8Wb3tfj4yhopdT6+lDBdeW+M1Hwa3qWJ9FVCTeqspDC2iBkqUm5QzroJ+AW++u1V0ndTavHmw3F4VazPKnSXkvpCWfE2RPnoXLyZsAn4tQKl5WmKCVEpdYJMeHFfJXQj8CZ5vi1MEirxKb+f6+dWfE7pDgU+qZrYLQqOYmS5N5pNQjfoRCzMRbDQAwzC92G4Gh+V2SZTfJuKCcnfpVlpz0u6iLPahYnOmTMnWxdNDF+RtQqfUhiThzlpuih9mMzoFnyvhaUypxF9j5jIfhFfhvi0ouSsjqJkemKhAu99NuLDWkb7Ap9L8eGrgQWk1nfxXur1+j7xgbSjVVHaIkIXk6OifSYd9lCZqskKhh4H/qEv+ZL8Ukx5X3UBkBlfB/OCVBfBy3xPKLUZrPs34hPzOZkrypRCx+JlsOm0LwNchQ9S3aigoVjq/SY+LFaTp0Qa3lp7CLgXeA4fpI51YJYj5HBALJMKrcGn6qbIV6IreJhO0E0KHpYpgQdfMTY4DwmtwycH78U361iXorhguSYzk4TW4XM3iUsA4oXsr4rYq2WyVuL9yF34nG6+KDWGr5GZr9siRep5vUI6U2nLW7qin+G9C3/GA1/AZ2XjTeJVSgVuYc81JbnEZvnHuDLXUwA7oWQ6yh2HD2VNVdUkEWvwKfMfK2GPKJ35GnAhnS87yCTW4ptmPCQytxRKGJ6NQev9pcZZHZjT9TpxVyoliIrU83UbTfZrv2tF5J2KausKKK3KaGEhbs63K9Svke8cknBMtfK3WqUy25QevK4U4BCyO+GwUhfYffKZ2ykwZIrQSuWf8b3a6/HNnKrlQxPzzipFwgeI+DoVIpbr5wF4+S2TSjW5gHn4vO2zurAIhHrqMUsR6xSZ1Q2KYl8UmaOk1DhJ5bpvf9o3mGjEy2s78GGuTEa/y6TK+bqodlGo6OUFp6PM7EIze9rMmrTA9jEzO0GLe9EC2u+Y2TIza0taMFtnZg+b2RE6NmJmQ8zsIjNb2cHxPUWTmS01syvN7MhcLNDt7VtvKnQUvtZzOt7cLae9NzgOX/+xmvZNmUrkP4cmKLUUn8LbX8evUQHiDUWaE+SHe2p+Y1L+8/ji3AV447qZAkdvEjoR3+PgDPZcIxJVKfBgvM65QqS+gNd1R+ELmIponz2qxZcdrlWgslu56nq9zz5dINWSCGyRL1+Dd0uelL98FC+mt9AH0JuVIlOAU5oi4p2M7yUUUSTZCPxej39D6itJ8KlH4tvUFOFF/R16Hrp/Eu3tt1bdTOTt1uvv1sXToAh6k/zyEl0s60RwK30EvUnom1LgZhFb1AGphwLXyMz+USf7VinnS/hUQJykCv1dITN7p4h5QIWIC6X8VkXGDQlK3CLyturzNOrWpGPrFMVup0D2wc0FoXX4ENX7REB1CqUeqEJCG971bwbu0s+B+OLckgSfOhmv/9YBD4u4x2V+J8mkN0iN8bnYRl0kjYpY4yMhLboAYn2NyExFuZjZSWb2WicRaczMVpvZd82sPGH7mRlmtkBb0yRHv9eY2YGFHoUW2rY2ZYpQOyv6Fyn6vUIm9lqp6X6ZwhJ84q4sQdltdL7nbb9HbxJag/9Dm7NEaldSiyH4NjNNeOO7EZ84L9fvk/Q6SxWZvhsoyzyhRQpOPo8v2BnPnhs7xf9l44AUJO9U2jJSgVWbfOV2BVFRvB33HAXU9cgVetptiaqAPgvfdPHwpMcbVRTYpuLCiIQotoX2PfFuUvmto4ulNCEtCcggoeVS0Cx8kc64JAU2473E21Xsno1Px41WlPm2Hv+Tfg/IMaFTVRmaindEoklm9GV8ynye1FiFbxp8iNS2XOnHxkBD7gmN4us8ZrLn/9pEOeFC4LfyhW1Jzxuu+5JnjgJyGBTF8JrsdhEUT1O24TXaGxStJk/HtZGlzfSDQvcepfgy9i8qGNqB7+B8M74xk4XTW1hpSzPwOwVC9XgT+zp8DieQWaBpS1ypZ+JzQEvDKS18QiGH/7wt4L1E9AYCmX2M0IBAaEAgNCAQGggNCIQGBEIDAqEBgdBAaEAgNCAQGhAIDQiEBkIDAqEBgdCAQGhAIDQQGtA38P8BAMLpmAkuRpoFAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/media.5d190925.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASAmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzExMTY3ZTItNTU1My0wYTRlLTk2MzEtODEyY2Y1ODY3NTJhIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ODBkNzllM2YtMmU1Yi1iMjQ1LWI3NDEtMzQ4Y2M1Njc2NTQzIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTE2IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTE2Ij4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+MEFGNEY1QzUwMzAyMERCMjcwOEU0NTI1RDBDRjc0MUY8L3JkZjpsaT4gPHJkZjpsaT4zNTkwMDI1NjhFRkFBNTcwNzgwODlDODA4QTkwQUVCRjwvcmRmOmxpPiA8cmRmOmxpPjQwRTE4NDFGNjM4MEM3QUZGQUE4QjRENUZFNUQ4ODk3PC9yZGY6bGk+IDxyZGY6bGk+NEU4NkFDMDRCQTI4REM4NEFDQzJFRUY5NEZENDNEMUQ8L3JkZjpsaT4gPHJkZjpsaT44Qjc5RUY4RTY1QjVFRkQ2NkJCMUZGQzk3NzhCMjBBMzwvcmRmOmxpPiA8cmRmOmxpPjkzMTQwN0I0RjgzQkYwMzFGRjREOUZGMzJBODFDNTEwPC9yZGY6bGk+IDxyZGY6bGk+OTZCMTYwOEM0ODRGQjFFRTdDMkMwN0YzMTcwMzBBRDc8L3JkZjpsaT4gPHJkZjpsaT45Nzg3RTBFQkU4NUZFMjFGOTc5ODFFOUFGN0Y3NUUyQzwvcmRmOmxpPiA8cmRmOmxpPjlCRDgzNzlFODM1NDJCODcyMDc5OUM4QjJBNkQ0NzBFPC9yZGY6bGk+IDxyZGY6bGk+QzEyQTU4REM1QjE0RkEzQzVGM0ZGNzlBMzM0NUU3RjA8L3JkZjpsaT4gPHJkZjpsaT5EMTI2MEVBRjg3ODQ0MTFBMEQ1QzMyNUM4Mzc0OTk0RDwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6MTgzMzBiNmItMjUyYi1hYzQxLWE5NzQtNWFhNDZjODE0OWQwPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDo4ODA5MDVFMEQyMUJFODExOUZBNDgxRTk2MzlDQjNDRDwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUU8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOkZDMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDphNDg4NjU0OS00MTRkLTRiNGUtODc5Yy0zNzcxZjg1Mzk3NDI8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxNzoyODo0MyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6REI3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHN0RXZ0OndoZW49IjIwMTgtMDQtMjRUMTg6NDc6NDIrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQjE5RERBNDQzMDhFOTExOTcwNUEwODVDQjU2QThFQSIgc3RFdnQ6d2hlbj0iMjAxOC0xMi0yNVQxNjowODoxMyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gaW1hZ2UvcG5nIHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0E3QzkwNDcwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjI3OjI1KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2ViODg4MDktNDExZS1lZjQzLWJmZDItMTIxODFiNjc4NTZmIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEzOjI2OjU5KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMxMTE2N2UyLTU1NTMtMGE0ZS05NjMxLTgxMmNmNTg2NzUyYSIgc3RFdnQ6d2hlbj0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozZWI4ODgwOS00MTFlLWVmNDMtYmZkMi0xMjE4MWI2Nzg1NmYiIHN0UmVmOmRvY3VtZW50SUQ9Inht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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAmCAQAAAAc/RGWAAACR0lEQVR42tWWQU8TQRTHfxwQbpbiQfkYtp9BUuFgtIkGqFwUi8V61mjCR4CoN+vFRKiVgx/DfoWSeBTc1hgTo9va/j10stnpzrRbwoXZ0755+9uZ+b8378HFHouUeEeTgJCQ73zhLetkzwbL0yBEjiekzvXpYEvULUSbFse0LdsHrqbFrdIxH52yxzKZaGaBAq8Iot8U0uCeMDCwR8w5PeapGGifx5Nxw7/XY+tyjSyfjGdl/GaHq3uR6mh2zSpv+qUYnt3L1OLtmrO85p4eKtuYKh6OEOLANZVDiICFqYBZI08uOdVIHHGNb9xK+BX5wfvY+w5CfEwmWYhoMx9ZZviL6HLb8rtLD/GHmVgQBYhwNCFLCPHGspURosedyHKPf4gBDy2/1wixYQNrCLEysu4dgywCsGZw5RGvAkLUbGMTIa54Ar1HkXWD23YII0TTNgaIn04dqwbZR8iTah1EYJtCxFdPaDyNbhhfmh0jwvTATZOQ/dGDj0YrCfRveZM+moAMklv2iXLf4B5Q8SIvu0Rxh03J4IZx50PecIWNK7DXLVwcuWb57SFEaXLq/UYM2LL8hshfMcslThAhi5Mvh890R5IMYJsuR7H3Ld+ll3dcX7NOTWctQU4QIu9yPDzDBXtgKtA5lYBnCNFhyeewYgI4HfI5QgxYPY8ymjGbFdXJlblvCn3ZU+jnKHNqVldNs5WVWCuyb7UiGZbZNzDRGb9ZW57DRLPUGmmW6n4p3CM3pp1ruOMuTdXdoBY1nAFNapSSSXaxxn9c4GmcbbgItgAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/scenario-playing.4a85c06e.png\";","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-open.82a9ce66.png\";","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-close.02dc0af6.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NjAxYjIxMy1iZDZhLTM5NGYtOTQ2NS0xZWU4NDY5NWEyZDYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NTY2YjkyZS03Y2U5LWNmNDgtOTAwMS1iM2ZhOTQyNGUxNWUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY2MDFiMjEzLWJkNmEtMzk0Zi05NDY1LTFlZTg0Njk1YTJkNiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTozMCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0OWQzMmE1ZS03ZWZhLTVlNDktOTM2MS1mYjkzYjVlYzM1ZWYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MGExMmYxNS1jYTgwLTU0NGQtYTliMy0yZDkxM2E4YmFjMTMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ5ZDMyYTVlLTdlZmEtNWU0OS05MzYxLWZiOTNiNWVjMzVlZiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTo1NCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMDFiZTk1MS02YTcyLWM2NGUtYmQ2OC05ZWQ3OGUxNzkzODIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NDI4ZmJkOS01M2ZlLWY0NGUtYjQzNy1lNDIzMDVmNzUxZTYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMwMWJlOTUxLTZhNzItYzY0ZS1iZDY4LTllZDc4ZTE3OTM4MiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowNjo1OSswMzowMCIgc3RF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\"","module.exports = __webpack_public_path__ + \"static/media/volume.69c36a8f.png\";","module.exports = __webpack_public_path__ + \"static/media/mute.344c50b4.png\";","module.exports = __webpack_public_path__ + \"static/media/play.81ecf2e9.png\";","module.exports = __webpack_public_path__ + \"static/media/program.0ce280fa.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjM3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjM3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzozNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowYzIxNDE2ZC05NzQxLTA2NGItODhlYS0yNGM1MWJjYzRhNjkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3OTUyNjZhYy00OTg3LTE2NDAtYjIy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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjI4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjI4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzoyOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MTdjNDAwYS03NWEzLTk3NDctYTM1Ni00NGI5MzcxYWQxM2UiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjMDFlMWUxMy04ZDFlLTkzNGItODU5ZS1jZWE0MDRmN2JhODMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMGE5ZmE0NC1lMGZmLTI3NGUtYmI1Ny05OGE1YTMwYjEyYTkiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozMGE5ZmE0NC1lMGZmLTI3NGUtYmI1Ny05OGE1YTMwYjEyYTkiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6Mjc6MjgrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzE3YzQwMGEtNzVhMy05NzQ3LWEzNTYtNDRiOTM3MWFkMTNlIiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI3OjI4KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2/wemgAAC2tJREFUeJzt3Om3VWUdB/DPuZcxQDCVFDPMWUNNQ3EATdEStExTyxxKMXXVqv6A3rZW71qrF2mtNMsxMBzRwiIcc0qlMDVzRBAERQYBJeD24rtP53LBJGWfuy/s71p7wb17n7Of/Xz37/ubnuc2urq61KgOOnp7ADU2Rk1IxVATUjHUhFQMNSEVQ01IxVATUjHUhFQMNSEVQ01IxVATUjHUhFQMNSEVQ01IxVATUjHUhFQMNSEVQ01IxVATUjHUhFQMNSEVQ7/eHkCbMAE/wih0Fgd0oX9xdGJ9cazDGryHtXgXq/Ayfo6nyhpoYztZBjQEu2NEcQzHDhiKE/EFDOrxmWVCzkBRkgaW4zu4tayBbi8WsgrPy6R2yiQPFBIGYLxNCfkjbsdgfKz4dy2eKXOg2wshTXSJHK0TkvpjqVhCT6zAVCGxo7h2g8hYadjeCNkcGsXREx1CXBOlEtH9pjUqhJqQiqEmJH6hMtgefUinRFbNfKRndNWr2F4I6SiOQZKP7CE5yAZ8RkLgSmBbJaSZbwzGpzCmOEZhV+wkJGzAyOK67ugqzvXHv9sz5GBbJKQDO+JAHI3DcTD2kuddJVn4yuLaJcXPn5AsnoS7o3ASHpacpC2+ZlsrnQzC/jKR4zG2+N0beBULi+MNIWSDWMNAkbK9MRr7FJ/7O6bjPsn015b9ANuShYyUIuKZmCj1q+fwBP6Cx7BYJGi9jd/4hszFIOyLLwqhhwnBh+JqKSqWSsq2YCGD5c0+C98QH7EQD+AGzBGZ2tKJ7JDa1f64EGcIuffgCiG2tKy9L1tIhzjncbgYny9+/1dcg9kiTf+vU96Ad4TIxViA83GyzNePi3PNa7cq+iIhDZGWvTAJk8VpvykV2rvwiBQNPwrWYz5uLn6+DCeIbC0ofvfGR7zHJuhrhDSt4mhcUPw7VPzEr3E/Ftl6ktIlwcCt+KRI4jnim+CWrXSf/6IvEdKQSOirOB3HSFfvHlyLP2N1CffdgHmYgSMknxlXnNsuCemU/OBYnCIStTMex51CyNPKTeDew1z8CZ+WcLoUVJ2QweIrTsbZUuZYKm/rVNwrSdvmGkxbG8slfD5VQuNSUGVCPi5W8WUhZASeFT3/A14UiWpX3P6u+JO3bWeE9Jfi3ymYIpq9HHdLXvGgWEU7E6iGBBMHiVwuK+tGVSKkQxKwMfgmjsNueAW/wzSxilXaS0ZnMY7TcG7x/9+WdbOqEDJAqrKn4ktSEHxHiLhLkr0F2ktEc1yfkXLMGeLPZuDKsm7Y24Q05KE/i68Ux554AXdIUvasNi0w6DGuDrHWS0U+d8frEtm9UNaNe5OQDil5T5Rka5xMxB0SQT0mSd669/uCEjG0GM+lsohumITV84SM0kLs3iCkQ8rdh4suf0XK3U9LBDUN/9JqErV7bDuLbF6Io/CWhNrDJcJaU+YA2k3IQNHhY6Q6e6Q86BppFK2Qyu1OMgkLxZesV77/GCBR1GQpkYzCTKldHS4l+HlCSmloFyENkYFDhYhJ0ghq9rIHCzn7yQMvlOhqjljLy1LoK0u+BhVju1hrne99+KnM0Xgp3/9DLKY0tIuQEfKg50tBcEet1YJdknStkESv2fUbI5L2lhQNfy/rahfaehreEAsdJznPRLHIqbhR/MWlYtWvavVWSkM7CBkiZY/viRytl6hpYPH/hTLhs8SPDNYiZIJY0sVSUJwpnbu5to6WD5di5eUS3i7Cr/AbKa1PLu49oBjfy0qWzjIJaYhlnCQPNUpC2GWyAGEHIWC6VGpfFWvoFEt4QKziYAk7D5U8Zbg4/z+Jn/kwE9QpLd/TirHtW9zzailWrhSZmiLh7kNCyEftsXwgymzhDpNo5bsSRc2WTHuiTMCjUjafLZ25zQ2kU4g7QEiZJFY2D1cJmYtteTTWEMvcW0Ltc+SleVysYpaUbk4Vxz5O/MaVsjVhxRbe50OjTAsZLSHtWJn0GfK2Nx33dCkSLvf+b/n64tpHhYTXpKwyFpeIbM2QCG1L3qx+koSeI1K1o1jbDVLJHSIv0SXFdS/Z2GpKR5mETJDIaSluk4mdUJybLv5gWbfrO2WBwn5SL+qUSZgvS3AWSA1pCb4tPfTvFZ+d6oOd7SAJty+XVSWrpfd+lUjp/tKFPEO6g3/Dz4qxlurIu6NMQo6SN/BO8RUnShX3GalPvd7t2sFiPWfKZO0tSdrbxfUzxZpekr75SiHseHmbF4jcbC4sbmAXkbtviXUtErm8RqKq48TyzpaIb4ZEWTOLn9uGsiVruaz8W4vPiazcLxPb1P0Bsv7pIiGtSyyC6Pth4nP2lkl6Qsv/7CgWdZ7kLS/YuFnVX972yULcaFn8Nk18wtri3LnSnl0kAcZ1eFKbyaBcQnaTCXpdIqRD5M1+UGSHvL2fEqmYVFx7vZDYKdHYRCHqa7Jeain+KW/vcNmEeZKQeKVW4tavuO/Xpcm1s9THrizGMFTKIxcKUc+LxcwScttd0ES5hAwT7T1COn+jJLF6ycZv3n6SNHaKr7lZ3lQS4TwlS3wuk1B0tjj3t6VptU9xbpKQtFyI3l+s4gyJrGZKjvGQWN6FxfmRktdcIYXNZXpxz0iZhIyQGtBh8tD9ZLK6O8iGSMoesrTmQUnImhHTSnGu18nEj5V27pPilxaI3h8pid3pIkMHiEWNL77jWglrX5NKwdfEVw0S+bpRa1F1r6JMQgZJkXCJ5AojRQZ6vn39i3FskMnsGb52CVl3y0SPkWTtafEXc8UfHCh1sj3F54wRi7xJrGO1EHaB+LMlQvQ0scS2bjt4P5RJyApZQXi7+I8LxIH33PG6UqxmiPiTOTZ1pqulbLFKEsXu+zmWSqAwSSzik5KfzJa/uvCoEHi5JJe7itXdJCT3Vs9lsyhzj+GvRZevlchog0x69y1kXeLIX5SI6RgJUXui2Vns1Fq93v075ouMrS3Oz8RPpGI7WiK4KVIkfFgc+zSRvMqQQbkW8kORqHXiO1bIpDdLH015ekZylSkSgr4qjn1x8dmGOP7J4peesuma2ma1+N+S5P1MZOhkyT2OFUu8Hb/QSyHtlqBMQro774USVu4r2foz4mCJZNxVnDsF3xdZ+Yvo/BCpLZ0pSdwsIa07hhafaS6QHiKh7g/E77wiEnWrkluwHxXt6ofMF9k6QHR+lpC0TqRsruQAAyRiOk98whpx+ruIH5klvqFn1XWEENopuclFEnWNKu47VaKx5j0ri3YRskgc74la5fQXtKxklej9G1ISP1W0v79I23NiRX+UpLD7G95PfMNB4vCP1orabhVfNkfyi8rvTmoXIe+Jpj8sCdtpEoEt0dLyd6Ws8aZERjuJxawVQp8tru8ZNu8mwcBO8jzDxP/cjV9qOfs+gXYR0iURzW1aCwYuEkl6UHwDmez5Whtien5HdzT79BPE4Q8QS5srVeHm+t9KS1RPtHPVyXsiHTeK5h+ntdRnto1laEukZaA0kM4S/7FaZG+6yNubW/g9lUK7lwE1eyMDpadxQjGG4SIt83xwBNRsDY8XKzteq651vSR9b+uDZNB7u3B3kF72xRJ5LRUHfIs48MU2rbY2N+7sKTI1RcolCySkvUKChD5JRBO9RUiHlDNOkd71IaL1L0k19hHJHZqb+wdICHuIdAoPFqtq7v+7wcY9lj6L3tyn3tx+0AyDj5PtYg1xzivFSrpE1oaIZQ0szt0r5fKnJArr82RQnT8cMEzC4YkSwh6i9QdiGpKBrxSruV0SxOf87wUSfRK9vR2hiZWyB+QVcezrJDvvLx3ARyWHeUwFehZloioWUqNA/Sf+KoaakIqhJqRiqAmpGGpCKoaakIqhJqRiqAmpGGpCKoaakIqhJqRiqAmpGGpCKoaakIqhJqRiqAmpGGpCKoaakIqhJqRiqAmpGP4Djq7v2eBuVB8AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjA3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjA3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyOTowNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MDZjZWQ2NC00Njg5LWQ5NDUtYWE4My00Y2IwZTEzNTQ4NDgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowYjVjNTI2My0zMWU5LWJhNDEtODU4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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjUxKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjUxKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODo1MSswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiMmE5NDc0YS1jMGU4LTFiNDctOTc0NC00NTM4NzE5ZTI1NzYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMmYzNjVmNC1jOTUwLTMwNDAtYWY5Ni1lYjEzZTQzMmM4Y2EiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxODgwOGIzZC1mODI1LWVkNGItYTViMy03ZTdiMTM4MmFiNzIiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxODgwOGIzZC1mODI1LWVkNGItYTViMy03ZTdiMTM4MmFiNzIiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6Mjg6NTErMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YjJhOTQ3NGEtYzBlOC0xYjQ3LTk3NDQtNDUzODcxOWUyNTc2IiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI4OjUxKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+BPxMJQAAAglJREFUeJzt3DFLG2Ecx/HfSS1oQXwF0kVXX4HQrdCla9HVyb1jwc3F2Xdg966FjoXSLu07sGunzu1wDrmYUzHoXcjzzcP3A8eRxxj++PUuiZFr2raNONZKD6DbDAJjEBiDwBgExiAwBoExCIxBYAwCYxAYg8AYBMYgMAaBMQiMQWDuBmkf2H51X7+cc59V3ZLk8BH3WQqPEBiDwBgE5tnI7/+U5NsiBlmis9IDzDM2yOckF4sYZInQQTxlwRgExiAwBoExCIxBYAwCYxAYg8AYBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBiknN/d9ra/OPZfSTXcTrd/0V80SDkfu/1Vf9Eg5fzt9v/7iwYp56Tbf03yY7o4NshGku2Rj6GesUHOu00L4steGIPAGASm8VLjxUx/8EeZvSfxCKExCIxBYAwCYxAYg8AYBMYgMAaBqe3zkPdJXpYe4gnuXUKwpiCvkpwm2Sw7xpM03TZbqORvWetJviQ5KD3IAD+TvE7yJ6nnOeQ4yX7pIQbaT7I3vVFDkN0k75JslR5koCbJh5sbFZyytjP5DXteeI4x/iX5ntTxpP4mkws8r7omqeOUVRWDwBgExiAwBoExCEwN70Oq4hECYxAYg8AYBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJzDRpwbEd5rHHiAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjE3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjE3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzoxNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjNGEwNTMxYy0wODg1LTg3NDUtODY2ZS1jNTkyMzhjZTI4YTAiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0NmExNTQ2ZS0zY2YzLTNkNDMtYmYx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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjU4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjU4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzo1OCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjNTAxMGJjOS1jZTJmLWVlNDUtODE0My0yNzM5ZTg1NmI3NzAiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1OWFlOTY0YS00Y2ZmLTE4NDEtOTJh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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjU2KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjU2KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNTo1NiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1YmVlZDFjMy1hMjUwLTllNGQtODBiYy03OTgzZTY0MjFmMzQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxMDMyNzZlYy01YzNiLTI0NGMtOGJm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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODoxNiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OTQ2MGE1Yi0xOTk0LTdkNDMtODQ4My1jN2ZjYmNjN2Q5ZGQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphMjI2YmNhNS1hMjk3LThmNGUtOTRm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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNDoyNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4ODBmYTkzOS1kMTYyLTZiNDktYjZjZC03YzA0NTQ0Y2Y2ZjUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NzdkY2I0Yy0zNTA0LTI2NDYtYTBhOC1jYzMzNDBiYTY0NmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiYmQ5ZWYwMC0xYjkxLWRjNGQtODAxMi1hM2ZmYThhNWY5MGIiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiYmQ5ZWYwMC0xYjkxLWRjNGQtODAxMi1hM2ZmYThhNWY5MGIiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6MjQ6MjcrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODgwZmE5MzktZDE2Mi02YjQ5LWI2Y2QtN2MwNDU0NGNmNmY1IiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vgZgJAAABm5JREFUeJzt3F+MXVUVx/HP/O20jLRIgdKItkJETVAjVDBGYpSgRENIDA8QjA8EHkxMNL6o8U3fDE9GCPCA8V0egAcJGsBIgpqQ8iehVv6VpkMBaQdaaKfz5/Cwzsm9LTSTuXPPvvtM9jc5mftvzt53//Zae+111rljVVUp5MP4qDtQOJ0iSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDM6JIg45jGhfge7sEhVGcc+/E7fA3nYnIUnR2ULgkyiXPqYwWHsQ/v1u9XeBMv4qgQ79z68xOpOzsoYx2oy9qGq/EdfB2fr19bbeYv4Aiexz/xd/wLyy31cyjkIshEfWzGdlyOr2A3LsOluKT+7LIY7PfxBv6D/9bvfRlfFW5tFlPCCyziNbyEV4Vbe0FY03s4hSVheSNllIJM4gJ8Bp/DTjHol2JXfWyqP3tSDGhzHKr//q/++7ZwWZ/CZ+tz7MbF9Xl218dYfb5jOIBXhDiHcRAv168fMSJxUgrSLMg7cZEYoD3CEi4SM3qTmNGVGKwDeF1YwDN6a8ZJMevPNmgTwjpmhMV9Qbi9XWICfFqI11jPKWEpb+Mp7BUCHcYc/i+Rq0shyLSwgG+J6OgbYuAn+o6GI/gH/ip8/pwYiGUx+IPO2vG+tiaFBV2HH+AaIVzDUl97x/AYHscTYpK0OmBtC/JN3IUrnR7RrWBezLy9QoS9wgXNixmbghmcLyxoD67FFfiEsNj+Pn8gJsrPhPW0Qtsx+jbhJpaE39+K88TM+zWeFW7hkHAdg9K4uhNr/L+TdduH8DT+gh24Hj+p+9pY6Q7hXmfX0c9VaVuQZ/FbET09hx/jh2K2PSSipPWyE7eJAOFuEUUNwnGxwO8XbvZHQpA/iXXlS0Kc1qyD9gU5iHvrx0tiYV0Rs3nzEM4/g5vwi/p8/za4IP1M643NM8JV/U2sH+ux5FVpW5DK6evBjF7oOejueUpYw1Z8V7iWC4W7em/Ac55Jf99mxSRKsq6lzPOMi8FsBBk0mrgKvxdr01Y9n97W7J1q4ZxnJXUuaxgh3Ri2iL7vE369OW8bIWPSnXOnMqE1z+Hnwq0cxO34af1el5KlH0sXBTmOJ/uevyoChi5+l4/Q+RklhBhb9VMdYSMIMqEIUmiLIkhmFEEyowiSGRshVNyil+oYRn5spKS0kLYuic7qhb6tpsZTsBEs5BGRJq9EtrfTbARBntYTYuRVI+sltSBtJeraFCLppjN1lLUoRFkRtVW50l+jtdbLwusitYUsiC/aXLvYJL+0R6VXdULiidOmIPfiHb0vuCiu8E2JC0u/ElUnOYlSCQG+iE/Wr90mKiln9C49X47vt9GBNsuAzjzxihj4ZvCX68e5bU4by2j61VTVn9nPViZRmxZyRFSjNwVui6Ja8Tzho/eL2TjdYh8GYVGUL10iNpxzolSpKaabEYV27VBVVcrjrqqqFqqqequqqisSt72W4+aqquaq4I6Ubad2F8eF+S8J68mVo3oFE/MpG04tSLMwjss7zdHUHpO4n6nD3vGzPF4LF+MGcWfUSb3gYaJ+PifuGZkf8PxN38b6HicjdV3WMNgjCri3neX9efwRvxlSe0npYi7rhF4oekzcLzIhIrkpEcXdIfZAfxDrVWfooiDNbn8BfxbZ3imxrzkfd4p7UG4RhdJHR9LLAemiIM2acUrczPlo33uzotT0GlEV35m7bxu6KEjDDG6sH08JgXbg2/Xzl6S78WdodFGQJvqZxq310c+KuPXsfrHv6RRdFKShEhHVO8I1jYsFfE6sLQ/q4AWrLgrSrCELeEAMfFO9uCwW8QMSX8cYFl0UpGFZJCifGnVHhkluqe+1kHv6ZSC6LAj5XNgaGl0UZLNegnLLiPsydLooSP89ip2Lolaji4v6XvxSpEkeHm1Xhk8XBXkT97Xcxsh+ImlULqvZL+TKCb0scVJxUgvS+P9JcaEpV7br3Z+e1IukbKy/BKjx/8vyq8s6IerGttevbdgrhmMi3VGJVMeuhG2vh/dTNpZS/S2i1qlrgcQFKRvL5UcwCzVd3BhuaIogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTLjQxUifNbR5ASfAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjQxKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjQxKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNTo0MSswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphNjhhYmMxNi00Y2JlLTEyNGItODQ5NS03OGU1ZTUxYTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyZjc1NWRjNC1lMzQxLWQ0NGQtYjUw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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjU0OjQwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjU0OjQwKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMTo1NDo0MCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozZmQxZDk1YS1iNDk3LTFkNDEtYWZjMC1iYjIxMWNiNWUxNmMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkNmUwNDZkNS0zYTEwLTk2NDEtOWRi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\"","module.exports = __webpack_public_path__ + \"static/media/setup.2aed5ff7.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjA0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjA0KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzowNCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNzI3NjI5Ny0wNGM3LTdmNGMtYmVkNC1lZGFiNWQ5NDE0YjIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NWJlYWMzYy1lN2FlLTUwNDktYjZh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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjIwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjIwKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyOToyMCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiNTU2YTBmOS01ZTBkLWQwNGQtOWE5OC0wZWI0NDc4MmYxMzciIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODU2MDMwNy00MDZiLTJiNGItYTU4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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjM4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjM4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODozOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4YTJiZTZjZC05ZGJlLTM3NDUtOTZmMy1lNzViMmU0ZWI1MWUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphNjA1NjY5Ny1iNTRhLTI1NDEtOWU4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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHJWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGRjZjEwMzAtMzIwYi1lZjQzLWI1YTktYTI3MjQ1MWVjMmY1IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MzhmMjJiNDMtYTRlMy1mODRkLTljNmQtMzcxNzEyZmVlZGM2IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NjA1NTgzNjctMjQ5YS1mMzQzLWE2ODctNWY0YzYzMDY1YWY5Ij4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+RTg5RDM5NTE1MTRFQjI2RkMyQkEzM0U5MzlCQUJCRDg8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MDU1ODM2Ny0yNDlhLWYzNDMtYTY4Ny01ZjRjNjMwNjVhZjkiIHN0RXZ0OndoZW49IjIwMTktMTItMjVUMTU6Mzk6MDkrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwZmVkNDItYjE4Zi1mZDQ5LTg3ZjgtYmU1NjFhOTI1ZDE2IiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI3VDExOjEwOjU1KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBkY2YxMDMwLTMyMGItZWY0My1iNWE5LWEyNzI0NTFlYzJmNSIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI2OjM3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI2OjM3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNjozNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiYWQxZGQ2ZS0xMzY1LTkzNGEtODY1Yi1lMjg1OTQ3ZDg5ZDQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOWZhYzU0OS04MzYwLWFjNGQtODY0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\"","module.exports = __webpack_public_path__ + \"static/media/doors.f649da87.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjIzOjQyKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjIzOjQyKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyMzo0MiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmOWUyYjE3Mi1jNTA2LWIzNGQtOTZmMC0zYWU1NjNmMjY4YTAiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo4MjYxOGY1MC04MzYxLTVmNDUtODgzNC0xMmNhOGMzN2M3NjUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphNGJlMzQ5ZS0wMmM0LTk3NDUtOTNjZC1hNGEyZTZjNzczYTQiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNGJlMzQ5ZS0wMmM0LTk3NDUtOTNjZC1hNGEyZTZjNzczYTQiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6MjM6NDIrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjllMmIxNzItYzUwNi1iMzRkLTk2ZjAtM2FlNTYzZjI2OGEwIiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjIzOjQyKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+sul1NQAABbNJREFUeJztnFuIVVUYx39nZpypcSxKu0EJpkRlZSZZdpEhKA2KsjLTsnoICaGHsJCoqLBeIulmFl3pqSyih3wIokiMLiB5IXtQ8WV0Mi9To5ajOPPvYe3D2Wd0zsWz99nfzu8HC2avs/faa6/f2evbe611piAJxw4tWVfAKceFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGMOFGOP/IORq4G1gHlDIuC4N05Z1BRpkAvAUcDswG9gDfJdpjRqkkOO1vWOAN4EHgNYo71fgEWB9VpVqlLx2WeOAFcBDlGQAXBXlT8uiUkmQRyETgVeBB0f4/DrgdUJsyR15EzIJeJEQwCtxPfABcFPqNUqYPMWQccAbwD3AqBqP+Q1YDKxNq1JJkxchZwDvAXfH8o4AA0AXpTv9EDAEdFJ6BN5IkPITYP5i89BlXQB8TLmMIcK7xzJgfyxvNfA0sCu27xRgJXBJ6jVNgDwImQXcEtsW8DnwHLCF8mvoJ9xJbw0rYwowN8U6JkYehAxR3tV8CjxBaPxRQHuUXyB0X/8SnrKWDitnX7rVTIY8CFkNfAX8DXxJaOgd0WcFyodLin8fBF4GHgd2Ax8B7zehrg2Th6GT3cC9J3jsa1HKDXm4Q04qXIgxXIgxXIgxXIgx8vCUVYntwDuUhuBzOw9SpJljWVOAycBg/PzR9gBwANhMmPWrlRbKv1RDwNE6jm+P6nUupfGveIO0EgYme+ooszEkNSstV2WGJP0saZ6k01OuS6ekbklfSBqsUq87m9hGpmJIAbgG+BB4Hjg7pfN0AQuBT4C7MBZHTVUmohNYFKU0mAEsAc5JqfyGaGZQ/54wGDgUy1O03UEY1Z0U5XcCtxEC9t4E69BBmE2cSGncax/wDfAHx46NtRAeHJpHM/vHKmmqpE1RLJGkPZIWJHyOCZI2xOJDv6RHDVy7yRiymdCvH4q2zwSmUvt0bS2cD1we215HmPwygyUhRwjdxuFouwUYTbLdaifl19xD6QtgAktCILxDxGNMG+Xrrhqlfdj2kQTLToSs3tQLwHigG+gF1hAaRxx/IUKBMLe+APgLWEWYsBqJFsIc+gxgQ5SOcuwXsPgS2QbcCNxKWP34dZXy0yOj4DVW0o+x4PqKwsvgHZJ6Y/nLJbVKmiZpfSx/RZXyuyUNRPv2SHpYUpuk6SpnmaSO6PO9Ud4BSYskFbJom6zukNGEb2+RxwjTstso77I6gIsJq0aujOVPr1L+zOhYCIH8BWArcOqw/Q4Tlp0uBcZGeV3AWTVcQypkJeQf4Afghmi7nSBlG2ENVpFu4FLK1+oOAp9VKX8NIVgXBYwnLMzeOWy/OdE5Lorl7QJ+J6s1XFncllG6QtI61cd+SUujbqZa+TMl/Vln+Yck3Z/ydVdMWQpB0rWSfqmxsfolPSupq47yZ0naotLLZiV6Jc3PuD0yF4JCoF1bpbH6JL2k+keB2yXNlbRZlaVskQEZMiIESZdJ+naExtonaYmk006w7A6FIfStI5S/XWHIv5Zu8KQRUpA0WcfeKf2SnpR0SoPltyrElB3HKf++6POs28CUkGKarlKgP6jQTY1JsPzZknZG5fdJWmjgmstSM6dwF8f+Xllhv5uBZ4BNhAXVfQnWoR2YT/j11Srg3Qr7zgHOG5ZXqd6J0Ewh8RNV+vlyK3AhYeiinvn1WukizEb2EubyR2ItpfekIqn/7NriqpNBwlt1WhyMkkmsjfae9LgQY7gQY2QVQzZmdN56mJjFSbN6ysorqT9leZdlDBdijGbGkNz/L6tm4HeIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMVyIMf4DUdLHU6G0GA4AAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/location.aedf0eb0.png\";","module.exports = __webpack_public_path__ + \"static/media/servers.fd5e8519.png\";","module.exports = __webpack_public_path__ + \"static/media/virtual-controls.a17e3e29.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGoWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0yNVQxNTo1Nzo1MyswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0yNVQxNTo1Nzo1MyswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDYyZWQwNWUtMTg5NS04YzQ2LThlMmQtYWFmODU1NDNjMzgxIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6OWRhYjAwYjgtOTE5MS03NTRkLWExMjYtZDk2NWE4MDkyYWE0IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ODJjOWFhMGYtMjdlNS04ODQ1LWEyNWEtZjM2NTg2ZjA5MDEyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmM5YWEwZi0yN2U1LTg4NDUtYTI1YS1mMzY1ODZmMDkwMTIiIHN0RXZ0OndoZW49IjIwMTktMTItMjVUMTU6Mzk6MDkrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjRjNGNiNzYtOGFkZC0xYTRlLTlhZDAtMWY0OGYzN2Y5NzNkIiBzdEV2dDp3aGVuPSIyMDE5LTEyLTI1VDE1OjUxOjU4KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmQ2MmVkMDVlLTE4OTUtOGM0Ni04ZTJkLWFhZjg1NTQzYzM4MSIgc3RFdnQ6d2hlbj0iMjAxOS0xMi0yNVQxNTo1Nzo1MyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq4BtcIAAA65SURBVHic7Z15kFxVFYe/18v0zCQQJAlIQmIIS1gSZBFD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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAHP2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMi0yNVQxODoxMzo0MSswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0yNVQxODoxMzo0MSswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MWU0ZjZhMmQtOWE4ZC01NTQ3LThiYmMtMmIyM2Q0YWJkMTQ1IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YWM2MTA3ZjMtMTAxMC01MzRhLTgzNmEtZjFhNThhZGUwM2RmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ODJjOWFhMGYtMjdlNS04ODQ1LWEyNWEtZjM2NTg2ZjA5MDEyIj4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjlkYWIwMGI4LTkxOTEtNzU0ZC1hMTI2LWQ5NjVhODA5MmFhNDwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjgyYzlhYTBmLTI3ZTUtODg0NS1hMjVhLWYzNjU4NmYwOTAxMiIgc3RFdnQ6d2hlbj0iMjAxOS0xMi0yNVQxNTozOTowOSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoyNGM0Y2I3Ni04YWRkLTFhNGUtOWFkMC0xZjQ4ZjM3Zjk3M2QiIHN0RXZ0OndoZW49IjIwMTktMTItMjVUMTU6NTE6NTgrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MWU0ZjZhMmQtOWE4ZC01NTQ3LThiYmMtMmIyM2Q0YWJkMTQ1IiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI1VDE4OjEzOjQxKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2lu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\"","module.exports = __webpack_public_path__ + \"static/media/warning.b22fa3ea.png\";","module.exports = __webpack_public_path__ + \"static/media/create-media.990ddc40.png\";","module.exports = __webpack_public_path__ + \"static/media/call_start.1b455d3e.png\";","module.exports = __webpack_public_path__ + \"static/media/0.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/1.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/2.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/3.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/4.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/5.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/6.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/7.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/8.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/9.e43f55ff.png\";","module.exports = __webpack_public_path__ + \"static/media/10.e43f55ff.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB0UlEQVRoge2aPU7DQBBG30RINCFX4DzABfgJiigCJU4NNECfUDoUCBIEx+AiVNwgIEKVoUKKkAGvvTPrgiltZfWeJmutvzH8V/1qH49P1wZ5r8pvW7FhQqud5WciXKByU0VCLKDKVjvLzwQ5X7qkiB68Do9uy66RTKAA/qtUoDcbHU7KrLMSmatU/QKPwlyRl7JruXfgD/h3kK23Uf+p7HquArHhwVHAAh6cBKzgwUHAEh6MBazhwVDAAx6MBLzgwUDAEx4iC3jDQ0SBFPAQSSAVPEQQSAkPNQVSw0MNgSbAQ0WBpsBDBYEmwUOgQNPgIUCgneUnglwW3lQ+VGTDGx5CYhWRZ2BRfI9VkcV6JKagCvsLDcbbotxTLB4cicSo8E3cMIlqj9EGSVSKFt+Gh4+CdCneE1I1JqxStY4Snex6R9EpCTtR+zCXWiLKcTqlRLQXmlQS0eYDs1H/QUT3cd7Y0V/qO4N8V1UmOHXCJFbxlDALtrwkTKNFDwnzcLeTjfcU7jCScInXLSXcBhxWEq4jJgsJ9yFfbIkkc+LO8XVXRW/5QSJkTpzkU4PZVX8qKj0Kjh0K80WT58TLVdCJuSKbIelG0o89vnViri0NzpU+AU5pYAek3fmBAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/sitemap-open.ea11a3f4.png\";","module.exports = __webpack_public_path__ + \"static/media/wifi-close.7f6fd433.png\";","module.exports = __webpack_public_path__ + \"static/media/cloud-close.294645cf.png\";","module.exports = __webpack_public_path__ + \"static/media/knx-close.3dd4a205.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAD90lEQVRoQ+2YT2gcdRTHP+83ydZYCrWKPQRRkMX679CqhSpobVQQRA/Sw2ZmSQ4mB0WPgp5688/FSz0YBEN2ZoMEQfBmtdpTsSZ6sFJoREF60OJfsDHdZObJb7Kb7qab7My4A2mZH/xg2Xnvzffz3pvf7zcjXCdDrhMOCpDtVsmiIkVFcspA0Vo5JTZz2KIimVOXk2NRkZwSmzlspoooCJXKXcA+HKdMGJYxZi9wc3PeAjhdVYmsovo7sDZVf8GYHwjDRRznHL5/XkDTEiUG0bGxO1ldfR54FHgYuCntzRLa/wGcRuQUUfSR1Os/JvHbEkTHx28gDMeJogngQJKAOdgsIDLFwMCMTE8vbxa/K4hOTg6ytPQyqq8CtmW2w7At+DZDQ8dlamplo6CrQLRSOYQx7wP3bAf1XTScxZgXpFb7qv1aB4h63iSq7wID2xSiJauB6oTU6zOtP9ZB1POeRfVj7Ip0bQwlip6T2dlPrNx2kC9RfSwjwxlEPkT1J+ACqhGOc5kwXFqPp1pCZCfG7GLt9x3x8q36DFDOdF/Vk1Kvj3SCuO5vzT0gfUyRCfF9+1ylHlqtvkQUHU/tuOZwUYIgXoyuVMR1LwOlTAGNuV9qtbNZfNXzDqC6kMUX+FeC4MZ1ED18eIDh4auWtITB/6HR2C1zc2FC+w6zeKm/dOlvYCiDv1IuD8ixY1H7M7KM6o4Mwb6QIDiSwe/K4+O6p5onhrRhliQIdm5srQvAcNpIwJsSBK9l8GsHeQuwm2+6IfKz+P7tG0Fsn6Y9hqzgOPfJzMz5dAo6rbVS2Ycx36Xev1TnpV5/qBPE82qoeikENRB5RXz/vRQ+m5qq674IvJNqwRGZEd8f6wSpVo8QRZ9tsSHaU+mZeIahnadlbs7+t+XQ0dHPEdklQXCwp+3Ro3twnEM4jrVtzT2b+IUY80jrqNJ5RFnLyhuI7ED121i0aixe6vXFXkK6XVfXjd8tJAgynRh0dNRulgcRWQMT2Y/qn4i8Lr7/QeuemYKnAfq/IEnvVYAkzVRRkaSZatoVrZU0YUVrJc1U0VopM3VNtpa67nx8xDHmaanVLlrmjSBaqezFmBPAcpJjS9K89W3Vij+jet4CqvuB74miEZmd/bUdpAlxsvmp6RsJggeSCu1l1zeQOPvj47tpNE4g8iCwSKPxOKWSfc+x4zbAQpRRnadUelKmp//qJTDp9b6CxDDV6q1EkRV8L3AOuLsppvXbfmAbabVeUqG97PoO0qUy7Rq+ZnDwqX5WIvfTb9xmKyufAvEbHJAbhA2eS0VaWWq2mX1ZA2Oe6Hc7tZc6V5D1Z8ZmrLkc9+r1rNdzB8kqLK1fAZI2Y3nb/wcNym9C8gBrxgAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/media.5d190925.png\";","module.exports = __webpack_public_path__ + \"static/media/clear.e02aebfc.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/pause.ee24e523.png\";","module.exports = __webpack_public_path__ + \"static/media/remove.15de5ed3.png\";","module.exports = __webpack_public_path__ + \"static/media/done.9f7859a2.png\";","module.exports = __webpack_public_path__ + \"static/media/edit.a62d83a7.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NjAxYjIxMy1iZDZhLTM5NGYtOTQ2NS0xZWU4NDY5NWEyZDYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NTY2YjkyZS03Y2U5LWNmNDgtOTAwMS1iM2ZhOTQyNGUxNWUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY2MDFiMjEzLWJkNmEtMzk0Zi05NDY1LTFlZTg0Njk1YTJkNiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTozMCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0OWQzMmE1ZS03ZWZhLTVlNDktOTM2MS1mYjkzYjVlYzM1ZWYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MGExMmYxNS1jYTgwLTU0NGQtYTliMy0yZDkxM2E4YmFjMTMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ5ZDMyYTVlLTdlZmEtNWU0OS05MzYxLWZiOTNiNWVjMzVlZiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTo1NCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMDFiZTk1MS02YTcyLWM2NGUtYmQ2OC05ZWQ3OGUxNzkzODIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NDI4ZmJkOS01M2ZlLWY0NGUtYjQzNy1lNDIzMDVmNzUxZTYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMwMWJlOTUxLTZhNzItYzY0ZS1iZDY4LTllZDc4ZTE3OTM4MiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowNjo1OSswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAMxQTFRFAAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////OpLhCAAAAER0Uk5TAGvAnNr/GC5whMbF/tTBeG9xKSDf0YuBPMQyAezmn5JQQgr58QOyo2NTEwmzdiduinQ7ncNObcK/KhnNjXw+K+CibDmVtF6fAAABiklEQVR4nO3W2VLCQBAF0HYZFQhuuKOiggq44b7v//9PVkTMnaQ7zI0PVln2W+5kunJqkpmI/OkaGfVqjG4w7vyaIOdPpua7KbJBKd2gTDZIC1hDRsAaMgLnKlSDrIAzKALOoAg4gyZgDKqAMagCxgCCqFrAgILpGbiYLSCYmy9gwDWoyQJ4wgwoWBRZog0oWBZZgctVWrAmUl8nDSjYiINN0oCCRhxskQYUbMfBTpMyoKC1+xntUQYU7PejNmVAQacfdSPCgILmwVdYIQwoOByER4QBBe1BeAzhEAMKou53DB+UOwkWwMP2gg0oOE3is1CDt5vWkhw/qFwDCqo4cA4DF4GCEg5chhmM8yBdtsE4D9JlG/QTLVOmIVBgGwIFtiFQYBqCBc5d/UxgGYIFhoEQ6AYUwFaQVBluuB4iuNGI+KegGDyBunPe5hu8NbjTGngbW9aAgnt1vjzkGTzBo97gKc/gCZ71BvVWjgEFL/p8kVfb4Al6VoMO3vVmC96tBvinoL5L//Ub9QGLwCsxskGGMwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAMAAAC93eDPAAADAFBMVEX///9DiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lg17lg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lg17lg17lg17lg17lDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplg17lDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplDiplg17lDiplDiplDiplDiplg17ns594VAAAA/3RSTlMAAAEPGSY5SEtJSkc4KBsLAw4kTHWVutjy9/TcwJtoMQIRlMvm7/b97NGXRghxr/XVkjYqsOS8WQoWT6bt0moUhNnfdAm0+eJlDWn80xeP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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-cold.92a3aa79.png\";","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-hot.cedae37a.png\";","module.exports = __webpack_public_path__ + \"static/media/program.0ce280fa.png\";","module.exports = __webpack_public_path__ + \"static/media/volume.69c36a8f.png\";","module.exports = __webpack_public_path__ + \"static/media/mute.344c50b4.png\";","module.exports = __webpack_public_path__ + \"static/media/list.6abf2999.png\";","module.exports = __webpack_public_path__ + \"static/media/menu.91a7fd5d.png\";","module.exports = __webpack_public_path__ + \"static/media/play.81ecf2e9.png\";","module.exports = __webpack_public_path__ + \"static/media/pause.2e0ef420.png\";","module.exports = __webpack_public_path__ + \"static/media/next.6eb48f72.png\";","module.exports = __webpack_public_path__ + \"static/media/rewind.cd7e81db.png\";","module.exports = __webpack_public_path__ + \"static/media/f2.c7deacac.png\";","module.exports = __webpack_public_path__ + \"static/media/settings.22f2a59f.png\";","module.exports = __webpack_public_path__ + \"static/media/back.b3ca5f19.png\";","module.exports = __webpack_public_path__ + \"static/media/up.d6e1d59e.png\";","module.exports = __webpack_public_path__ + \"static/media/ok.b77b92d5.png\";","module.exports = __webpack_public_path__ + \"static/media/down.08df8868.png\";","module.exports = __webpack_public_path__ + \"static/media/input.b31e9044.png\";","module.exports = __webpack_public_path__ + \"static/media/right.9a686a0b.png\";","module.exports = __webpack_public_path__ + \"static/media/exit.eae3ee01.png\";","module.exports = __webpack_public_path__ + \"static/media/time.16ba5dfe.png\";","module.exports = __webpack_public_path__ + \"static/media/sunrise.cf6fbc86.png\";","module.exports = __webpack_public_path__ + \"static/media/sunset.be4a62b3.png\";","var map = {\n\t\"./en.json\": 317,\n\t\"./tr.json\": 318\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 316;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n // @ts-ignore\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n // @ts-ignore\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n // @ts-ignore\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","export type Action = TPayload extends undefined\n ? (TMeta extends undefined ? { type: string } : { type: string; meta: TMeta })\n : (TPayload extends Error\n ? (TMeta extends undefined\n ? { type: string; payload: TPayload; error: true }\n : { type: string; payload: TPayload; meta: TMeta; error: true })\n : (TMeta extends undefined\n ? { type: string; payload: TPayload }\n : { type: string; payload: TPayload; meta: TMeta }))\n\n/**\n * Minimal (type-only) action factory\n * @example\n * const clearTodos = action('[Todo] truncate');\n */\nexport function createAction(type: string): Action\n/**\n * Action with error factory\n * @example\n * const fetchTodosRejected = (payload: Error) => action('[Todo] fetch rejected', payload);\n */\nexport function createAction(\n type: string,\n payload: TPayload,\n): Action\n/**\n * Action with non-error payload factory\n * @example\n * const addTodo = ({ name, completed = false }: Todo) => action('[Todo] add', { name, completed });\n */\nexport function createAction(\n type: string,\n payload: TPayload,\n): Action\n/**\n * Action with error and meta factory\n * @example\n * const fetchTodosRejected = (payload: Error, meta?: Meta) => action('[Todo] fetch rejected', payload, meta);\n */\nexport function createAction(type: string, payload: TPayload, meta: TMeta): Action\n/**\n * Action with payload and meta factory\n * @example\n * const addTodo = ({ name, completed = false }: Todo, meta?: Meta) => action('[Todo] add', { name, completed }, meta);\n */\nexport function createAction(\n type: string,\n payload: TPayload,\n meta: TMeta,\n): Action\n\n/**\n * Flux standard action factory\n * @example\n * const clearTodos = action('[Todo] truncate');\n * @example\n * const fetchTodosRejected = (payload: Error) => action('[Todo] fetch rejected', payload);\n * @example\n * const addTodo = ({ name, completed = false }: Todo) => action('[Todo] add', { name, completed });\n * @example\n * const fetchTodosRejected = (payload: Error, meta?: Meta) => action('[Todo] fetch rejected', payload, meta);\n * @example\n * const addTodo = ({ name, completed = false }: Todo, meta?: Meta) => action('[Todo] add', { name, completed }, meta);\n */\nexport function createAction(\n type: string,\n payload?: TPayload,\n meta?: TMeta,\n) {\n return {\n type,\n ...(payload !== undefined ? {payload} : {}),\n ...(meta !== undefined ? {meta} : {}),\n ...(payload instanceof Error ? {error: true} : {}),\n };\n}\n","import {createAction, Action} from './createAction';\n\nlet number = 0;\n\nexport type ActionCreator = T extends Action\n ? {\n (...args: any[]): T\n type: T['type']\n toString(): T['type']\n }\n : (T extends string\n ? {\n (...args: any[]): Action\n type: T\n toString(): T\n }\n : never)\n\nexport function createActionCreator(...args: any[]) => Action>(\n executor: (\n resolve: (\n payload?: Payload,\n meta?: Meta,\n ) => Action,\n ) => TCallable = resolve => (() => resolve()) as TCallable,\n) {\n number += Math.floor(Math.random() * 100) + 1;\n const type = createType(number);\n const callable = executor((payload, meta) =>\n createAction(type, payload!, meta!),\n );\n\n return Object.assign(callable, {\n type,\n toString() {\n return type;\n },\n });\n}\n\nfunction createType(number: number) {\n let str = number.toString(16);\n return [...Array(17 - str.length).fill(0), ...str.split('')].join('');\n}\n","import {createAction} from '../../base/fsa';\nimport {ScenarioModel, ScenarioTriggerModel, STPUIEntity} from '../control/state';\nimport {UserRole, MediaModel, InputModel} from '../../types/control';\nimport {MediaFileModel} from './state';\n\nexport const setApplicationLoaded = createAction();\n\nexport const changeBusyAction = createAction(\n resolve =>\n (busy: boolean) =>\n resolve({busy}),\n);\n\nexport const toggleScenarioScreenAction = createAction(\n resolve =>\n (scenario: ScenarioModel) =>\n resolve({scenario}),\n);\nexport const toggleScenarioTriggerScreenAction = createAction(\n resolve =>\n (trigger: ScenarioTriggerModel) =>\n resolve({trigger}),\n);\n\nexport const toggleScenarioTriggerInputScreenAction = createAction(\n resolve =>\n (input: InputModel) =>\n resolve({input}),\n);\n\nexport const toggleScenarioPopupScreenAction = createAction(\n resolve =>\n (scenario: ScenarioModel) =>\n resolve({scenario}),\n);\n\nexport const toggleScenarioTriggerPopupScreenAction = createAction(\n resolve =>\n (trigger: ScenarioTriggerModel) =>\n resolve({trigger}),\n);\n\nexport const toggleScenarioSTPUIInputScreenAction = createAction(\n resolve =>\n (uiEntity: STPUIEntity) =>\n resolve({uiEntity}),\n);\n\nexport const setMediaScreenAction = createAction(\n resolve =>\n (media: MediaModel, editMode?: boolean) =>\n resolve({media, editMode}),\n);\n\nexport const setSTPUIMediaScreenAction = createAction(\n resolve =>\n (stpUIMedia: STPUIEntity) =>\n resolve({stpUIMedia}),\n);\n\nexport const setAuthenticationAction = createAction(resolve => (role: UserRole) => resolve({role}));\n\nexport const setPopupScreenAction = createAction(resolve =>\n (visible: boolean, type?: 'info' | 'question' | 'success' | 'failure', message?: string, icon?: string, callback?: (isApproved: boolean) => void, closable = true, positive_button = {\n text: 'Evet',\n timed: false,\n }, showCancel = false) =>\n resolve({visible, message, icon, callback, type, closable, positive_button, showCancel}));\n\nexport const showMessageAction = (type: 'info' | 'success' | 'failure', message: string, icon?: string, closable = true) => setPopupScreenAction(true, type, message, icon, undefined, closable);\n\nexport const closePopupScreenAction = () => setPopupScreenAction(false);\n\nexport const setMediaFileListAction = createAction(\n resolve => (mediaFileList: MediaFileModel[]) => resolve({mediaFileList}),\n);\n\nexport const alarmSettingUpAction = createAction(resolve => (isAlarmSettingUp: boolean) => resolve(isAlarmSettingUp));\n\nexport const setSelectedBackgroundAction = createAction(resolve => (selectedBackground: string) => resolve({selectedBackground}));\n","import {Dispatch} from 'redux';\nimport {setAuthenticationAction} from '../store/ui/actions';\n\nexport class WS {\n private ws: WebSocket = null;\n private retryCount = 0;\n\n public dispatch: Dispatch;\n public onConnectionChanged: (connected: boolean, retryCount: number) => void;\n public onmessage: (ev: MessageEvent) => void;\n public onopen: () => void;\n\n public constructor(private url: string) {\n this.connect();\n }\n\n public send(data: string | ArrayBufferLike | Blob | ArrayBufferView) {\n this.ws.send(data);\n }\n\n private connect = () => {\n this.ws = new WebSocket(this.url);\n this.ws.onclose = () => {\n this.retryCount++;\n if (this.onConnectionChanged) {\n this.onConnectionChanged(false, this.retryCount);\n }\n this.dispatch(setAuthenticationAction(null));\n setTimeout(() => this.connect(), 1000);\n };\n\n this.ws.onopen = () => {\n this.retryCount = 0;\n if (this.onConnectionChanged) {\n this.onConnectionChanged(true, this.retryCount);\n }\n if (this.onopen) {\n this.onopen();\n }\n };\n\n this.ws.onerror = () => {\n this.ws.close();\n };\n\n this.ws.onmessage = (ev: MessageEvent) => {\n if (this.onmessage) {\n this.onmessage(ev);\n }\n };\n };\n}\n","import {WS} from '../../utils/ws';\nimport {RPCMessage} from './types';\n\ntype Executor = [(value?: T | PromiseLike) => void, (reason?: any) => void];\n\nexport class RPCService {\n\n private sequence = 0;\n private waitingList = new Map>();\n\n public constructor(private client: K, private websocket: WS) {\n this.websocket.onmessage = data => {\n this.handleMessage(JSON.parse(data.data));\n };\n }\n\n protected ask(method: string, params?: any): Promise {\n this.sequence += 1;\n const sequence = this.sequence;\n\n if (params == null) {\n // @ts-ignore\n params = {};\n }\n\n const message: RPCMessage = {\n is_request: true,\n id: sequence,\n params: [params],\n method,\n };\n\n return new Promise((resolve, reject) => {\n this.waitingList.set(sequence, [resolve, reject]);\n this.websocketSend(message);\n });\n }\n\n protected handleMessage(message: RPCMessage) {\n if (message.is_request) {\n this.answerRequest(message);\n } else {\n this.applyResponse(message);\n }\n }\n\n private answerRequest(message: RPCMessage) {\n const method = this.toCamelCase(message.method);\n const response: RPCMessage = {\n id: message.id,\n is_request: false,\n params: null,\n method: message.method,\n };\n\n try {\n response.params = [this.client[method].apply(this.client, message.params) as K];\n } catch (e) {\n response.error = e.toLocaleString();\n }\n\n this.websocketSend(response);\n }\n\n private applyResponse(message: RPCMessage) {\n const executor = this.waitingList.get(message.id);\n if (executor) {\n this.waitingList.delete(message.id);\n const [resolve, reject] = executor;\n if (message.error) {\n reject(message.error);\n } else {\n if (message.params && message.params.length) {\n resolve(message.params[0]);\n } else {\n resolve(null);\n }\n }\n }\n }\n\n private websocketSend(message: RPCMessage) {\n this.websocket.send(JSON.stringify(message));\n }\n\n private toCamelCase(input: string): string {\n const firstCharacter = input[0];\n return this.replaceAt(input, 0, firstCharacter.toLowerCase());\n }\n\n private replaceAt = (input: string, index: number, replacement: string): string => {\n return input.substr(0, index) + replacement + input.substr(index + replacement.length);\n };\n}\n","const PROD = {\n WS_URL: `ws://${window.location.host}/ws`,\n IMAGE_PREFIX: '',\n IS_DEBUG: false,\n LOG_STATE: false,\n};\n\nconst DEBUG = {\n // WS_URL: 'ws://10.201.1.58:8088/ws',\n WS_URL: 'ws://192.168.5.5:8088/ws',\n // IMAGE_PREFIX: 'http://10.201.1.58:8088',\n IMAGE_PREFIX: 'http://192.168.5.5:8088',\n IS_DEBUG: true,\n LOG_STATE: false,\n};\n\nconst LOCAL = {\n WS_URL: 'ws://127.0.0.1:8088/ws',\n IMAGE_PREFIX: 'http://127.0.0.1:8088',\n IS_DEBUG: true,\n LOG_STATE: false,\n};\n\n// @ts-ignore\nconst isLocal = process.env.REACT_APP_IS_LOCAL === 'true';\n// @ts-ignore\nexport const Configs = isLocal ? LOCAL : process.env.NODE_ENV === 'development' ? DEBUG : PROD;\n\n","import {\n CameraModel,\n ControlModel,\n InputModel,\n UserModel,\n UpdateUserModel,\n ControlTypeModel,\n SensorTypeModel,\n CameraBrandModel,\n MediaModel,\n InputTypeModel,\n RelationModel, GatewayCommand, GatewayInfoModel,\n} from '../types/control';\nimport {BridgeDeviceModel} from '../types/bridge-device';\nimport {ClientTask} from './client-task';\nimport {\n AlarmStateModel,\n AreaModel,\n ConfigModel,\n CreateMediaDeviceModel,\n MediaInputModel,\n VirtualControlModel,\n ScenarioModel,\n ScenarioTriggerModel,\n HomepageItemModel,\n SoundState,\n UpdateFCMPushTokenRequest,\n MenuEntity,\n STPUIEntity,\n LanguageModel,\n} from '../store/control/state';\nimport {WS} from '../utils/ws';\nimport {SettingsModel} from '../store/settings/state';\nimport {IntercomModel} from '../types/intercom';\nimport {DoorModel} from '../types/door';\nimport {RPCService as BaseRPCService} from '../base/RPCService';\nimport {Configs} from '../configs';\nimport {MediaFileModel} from '../store/ui/state';\nimport {GatewayModel} from '../types/gateway';\nimport {DoorBrandModel} from '../types/door-brand';\nimport {BridgeDeviceTypeModel} from '../types/bridge-device-type';\nimport {WifiNetworkModel} from '../types/wifi-network';\nimport {SystemInfo} from '../types/system-info';\nimport {LocationModel} from '../types/location';\nimport {TemperatureMessage} from '../store/temperature/state';\nimport {ConciergeModel} from '../types/concierge';\nimport {ConciergeTypeModel} from '../types/concierge-type';\n\nexport class RPCService extends BaseRPCService {\n public constructor(client: ClientTask, websocket: WS) {\n super(client, websocket);\n }\n\n public test() {\n return this.ask('Test');\n }\n\n public ping() {\n return this.ask('Ping');\n }\n\n public sendBrokenLink(link: string) {\n return this.ask('SendBrokenLink', {link});\n }\n\n public testNotification(os: string, token: string) {\n return this.ask('TestNotification', {os, token});\n }\n\n public connectToMachine(address: string, username: string, password: string, id: string) {\n return this.ask('ConnectToMachine', {address, username, password, id});\n }\n\n public beforeConnectToMachine(address: string, username: string, password: string) {\n return this.ask<{ data: GatewayInfoModel[] }>('BeforeConnectToMachine', {address, username, password});\n }\n\n public connectToLocalMachine() {\n return this.ask('ConnectToLocalMachine');\n }\n\n public downloadDB() {\n return this.ask<{ data: string }>('DownloadDB')\n .then(r => r.data);\n }\n\n public uploadDB(data: unknown) {\n return this.ask<{ data: string }>('UploadDB', {data});\n }\n\n public resetDB() {\n return this.ask('ResetDB');\n }\n\n public getUserList() {\n return this.ask<{ data: UserModel[] }>('GetUserList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getSTPUIList() {\n return this.ask<{ data: STPUIEntity[] }>('GetSTPUIList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getLanguageList() {\n return this.ask<{ data: LanguageModel[] }>('GetLanguageList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getConciergeList() {\n return this.ask<{ data: ConciergeModel[] }>('GetConciergeList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getConciergeTypeList() {\n return this.ask<{ data: ConciergeTypeModel[] }>('GetConciergeTypeList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getControlTypeList() {\n return this.ask<{ data: ControlTypeModel[] }>('GetControlTypeList')\n .then(r => r.data\n .map(type => {\n for (const name in type.image_set) {\n // noinspection JSUnfilteredForInLoop\n type.image_set[name] = Configs.IMAGE_PREFIX + type.image_set[name];\n }\n\n return type;\n })\n .sort((a, b) => a.id > b.id ? -1 : 1),\n );\n }\n\n public getSensorTypeList() {\n return this.ask<{ data: SensorTypeModel[] }>('GetSensorTypeList')\n .then(r => r.data\n .map(type => {\n for (const name in type.image_set) {\n // noinspection JSUnfilteredForInLoop\n type.image_set[name] = Configs.IMAGE_PREFIX + type.image_set[name];\n }\n\n return type;\n })\n .sort((a, b) => a.id > b.id ? -1 : 1),\n );\n }\n\n public getControlList() {\n return this.ask<{ data: ControlModel[] }>('GetControlList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1))\n .then(controls => controls.map(control => {\n if (control.temperature_settings != null) {\n control.temperature_settings.whole = control.temperature_settings.whole || 14;\n if (control.temperature_settings.whole === 14) {\n control.temperature_settings.fraction = 5;\n }\n }\n\n return control;\n }));\n }\n\n public getCameraList() {\n return this.ask<{ data: CameraModel[] }>('GetCameraList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getCameraBrandList() {\n return this.ask<{ data: CameraBrandModel[] }>('GetCameraBrandList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getMediaFileList() {\n return this.ask<{ data: MediaFileModel[] }>('GetMediaFileList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getScenarioList() {\n return this.ask<{ data: ScenarioModel[] }>('GetScenarioList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getScenarioTriggerList() {\n return this.ask<{ data: ScenarioTriggerModel[] }>('GetScenarioTriggerList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getDoorList() {\n return this.ask<{ data: DoorModel[] }>('GetDoorList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1))\n .then(r => r.map(d => ({...d, toString: () => d.id})));\n }\n\n public getDoorBrandList() {\n return this.ask<{ data: DoorBrandModel[] }>('GetDoorBrandList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getIntercomList() {\n return this.ask<{ data: IntercomModel[] }>('GetIntercomList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getInputTypeList() {\n return this.ask<{ data: InputTypeModel[] }>('GetInputTypeList')\n .then(r => r.data.filter(c => !c.registered_by_system))\n .then(r => r.sort((a, b) => (a.id > b.id) ? 1 : -1));\n }\n\n public getInputList() {\n return this.ask<{ data: InputModel[] }>('GetInputList')\n .then(r => r.data.filter(c => !c.registered_by_system))\n .then(r => r.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getAreaList() {\n return this.ask<{ data: AreaModel[] }>('GetAreaList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getMediaList() {\n return this.ask<{ data: MediaModel[] }>('GetMediaList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getWifiNetworkList(gatewayId: string) {\n return this.ask<{ data: WifiNetworkModel[] }>('GetWifiNetworkList', gatewayId)\n .then(r => r.data.sort((a, b) => (a.name > b.name) ? 1 : -1));\n }\n\n public getLocationList() {\n return this.ask<{ data: LocationModel[] }>('GetLocationList')\n .then(r => r.data.sort((a, b) => a.name.localeCompare(b.name)));\n }\n\n public getTemperature() {\n return this.ask('GetTemperature');\n }\n\n public connectWifiNetwork(gatewayId: string, name: string, password: string) {\n return this.ask('ConnectWifiNetwork', {gateway_id: gatewayId, name, password});\n }\n\n public disconnectWifiNetwork(gatewayId: string) {\n return this.ask('DisconnectWifiNetwork', {gateway_id: gatewayId});\n }\n\n public getMediaInputList() {\n return this.ask<{ data: MediaInputModel[] }>('GetMediaInputList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getVirtualControlList() {\n return this.ask<{ data: VirtualControlModel[] }>('GetVirtualControlList')\n .then(r => r.data/*.filter(c => !c.registered_by_system)*/)\n .then(r => r.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getHomepageItemList() {\n return this.ask<{ data: HomepageItemModel[] }>('GetHomepageItemList')\n .then(r => r.data.sort((a, b) => (a.order > b.order) ? -1 : 1));\n }\n\n public getBridgeDeviceList() {\n return this.ask<{ data: BridgeDeviceModel[] }>('GetBridgeDeviceList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getBridgeDeviceTypeList() {\n return this.ask<{ data: BridgeDeviceTypeModel[] }>('GetBridgeDeviceTypeList')\n .then(r => r.data\n .map(type => {\n for (const name in type.image_set) {\n // noinspection JSUnfilteredForInLoop\n type.image_set[name] = Configs.IMAGE_PREFIX + type.image_set[name];\n }\n\n return type;\n })\n .sort((a, b) => a.id > b.id ? -1 : 1),\n );\n }\n\n public getGatewayList() {\n return this.ask<{ data: GatewayModel[] }>('GetGatewayList')\n .then(r => r.data.sort((a, b) => (a.id > b.id) ? -1 : 1));\n }\n\n public getMenuList() {\n return this.ask<{ data: MenuEntity[] }>('GetMenuList')\n .then(r => r.data);\n }\n\n public getAlarmState() {\n return this.ask('GetAlarmState');\n }\n\n public getSoundState() {\n return this.ask('GetSoundState');\n }\n\n public getSystemInfo() {\n return this.ask('GetSystemInfo');\n }\n\n public scanDevices(gateway_id: string, is_auto: boolean) {\n return this.ask('ScanDevices', {gateway_id, is_auto});\n }\n\n public findDevice(gateway_id: string, unique_device_id: string, is_stop: boolean) {\n return this.ask('FindDevice', {gateway_id, unique_device_id, is_stop});\n }\n\n public matchDevice(gateway_id: string, unique_device_id: string, device_id: string) {\n return this.ask('MatchDevice', {gateway_id, unique_device_id, device_id});\n }\n\n public reMatchDevice(gateway_id: string, unique_device_id: string, device_id: string) {\n return this.ask('ReMatchDevice', {gateway_id, unique_device_id, device_id});\n }\n\n public resetDevice(gateway_id: string, unique_device_id: string) {\n return this.ask('ResetDevice', {gateway_id, unique_device_id});\n }\n\n public getSettings() {\n return this.ask('GetSettings');\n }\n\n public getConfigs() {\n return this.ask('GetConfigs');\n }\n\n public updateSoundLevel = (level: number) => {\n return this.ask('UpdateSoundLevel', level);\n };\n\n public updateSoundState = (soundState: SoundState) => {\n return this.ask('UpdateSoundState', soundState);\n };\n\n public updateFCMPushToken = (request: UpdateFCMPushTokenRequest) => {\n return this.ask('UpdateFCMPushToken', request);\n };\n\n public updateControlValue = (id: string, value: number) => {\n return this.ask('UpdateControlValue', {id, value})\n .catch(console.log)\n .then(() => true);\n };\n\n public updateScenarioTriggerControl = (id: string, scenarioId: string) => {\n return this.ask('UpdateScenarioTriggerControl', {id, scenario_id: scenarioId});\n };\n\n public updateTemperature = (id: string, whole: number, fraction: number) => {\n this.ask('UpdateTemperature', {id, whole, fraction})\n .catch(console.log);\n };\n\n public changeHeatingMode = (id: string) => {\n this.ask('ChangeHeatingMode', id)\n .catch(console.log);\n };\n\n public mediaButtonPressed(id: string, slot: number, extra: { [key: string]: any } = {}) {\n this.ask('MediaButtonPressed', {id, slot, ...extra})\n .catch(console.log);\n }\n\n public registerMediaInput(id: string) {\n return this.ask('RegisterMediaInput', id);\n }\n\n public updateSensorStatus(id: string, is_active: boolean, is_control: boolean) {\n this.ask('UpdateSensorStatus', {id, is_active, is_control})\n .catch(console.log);\n }\n\n public sendUartMessage(message: string) {\n this.ask('SendUartMessage', message)\n .catch(console.log);\n }\n\n public answerIntercomRequest(status: string) {\n this.ask('AnswerIntercomRequest', status)\n .catch(console.log);\n }\n\n public callIntercom(request: string) {\n return this.ask('CallIntercom', request)\n .catch(console.log);\n }\n\n public createConciergeRequest(id: string, message: string) {\n return this.ask('CreateConciergeRequest', {id, message});\n }\n\n public openDoor(id: string) {\n this.ask('OnDoorOpen', id)\n .catch(console.log);\n }\n\n public updateScenario(scenarioModel: ScenarioModel) {\n return this.ask('UpdateScenario', scenarioModel)\n .then(() => true)\n .catch(() => false);\n }\n\n public updateUser(userModel: UpdateUserModel) {\n return this.ask('UpdateUser', userModel);\n }\n\n public updateSTPUI(stpUIEntity: STPUIEntity) {\n return this.ask('UpdateSTPUI', stpUIEntity);\n }\n\n public updateGateway(gatewayModel: GatewayModel) {\n return this.ask('UpdateGateway', gatewayModel);\n }\n\n public updateConfigs(configModel: ConfigModel) {\n return this.ask('UpdateConfigs', configModel);\n }\n\n public updateBridgeDevice(bridgeDevice: BridgeDeviceModel) {\n return this.ask('UpdateBridgeDevice', bridgeDevice);\n }\n\n public updateInput(input: InputModel) {\n return this.ask('UpdateInput', input);\n }\n\n public updateArea(area: AreaModel) {\n return this.ask('UpdateArea', area);\n }\n\n public updateIntercom(e: IntercomModel) {\n return this.ask('UpdateIntercom', e);\n }\n\n public updateHomepageItem(e: HomepageItemModel) {\n return this.ask('UpdateHomepageItem', e);\n }\n\n public updateMenu(e: MenuEntity) {\n return this.ask('UpdateMenu', e);\n }\n\n public updateDoor(e: DoorModel) {\n return this.ask('UpdateDoor', e);\n }\n\n public updateConcierge(e: ConciergeModel) {\n return this.ask('UpdateConcierge', e);\n }\n\n public updateDoorBrand(e: DoorBrandModel) {\n return this.ask('UpdateDoorBrand', e);\n }\n\n public updateMediaInput(input: MediaInputModel) {\n return this.ask('UpdateMediaInput', input);\n }\n\n public updateControl(controlModel: ControlModel) {\n return this.ask('UpdateControl', controlModel);\n }\n\n public updateControlType(controlTypeModel: ControlTypeModel) {\n\n for (const name in controlTypeModel.image_set) {\n // noinspection JSUnfilteredForInLoop\n controlTypeModel.image_set[name] = controlTypeModel.image_set[name].replace(Configs.IMAGE_PREFIX, '');\n }\n\n return this.ask('UpdateControlType', controlTypeModel);\n }\n\n public updateVirtualControl(virtualControl: VirtualControlModel) {\n return this.ask('UpdateVirtualControl', virtualControl);\n }\n\n public updateCamera(camera: CameraModel) {\n return this.ask('UpdateCamera', camera);\n }\n\n public updateCameraBrand(cameraBrand: CameraBrandModel) {\n return this.ask('UpdateCameraBrand', cameraBrand);\n }\n\n public updateScenarioTrigger(scenarioTriggerModel: ScenarioTriggerModel) {\n return this.ask('UpdateScenarioTrigger', scenarioTriggerModel)\n .then(() => true)\n .catch(() => false);\n }\n\n public createMediaDevice(mediaDevice: CreateMediaDeviceModel): Promise {\n return this.ask('CreateMediaDevice', mediaDevice);\n }\n\n public getRelations(relational_id: string, type: string) {\n return this.ask<{ data: RelationModel[] }>('GetRelations', {relational_id, type});\n }\n\n public deleteMedia(id: string) {\n return this.ask('DeleteMedia', id);\n }\n\n public deleteControl(id: string) {\n return this.ask('DeleteControl', id);\n }\n\n public deleteBridgeDevice(id: string) {\n return this.ask('DeleteBridgeDevice', id);\n }\n\n public deleteInput(id: string) {\n return this.ask('DeleteInput', id);\n }\n\n public deleteArea(id: string) {\n return this.ask('DeleteArea', id);\n }\n\n public deleteIntercom(id: string) {\n return this.ask('DeleteIntercom', id);\n }\n\n public deleteHomepageItem(id: string) {\n return this.ask('DeleteHomepageItem', id);\n }\n\n public deleteMenu(id: string) {\n return this.ask('DeleteMenu', id);\n }\n\n public deleteDoor(id: string) {\n return this.ask('DeleteDoor', id);\n }\n\n public deleteConcierge(id: string) {\n return this.ask('DeleteConcierge', id);\n }\n\n public deleteDoorBrand(id: string) {\n return this.ask('DeleteDoorBrand', id);\n }\n\n public deleteMediaInput(id: string) {\n return this.ask('DeleteMediaInput', id);\n }\n\n public deleteVirtualControl(id: string) {\n return this.ask('DeleteVirtualControl', id);\n }\n\n public deleteCamera(id: string) {\n return this.ask('DeleteCamera', id);\n }\n\n public playScenario(scenarioId: string) {\n this.ask('PlayScenario', scenarioId)\n .catch(console.log);\n }\n\n public stopScenario() {\n this.ask('StopScenario')\n .catch(console.log);\n }\n\n public deleteScenario(scenarioId: string) {\n return this.ask('DeleteScenario', scenarioId)\n .catch(console.log);\n }\n\n public deleteUser(userId: string) {\n return this.ask('DeleteUser', userId);\n }\n\n public deleteSTPUI(stpUIId: string) {\n return this.ask('DeleteSTPUI', stpUIId);\n }\n\n public deleteGateway(gatewayId: string) {\n return this.ask('DeleteGateway', gatewayId);\n }\n\n public deleteScenarioTrigger(scenarioTriggerId: string) {\n return this.ask('DeleteScenarioTrigger', scenarioTriggerId)\n .catch(console.log);\n }\n\n public setAlarm(level: number, password: string) {\n return this.ask('SetAlarm', {level, password})\n .then(response => response)\n .catch(() => false);\n }\n\n public authenticate(username: string, password: string) {\n return this.ask('Authenticate', {username, password});\n }\n\n public updateTimeAndWeather(time: number, offset: number, temperature = -1, icon = -1) {\n return this.ask('UpdateTimeAndWeather', {time, offset, temperature, icon});\n }\n\n public broadcastTimeAndWeather() {\n return this.ask('BroadcastTimeAndWeather');\n }\n\n public getRTC() {\n return this.ask('GetRTC');\n }\n\n public intercomErrorCall() {\n console.log(\"intercomErrorCall\")\n return this.ask('IntercomErrorCall');\n }\n\n public setDirectOutput(gateway_id: string, unique_device_id: string, slot: number, value: number) {\n return this.ask('SetDirectOutput', {gateway_id, unique_device_id, slot, value});\n }\n\n public getDirectInput(gateway_id: string, unique_device_id: string, slot: number) {\n return this.ask('GetDirectInput', {gateway_id, unique_device_id, slot});\n }\n\n public manageGateway(id: string, command: GatewayCommand) {\n return this.ask('ManageGateway', {id, command});\n }\n\n public doLogout() {\n return this.ask('DoLogout');\n }\n\n public acceptUartLogs(acceptUartLogs: boolean) {\n return this.ask('AcceptUartLogs', acceptUartLogs);\n }\n}\n","import {\n AlarmStateModel, SoundState,\n} from './state';\nimport {createAction} from '../../base/fsa';\nimport {IntercomModel} from '../../types/intercom';\n\nexport const controlSendErrorAction = createAction(\n resolve => (controlId: string, hasError: boolean) => resolve({controlId, hasError}),\n);\n\nexport const inputSendErrorAction = createAction(\n resolve => (inputId: string, hasError: boolean) => resolve({inputId, hasError}),\n);\n\nexport const mediaStatusUpdatedAction = createAction(\n resolve => (status: string) => resolve(status),\n);\n\nexport const setIntercomStatusAction = createAction(\n resolve => (status: string, is_incoming_call: boolean, id = '', name = '') => resolve({\n status,\n is_incoming_call,\n id,\n name,\n }),\n);\n\nexport const setIntercomInfoAction = createAction(\n resolve => (info: IntercomModel) => resolve(info),\n);\n\nexport const setBellStatusAction = createAction(\n resolve => (status: string) => resolve(status),\n);\n\nexport const entityDeletedAction = createAction(\n resolve => (id: string, type: string) => resolve({id, type}),\n);\n\nexport const setEntityListAction = createAction(\n resolve => (entities: unknown, type: string) => resolve({entities: entities || [], type}),\n);\n\nexport const entityCreatedAction = createAction(\n resolve => (entity: unknown, type: string) => resolve({entity, type}),\n);\n\nexport const entityUpdatedAction = createAction(\n resolve => (entity: { id: string, [key: string]: unknown }, type: string) => resolve({entity, type}),\n);\n\nexport const setDefaultAlarmStateAction = createAction(\n resolve => (alarmStateModel: AlarmStateModel) => resolve(alarmStateModel),\n);\n\nexport const setSoundStateAction = createAction(\n resolve => (soundState: SoundState) => resolve(soundState),\n);\n","import {createAction} from '../../base/fsa';\n\nexport const addUARTMessageAction = createAction(\n resolve => (message: string, type: string, time: string) => resolve({message, type, time}),\n);\n\nexport const clearUARTMessagesAction = createAction();\n","export function setSession(username: string, password: string) {\n sessionStorage.setItem('username', username);\n sessionStorage.setItem('password', password);\n}\n\nexport function removeSession() {\n sessionStorage.removeItem('username');\n sessionStorage.removeItem('password');\n}\n\nexport function getSession(): Promise<[string, string]> {\n return Promise.all(\n [\n sessionStorage.getItem('username'),\n sessionStorage.getItem('password'),\n ],\n ).then(([username, password]) => [username || 'default', password || 'default']);\n}\n","import {createAction} from '../../base/fsa';\nimport {RawDevice} from './state';\n\nexport const addRawDeviceAction = createAction(\n resolve => (rawDevice: RawDevice) => resolve({rawDevice}),\n);\n\nexport const removeRawDeviceAction = createAction(\n resolve => (rawDevice: RawDevice) => resolve({rawDevice}),\n);\n\nexport const clearRawDevicesAction = createAction();\n","import {createAction} from '../../base/fsa';\n\nexport const setTemperatureAction = createAction(\n resolve => (icon, temperature) => resolve({icon, temperature}),\n);\n","import {createAction} from '../../base/fsa';\n\nexport const setUserAction = createAction(resolve => (username: string, password: string) => resolve({username, password}));\n\nexport const clearUserAction = createAction();\n","import {ControlModel, UserRole} from '../types/control';\nimport {IntercomModel} from '../types/intercom';\nimport {\n controlSendErrorAction,\n mediaStatusUpdatedAction,\n setBellStatusAction,\n setIntercomInfoAction,\n setIntercomStatusAction,\n inputSendErrorAction,\n entityDeletedAction,\n entityCreatedAction, entityUpdatedAction,\n} from '../store/control/actions';\nimport {addUARTMessageAction} from '../store/debug/actions';\nimport {setAuthenticationAction, setSelectedBackgroundAction} from '../store/ui/actions';\nimport {Dispatch} from 'redux';\nimport {removeSession} from '../utils/session-storage';\nimport {addRawDeviceAction} from '../store/setup/actions';\nimport {RawDevice} from '../store/setup/state';\nimport {setTemperatureAction} from '../store/temperature/action';\nimport {TemperatureMessage} from '../store/temperature/state';\nimport {clearUserAction} from '../store/user/action';\nimport {MediaFileModel} from '../store/ui/state';\n\nexport class ClientTask {\n constructor(private dispatch: Dispatch) {\n }\n\n onControlSendError(controlId: string) {\n this.dispatch(controlSendErrorAction(controlId, true));\n }\n\n onInputSendError(inputId: string) {\n this.dispatch(inputSendErrorAction(inputId, true));\n }\n\n onUartMessage({message, type, time}: { message: string; type: string; time: string; }) {\n this.dispatch(addUARTMessageAction(message, type, time));\n }\n\n onMediaStatusUpdated(message: string) {\n this.dispatch(mediaStatusUpdatedAction(message));\n }\n\n onIntercomStatusChanged({status, info,id,name}: { status: string, info?: IntercomModel,id:string,name:string }) {\n if (info) {\n this.dispatch(setIntercomInfoAction(info));\n }\n\n let isIncomingCall = true;\n if (status === 'outgoing') {\n status = 'incoming';\n isIncomingCall = false;\n }\n\n this.dispatch(setIntercomStatusAction(status, isIncomingCall,id,name));\n }\n\n onBellRinging(status: string) {\n this.dispatch(setBellStatusAction('incoming'));\n }\n\n onEntityDeleted({id, type}: { id: string, type: string }) {\n this.dispatch(entityDeletedAction(id, type));\n }\n\n onEntityCreated({entity, type}: { type: string, entity: unknown }) {\n if (type === 'control') {\n const control = entity as ControlModel;\n if (control.temperature_settings != null) {\n control.temperature_settings.whole = control.temperature_settings.whole || 14;\n if (control.temperature_settings.whole === 14) {\n control.temperature_settings.fraction = 5;\n }\n }\n }\n\n if (type === 'mediaFile') {\n const background = entity as MediaFileModel;\n if (background.type === 'background') {\n this.dispatch(setSelectedBackgroundAction(background.id));\n }\n }\n\n this.dispatch(entityCreatedAction(entity, type));\n }\n\n onEntityUpdated({entity, type}: { type: string, entity: { id: string, [key: string]: unknown } }) {\n if (type === 'control') {\n // @ts-ignore\n const control = entity as ControlModel;\n if (control.temperature_settings != null) {\n control.temperature_settings.whole = control.temperature_settings.whole || 14;\n if (control.temperature_settings.whole === 14) {\n control.temperature_settings.fraction = 5;\n }\n }\n }\n\n this.dispatch(entityUpdatedAction(entity, type));\n }\n\n onAuthenticated(role: UserRole) {\n this.dispatch(setAuthenticationAction(role));\n\n if (role === 'default') {\n removeSession();\n this.dispatch(clearUserAction());\n }\n }\n\n onDeviceRevealed(deviceRevealMessage: RawDevice) {\n this.dispatch(addRawDeviceAction(deviceRevealMessage));\n }\n\n onTemperatureUpdated(temperatureMessage: TemperatureMessage) {\n this.dispatch(setTemperatureAction(temperatureMessage.icon, temperatureMessage.temperature));\n }\n}\n","import {RPCService} from '../service/rpc-service';\nimport {createContext, useContext} from 'react';\n\nexport type RPCContextType = [RPCService, boolean, number];\n\nexport const RPCContext = createContext(null);\n\nexport const useRPC = () => useContext(RPCContext);\n","import {useLayoutEffect, useState} from 'react';\n\nexport function useWindowSize() {\n const [size, setSize] = useState([0, 0]);\n useLayoutEffect(() => {\n const updateSize = () => {\n setSize([window.innerWidth, window.innerHeight]);\n };\n\n window.addEventListener('resize', updateSize);\n updateSize();\n return () => window.removeEventListener('resize', updateSize);\n }, []);\n return size;\n}\n","import {useWindowSize} from './window-size';\n\ntype Orientation = 'horizontal' | 'vertical' | 'none';\n\nexport function useOrientation(defaultValue: Orientation = 'none'): Orientation {\n const [innerWidth, innerHeight] = useWindowSize();\n if (innerWidth === 1024 && innerHeight === 600) {\n return 'horizontal';\n }\n if (innerWidth === 600 && innerHeight === 1024) {\n return 'vertical';\n }\n\n return defaultValue;\n}\n","import React, {memo, ReactNode} from 'react';\n\nimport './index.scss';\nimport {useOrientation} from '../../hooks/orientation';\n\ntype Props = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Container = memo(function Container({children, className}: Props) {\n const orientation = useOrientation();\n\n return (\n \n {children}\n \n );\n});\n","const isTouchable = 'ontouchstart' in document.documentElement;\nlet moved = false;\nlet touchedObject = null;\n\nexport function onClickHandler(handler) {\n return {\n onTouchStart: (e) => {\n touchedObject = e.target;\n },\n onTouchMove: (e) => {\n moved = true;\n },\n onTouchEnd: (e) => {\n if (moved) {\n moved = false;\n return;\n }\n if (!isTouchable) {\n return;\n }\n\n if (e.target !== touchedObject) {\n return;\n }\n if (handler) {\n handler(e);\n e.preventDefault();\n }\n },\n onClick: (e) => {\n if (isTouchable) {\n return;\n }\n\n if (handler) {\n handler(e);\n }\n },\n };\n}\n","import {useCallback, useEffect, useRef} from 'react';\n\nexport function useInterval(handler: Function, timeout?: number) {\n const callbackRef = useRef();\n const idRef = useRef();\n\n useEffect(() => {\n callbackRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (timeout != null) {\n const id = setInterval(() => callbackRef.current(), timeout);\n idRef.current = id;\n return () => {\n clearInterval(id);\n };\n } else {\n idRef.current = null;\n }\n }, [timeout]);\n\n return useCallback(() => {\n clearInterval(idRef.current);\n }, []);\n}\n","import React, {memo, useCallback, useEffect, useState} from 'react';\nimport noImage from '../../assets/images/no-image.png';\nimport {useInterval} from '../../hooks/interval';\nimport {Configs} from '../../configs';\n\ntype Props =\n { interval?: number; disableErrorHandling?: boolean; disablePrefix?: boolean; }\n & React.DetailedHTMLProps, HTMLImageElement>;\nexport const Image = memo(function Image(props: Props) {\n const {src: source, disableErrorHandling, disablePrefix, interval: rawInterval, alt, ...restOfProps} = props;\n\n const [hasError, setHasError] = useState(false);\n const [interval, setInterval] = useState(rawInterval);\n const [src, setSrc] = useState(source);\n const [randomValue, setRandomValue] = useState(0);\n\n useInterval(useCallback(() => setRandomValue(Math.random()), []), interval);\n\n const onError = useCallback(() => {\n if (hasError || disableErrorHandling) {\n return;\n }\n\n setInterval(null);\n setHasError(true);\n setSrc(noImage);\n }, [hasError, disableErrorHandling]);\n\n useEffect(() => {\n if (hasError) {\n return;\n }\n\n setInterval(rawInterval);\n }, [hasError, rawInterval]);\n\n useEffect(() => {\n setHasError(false);\n setSrc(source);\n }, [source]);\n\n return (\n \n );\n});\n","let timeout;\nexport const WindowUtil = {\n stop: function () {\n timeout = setTimeout(() => {\n window.stop();\n }, 5000);\n },\n\n cancel: function () {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n },\n};\n","import {DependencyList, useCallback, useMemo} from 'react';\n\nfunction idSelector(c: T): string {\n return c['id'];\n}\n\nexport function useSet(content: T[], selector: (c: T) => string = idSelector, deps: DependencyList = []) {\n const predicate = useCallback(selector, deps);\n return useMemo(() => {\n return content.reduce<{ [key: string]: T }>(\n (p, c) => ({[predicate(c)]: c, ...p}),\n {},\n );\n }, [content, predicate]);\n}\n","import {DefaultRootState, useSelector} from 'react-redux';\nimport {useSet} from './set';\nimport {DependencyList} from 'react';\n\nexport function useSetSelector(\n selector: (state: TState) => TSelected[],\n setSelector?: (selected: TSelected) => string,\n deps?: DependencyList) {\n return useSet(useSelector(selector), setSelector, deps);\n}\n","import {Image} from '../Image';\nimport React, {useMemo} from 'react';\nimport {useSetSelector} from '../../hooks/set-selector';\nimport {CameraBrandModel} from '../../types/control';\nimport {Configs} from '../../configs';\n\ntype Props = {\n id: string;\n quality: 360 | 720;\n className?: string;\n mode?: 'auto' | 'snapshot' | 'rtsp' | 'video_cgi' | 'mjpeg';\n brand?: CameraBrandModel;\n}\n\ntype RendererProps = {\n ip: string;\n port?: number;\n} & Props;\n\nexport function VideoCGIRenderer(props: RendererProps) {\n const subUrl = useMemo(() => {\n const urls: { [key: number]: string } = {};\n\n if (props.brand.video_cgi.stream.q_720p) {\n urls[720] = props.brand.video_cgi.stream.q_720p;\n }\n\n if (props.brand.video_cgi.stream.q_360p) {\n urls[360] = props.brand.video_cgi.stream.q_360p;\n }\n\n if (props.quality === 720) {\n return urls[720] || urls[360];\n }\n\n return urls[360] || urls[720];\n }, [props.brand, props.quality]);\n\n const url = 'http://' + props.ip + ':' + props.port;\n\n return (\n \n );\n}\n\nexport function MJPEGRenderer(props: RendererProps) {\n const quality = useMemo(() => {\n const urls: { [key: number]: number } = {};\n\n if (props.brand.mjpeg.stream.q_720p) {\n urls[720] = 720;\n }\n\n if (props.brand.mjpeg.stream.q_360p) {\n urls[360] = 360;\n }\n\n if (props.quality === 720) {\n return urls[720] || urls[360];\n }\n\n return urls[360] || urls[720];\n }, [props.brand, props.quality]);\n const url = `${Configs.IMAGE_PREFIX}/camera/mjpeg/${props.id}/${quality}`;\n\n return (\n \n );\n}\n\nexport function RTSPRenderer(props: RendererProps) {\n const url = `${Configs.IMAGE_PREFIX}/camera/rtsp/${props.id}`;\n\n return (\n \n );\n}\n\nexport function SnapshotRenderer(props: RendererProps) {\n const random = useMemo(()=>Math.random(),[]);\n const url = `${Configs.IMAGE_PREFIX}/camera/snapshot/${props.id}?v=${random}`;\n\n return (\n \n );\n}\n\nexport function CameraRenderer(props: Props) {\n const cameraSet = useSetSelector(state => state.control.cameraList);\n const cameraBrandSet = useSetSelector(state => state.control.cameraBrandList);\n const selectedCamera = useMemo(() => cameraSet[props.id], [cameraSet, props.id]);\n const selectedCameraBrand = useMemo(() => selectedCamera && cameraBrandSet[selectedCamera.camera_brand_id], [cameraBrandSet, selectedCamera]);\n\n if (!selectedCamera || !selectedCameraBrand) {\n return null;\n }\n\n if (props.mode === 'snapshot' && (selectedCamera.rtsp || selectedCamera.mjpeg)) {\n return (\n \n );\n }\n\n if (selectedCamera.video_cgi && (props.mode === 'video_cgi' || props.mode === 'auto' || props.mode === 'snapshot')) {\n return (\n \n );\n }\n\n if (selectedCamera.mjpeg && (props.mode === 'mjpeg' || props.mode === 'auto')) {\n return (\n \n );\n }\n\n if (selectedCamera.rtsp && (props.mode === 'rtsp' || props.mode === 'auto')) {\n return (\n \n );\n }\n\n return null;\n}\n","export type UserRole = 'default' | 'user' | 'admin' | 'service' | 'developer';\n\nexport enum GatewayCommand {\n Unknown,\n Shutdown,\n Reboot,\n RestartWorker,\n RestartSupervisor\n}\n\nexport interface UserNotificationSettings {\n alarm: boolean;\n intercom: boolean;\n bell: boolean;\n intertext: boolean;\n}\n\nexport interface UserModel {\n id: string;\n username: string;\n role: UserRole;\n mobile_os?: string;\n push_token?: string;\n notification_settings: UserNotificationSettings;\n}\n\nexport interface GatewayInfoModel {\n id: string;\n name: string;\n}\n\nexport interface UpdateUserModel extends UserModel {\n password: string;\n alarm_password: string;\n}\n\nexport interface MediaModel {\n id: string;\n name: string;\n bridge_device_id: string;\n icon: string;\n type_id: string;\n start_slot: number;\n button_list: MediaDeviceButton[];\n state: T;\n}\n\nexport type DeviceParameters = (IOControlParameters | GlassControlParameters);\nexport type ControlParameters = (ThreePhaseControlParameters | PulseControlParameters | SirenControlParameters | AlarmControlParameters | SimpleControlParameters | DimmerControlParameters);\n\nexport const CONTROL_TYPE_ID_LIGHT = '1';\nexport const CONTROL_TYPE_ID_DIMMER = '2';\nexport const CONTROL_TYPE_ID_CURTAIN = '3';\nexport const CONTROL_TYPE_ID_PLUG = '4';\nexport const CONTROL_TYPE_ID_ALARM = '6';\nexport const CONTROL_TYPE_ID_THERMOSTAT = '7';\nexport const CONTROL_TYPE_ID_VALVE = '9';\nexport const CONTROL_TYPE_ID_CONTACTOR = '10';\nexport const CONTROL_TYPE_ID_ELEVATOR = '11';\nexport const CONTROL_TYPE_ID_AIR_CONDITIONER = '13';\nexport const CONTROL_TYPE_ID_SIREN = '15';\n\nexport const ALARM_VALUE_HOME = 2;\nexport const ALARM_VALUE_OUTSIDE = 3;\n\nexport const MEDIA_TYPE_ID_AIR_CONDITIONER = '1';\n\nexport const BRIDGE_DEVICE_TYPE_ID_INO_PAN = '11';\nexport const BRIDGE_DEVICE_TYPE_ID_INO_PAN_2 = '12';\nexport const BRIDGE_DEVICE_TYPE_ID_INO_PAN_3 = '20';\nexport const BRIDGE_DEVICE_TYPE_ID_STPM = '5';\nexport const BRIDGE_DEVICE_TYPE_ID_STS_PLUS = '23';\nexport const BRIDGE_DEVICE_TYPE_ID_ST = '6';\n\nexport interface ControlModel {\n isUpdating?: boolean;\n hasError?: boolean;\n\n id: string;\n name: string;\n type_id: string;\n bridge_device_id: string;\n area_id: string;\n current_value?: number;\n temperature_settings?: TemperatureControlSettings;\n parameters: DeviceParameters & ControlParameters;\n is_active?: boolean;\n // down_output_number\t\t\t`int`\t\tthree_phase\t\t\t\tall ThreePhaseControlParameters\n // output_time_limit\t\t\t`int`\t\tthree_phase\t\t\t\tall ThreePhaseControlParameters\n // pulse_time\t\t\t\t\t`int`\t\tpulse\t\t\t\t\tio PulseControlParameters\n // should_remember_last_value\t`bool`\t\t!complex[alarm]\t\t\tio IOControlParameters\n // default_value\t\t\t\t`int`\t\t!complex[alarm]\t\t\tio IOControlParameters\n // should_output_reverse\t\t`bool`\t\tall\t\t\t\t\t\tio IOControlParameters\n // control_id\t\t\t\t\t`string`\tcomplex[alarm]\t\t\tio AlarmControlParameters\n // siren_type\t\t\t\t\t`int`\t\tcomplex[alarm]\t\t\tio AlarmControlParameters\n // alarm_level\t\t\t\t\t`int`\t\tcomplex[alarm, siren]\tio SirenControlParameters\n // delay_time\t\t\t\t\t`int`\t\tcomplex[alarm]\t\t\tio AlarmControlParameters\n // max_limit\t\t\t\t\t`int`\t\tcomplex[dimmer]\t\t\tall DimmerControlParameters\n // min_limit\t\t\t\t\t`int`\t\tcomplex[dimmer]\t\t\tall DimmerControlParameters\n // page_number\t\t\t\t\t`int`\t\tall\t\t\t\t\t\tglass GlassControlParameters\n // row_number\t\t\t\t\t`int`\t\tall\t\t\t\t\t\tglass GlassControlParameters\n // should_output_reverse\t\t`bool`\t\tbasic\t\t\t\t\tglass BasicGlassControlParameters\n}\n\nexport type IOControlParameters = {\n output_number: number;\n should_output_reverse: boolean;\n should_remember_last_value: boolean;\n default_value: number;\n};\n\nexport type GlassControlParameters = {\n output_number: number;\n button_number: number;\n};\n\nexport type ThreePhaseControlParameters = {\n output_time_limit: number;\n down_output_number: number;\n};\n\nexport type PulseControlParameters = {\n pulse_time: number;\n};\n\nexport type SirenControlParameters = {\n alarm_level: number;\n};\n\nexport type AlarmControlParameters = {\n siren_type: number;\n delay_time: number;\n relational_control_id: string;\n is_virtual_control: boolean;\n} & SirenControlParameters;\n\nexport type SimpleControlParameters = {\n should_output_reverse: boolean;\n};\n\nexport type DimmerControlParameters = {\n max_limit: number;\n min_limit: number;\n};\n\nexport type SimpleSet = {\n active: string;\n passive: string;\n};\n\nexport type ThreePhaseSet = {\n up: string;\n down: string;\n stop: string;\n};\n\nexport type ThermostatImageSet = {\n cold_on: string;\n cold_off: string;\n heat_on: string;\n heat_off: string;\n};\n\nexport type ImageSet = {\n default: string;\n [key: string]: string;\n} & T;\n\nexport type ControlRenderType = 'complex' | 'simple' | 'three_phase' | 'two_phase' | 'pulse';\n\nexport interface ControlTypeModel {\n id: string;\n name: string;\n render_type: ControlRenderType;\n image_set: ImageSet;\n show_on_scenario: boolean;\n show_on_homepage: boolean;\n ask_value_in_initialize: boolean;\n glass_device_internal_icon_id: number;\n allowed_bridge_device_type_id_list: string[];\n}\n\nexport interface CameraModel {\n id: string;\n name: string;\n camera_brand_id: string;\n area_id: string;\n ip: string;\n username?: string;\n password?: string;\n\n rtsp?: CameraConnectionConfigModel;\n video_cgi?: CameraConnectionConfigModel;\n mjpeg?: CameraConnectionConfigModel;\n}\n\nexport interface CameraConnectionConfigModel {\n port: number;\n remote_port: number;\n}\n\nexport interface CameraBrandModel {\n id: string;\n name: string;\n\n is_usb: boolean;\n authentication_required: boolean;\n rtsp?: RTSPConfigModel;\n video_cgi?: VideoCGIConfigModel;\n mjpeg?: MJPEGConfigModel;\n}\n\nexport interface MJPEGConfigModel {\n stream: StreamConfigModel;\n delay_ms: number;\n}\n\nexport interface VideoCGIConfigModel {\n stream: StreamConfigModel;\n}\n\nexport interface RTSPConfigModel {\n stream: StreamConfigModel;\n}\n\nexport interface StreamConfigModel {\n q_360p?: string;\n q_720p?: string;\n}\n\nexport type InputPrimitiveType = 'momentary' | 'latch' | 'absolute' | 'sensor';\n\nexport interface InputTypeModel {\n id: string;\n name: string;\n primitive_name: InputPrimitiveType;\n registered_by_system?: boolean;\n}\n\nexport const INPUT_TYPE_ID_MOMENTARY = '0';\nexport const INPUT_TYPE_ID_LATCH = '1';\nexport const INPUT_TYPE_ID_ABSOLUTE = '2';\nexport const INPUT_TYPE_ID_SCENARIO = '3';\nexport const INPUT_TYPE_ID_SENSOR = '4';\n\n\nexport interface InputModel {\n isUpdating?: boolean;\n hasError?: boolean;\n\n id: string;\n name: string;\n type_id: string;\n bridge_device_id: string;\n input_number: number;\n is_active: boolean;\n relational_id: string;\n is_virtual_control: boolean;\n direction?: number;\n should_output_reverse?: boolean;\n sensor_settings?: SensorSettings;\n registered_by_system?: boolean;\n}\n\nexport interface SensorTypeModel {\n id: string;\n name: string;\n image_set: ImageSet;\n}\n\nexport interface SensorSettings {\n sensor_type_id: string;\n value?: boolean;\n}\n\nexport interface TemperatureControlSettings {\n whole?: number;\n fraction?: number;\n sensor_slot?: number;\n bridge_device_id: string;\n is_mode_heating: boolean;\n has_heating: boolean;\n has_cooling: boolean;\n}\n\nexport interface MediaDeviceButton {\n slot: number;\n registered: boolean;\n}\n\nexport enum AirMode {\n Auto,\n Dry,\n Fan,\n Cold,\n Hot,\n}\n\nexport interface AirConditionerState {\n open: boolean;\n mode: AirMode;\n temperature: number;\n fan_speed: number;\n flap_speed: number;\n}\n\nexport interface BaseModel {\n id: string;\n type_id?: string;\n registered_by_system?: boolean;\n}\n\nexport interface RelationModel {\n relational_id: string;\n type: string;\n should_update: boolean;\n}\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {CameraModel} from '../../types/control';\n\nimport './index.scss';\nimport {Container} from '../../components/Container';\nimport {useSelector} from 'react-redux';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useOrientation} from '../../hooks/orientation';\nimport {CameraRenderer} from '../../components/CameraRenderer';\nimport {WindowUtil} from '../../utils/window';\n\nexport const CameraScreen = memo(function CameraScreen() {\n const [selectedCamera, setSelectedCamera] = useState(null);\n const [cameraMode, setCameraMode] = useState(null);\n const orientation = useOrientation();\n const cameraList = useSelector(state => state.control.cameraList);\n\n const onCameraPress = useCallback((camera: CameraModel) => {\n if (selectedCamera) {\n setSelectedCamera(null);\n WindowUtil.stop();\n } else {\n setSelectedCamera(camera);\n WindowUtil.cancel();\n }\n }, [selectedCamera]);\n\n const onCameraModeChange = useCallback((mode: string) => {\n setCameraMode(mode);\n localStorage.setItem(`camera_mode_${selectedCamera?.id}`, mode);\n }, [selectedCamera?.id]);\n\n const cameraModeList = useMemo(() => {\n if (selectedCamera == null) {\n return [];\n }\n return [\n {text: 'RTSP', value: 'rtsp', key: 'rtsp'},\n {text: 'CGI', value: 'video_cgi', key: 'video_cgi'},\n {text: 'MJPEG', value: 'mjpeg', key: 'mjpeg'},\n ].filter(mode => selectedCamera[mode.value] != null);\n }, [selectedCamera]);\n\n useEffect(() => {\n const data = localStorage.getItem(`camera_mode_${selectedCamera?.id}`);\n if (data != null) {\n setCameraMode(data);\n } else {\n if (cameraModeList.length > 0) {\n setCameraMode(cameraModeList[0].value);\n }\n }\n }, [cameraModeList, selectedCamera?.id]);\n\n return (\n \n
\n
\n {\n cameraList.map(camera => (\n onCameraPress(camera))}>\n {\n renderIf(selectedCamera)(() =>\n
\n {\n cameraModeList.map(({text, value, key}) =>\n {\n e.stopPropagation();\n onCameraModeChange(value);\n })}\n key={key}>\n {text}\n
,\n )\n }\n
,\n )\n }\n \n {camera.name}\n
\n ))\n }\n \n \n
\n );\n});\n","import React, {memo} from 'react';\n\nimport './index.scss';\nimport {onClickHandler} from '../../utils/onclick';\n\ntype Props = {\n hash: string;\n onKeyPress: (key: string) => void;\n};\n\nexport const Numpad = memo(function Numpad({hash, onKeyPress}: Props) {\n return (\n
\n
\n {hash}\n
\n onKeyPress('1'))}>1\n onKeyPress('2'))}>2\n onKeyPress('3'))}>3\n
\n
\n onKeyPress('4'))}>4\n onKeyPress('5'))}>5\n onKeyPress('6'))}>6\n
\n
\n onKeyPress('7'))}>7\n onKeyPress('8'))}>8\n onKeyPress('9'))}>9\n
\n
\n \n onKeyPress('0'))}>0\n onKeyPress('X'))}>X\n
\n
\n
\n );\n});\n","import {useDispatch} from 'react-redux';\nimport {useCallback, useMemo} from 'react';\nimport {showMessageAction} from '../store/ui/actions';\n\nexport function useMessage() {\n const dispatch = useDispatch();\n const failure = useCallback((message: string, closable = true) => {\n dispatch(showMessageAction('failure', message, null, closable));\n }, [dispatch]);\n const success = useCallback((message: string, closable = true) => {\n dispatch(showMessageAction('success', message, null, closable));\n }, [dispatch]);\n const info = useCallback((message: string, closable = true) => {\n dispatch(showMessageAction('info', message, null, closable));\n }, [dispatch]);\n\n return useMemo(() => ({failure, success, info}), [failure, info, success]);\n}\n","import {useTranslation} from 'react-i18next';\nimport {useCallback, useState} from 'react';\nimport i18n, {Callback, TFunction} from 'i18next';\n\nexport function useLocalization(ns: string[] = []) {\n const {t} = useTranslation(ns);\n const [currentLanguage, setCurrentLanguage] = useState(localStorage.getItem('i18n-lng'));\n\n const changeLanguage = useCallback((lng?: string, callback?: Callback) => {\n if (lng && lng !== currentLanguage) {\n localStorage.setItem('i18n-lng', lng);\n setCurrentLanguage(lng);\n }\n\n return i18n.changeLanguage(lng, callback);\n }, [currentLanguage]);\n\n const rawT = useCallback((key: string, ...params) => {\n if (!key) {\n return '';\n }\n\n return t(key.toString().toLowerCase(), ...params);\n }, [t]);\n\n return {t: rawT as TFunction, changeLanguage, currentLanguage};\n}\n","import React, {memo, useCallback, useEffect, useState} from 'react';\nimport './index.scss';\n\nimport iconAlarmHome from '../../assets/images/icons/alarm/alarm-home.png';\nimport iconAlarmOutside from '../../assets/images/icons/alarm/alarm-outside.png';\nimport iconCancel from '../../assets/images/icons/alarm/cancel.png';\nimport iconAbort from '../../assets/images/icons/alarm/abort.png';\nimport iconOK from '../../assets/images/icons/alarm/ok.png';\nimport iconHome from '../../assets/images/icons/alarm/home.png';\nimport iconOutside from '../../assets/images/icons/alarm/outside.png';\nimport iconTime from '../../assets/images/icons/alarm/time.png';\nimport {useRPC} from '../../hooks/rpc';\nimport {useNumpad} from '../../hooks/numpad';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useInterval} from '../../hooks/interval';\nimport {useMessage} from '../../hooks/message';\nimport {onClickHandler} from '../../utils/onclick';\nimport {Container} from '../../components/Container';\nimport {useSetSelector} from '../../hooks/set-selector';\nimport {ALARM_VALUE_HOME, ALARM_VALUE_OUTSIDE} from '../../types/control';\nimport {alarmSettingUpAction} from '../../store/ui/actions';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const AlarmScreen = memo(function AlarmScreen() {\n const {t} = useLocalization();\n const defaultAlarmState = useSelector(state => state.control.alarmState.default);\n const sensorTypeSet = useSetSelector(state => state.control.sensorTypeList);\n const alarmSettingUp = useSelector(state => state.ui.alarmSettingUp);\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n\n const config = useSelector(state => state.control.config);\n\n const [isHome, setIsHome] = useState(defaultAlarmState.level === 1 ? null : (defaultAlarmState.level === 2));\n const [isFlicking, setIsFlicking] = useState(false);\n const [isSet, setIsSet] = useState(false);\n const [isAborted, setIsAborted] = useState(false);\n const [isSetComplete, setIsSetComplete] = useState(false);\n const [currentTimer, setCurrentTimer] = useState(60);\n const [renderNumpad, password, setPassword] = useNumpad(isAborted);\n const {failure} = useMessage();\n\n const homeTimer = config.alarm_settings.home_timer_seconds;\n const outsideTimer = config.alarm_settings.outside_timer_seconds;\n const isRinging = defaultAlarmState.will_ring || defaultAlarmState.ringing;\n\n useEffect(() => {\n setIsHome(defaultAlarmState.level === 1 ? null : (defaultAlarmState.level === 2));\n }, [defaultAlarmState]);\n\n useEffect(() => {\n let interval;\n if (isRinging) {\n interval = setInterval(() => {\n setIsFlicking(prevState => !prevState);\n }, 250);\n }\n return () => {\n clearInterval(interval);\n };\n }, [isRinging]);\n\n useInterval(() => {\n if (isSet && !isSetComplete) {\n if (currentTimer > 0) {\n setCurrentTimer(value => value - 1);\n } else {\n setIsSetComplete(true);\n rpc.setAlarm(isHome ? ALARM_VALUE_HOME : ALARM_VALUE_OUTSIDE, '')\n .catch(failure);\n }\n } else {\n if (alarmSettingUp) {\n dispatch(alarmSettingUpAction(false));\n }\n }\n }, 1000);\n\n useEffect(() => {\n setCurrentTimer(isHome ? homeTimer : outsideTimer);\n }, [isSet, isHome, homeTimer, outsideTimer]);\n\n useEffect(() => {\n const level = defaultAlarmState.level;\n if (level === 3 || level === 2) {\n setIsSetComplete(true);\n setIsSet(true);\n setIsAborted(false);\n } else if (level === 1) {\n setIsSetComplete(false);\n setIsSet(false);\n setIsAborted(false);\n } else {\n setIsSetComplete(false);\n setIsSet(false);\n setIsAborted(true);\n }\n }, [defaultAlarmState]);\n\n const handlePassword = useCallback(done => {\n if (!done) {\n failure(t('pls_enter_a_valid_password'));\n } else {\n setPassword('');\n }\n }, [t, failure, setPassword]);\n\n const set = useCallback(() => {\n if (isRinging) {\n rpc.setAlarm(1, password).then(handlePassword);\n } else if (isSet) {\n if (!isSetComplete) {\n setIsSet(false);\n dispatch(alarmSettingUpAction(false));\n } else {\n rpc.setAlarm(1, password).then(handlePassword);\n }\n } else {\n setIsSet(true);\n setIsSetComplete(false);\n dispatch(alarmSettingUpAction(true));\n }\n\n setPassword('');\n }, [handlePassword, isRinging, isSet, isSetComplete, password, rpc, setPassword, dispatch]);\n\n const setHome = useCallback((isHome: boolean) => {\n if (isSet) {\n return;\n }\n\n setIsHome(isHome);\n set();\n }, [isSet, set]);\n\n const abort = useCallback(() => {\n if (isAborted) {\n rpc.setAlarm(1, '');\n } else {\n rpc.setAlarm(0, password).then(handlePassword);\n }\n }, [handlePassword, isAborted, password, rpc]);\n\n const showHomeButton = !isRinging && (isHome || !isSet);\n const homeButtonImage = !isSet ? '' : (isSetComplete ? 'active' : 'passive');\n\n const showOutsideButton = !isRinging && (!isHome || !isSet);\n const outsideButtonImage = !isSet ? '' : (isSetComplete ? 'active' : 'passive');\n\n const showRingingButton = isRinging;\n\n const showCancelButton = isSet || isRinging;\n const cancelButtonImage = (isRinging && !isFlicking) ? '' : ' abort';\n\n const showTimerPanel = !isRinging && (!isSet || !isSetComplete);\n\n return (\n \n
\n
\n
\n {\n renderIf(isAborted)(() =>\n
\n
\n \n
\n {t('re_activate')}\n
,\n () =>\n <>\n {\n renderIf(showHomeButton)(() =>\n
setHome(true))}\n className=\"alarm-setup-button\">\n \n \n
\n {isSetComplete === true ? t('at_home_installed') : t('at_home_install')}\n
,\n )\n }\n {\n renderIf(showOutsideButton)(() =>\n
setHome(false))}\n className=\"alarm-setup-button\">\n \n \n
\n {isSetComplete === true ? t('at_out_installed') : t('at_out_install')}\n
,\n )\n }\n {\n renderIf(showRingingButton)(() =>\n
\n \n \n
\n {t('alarm_run')}\n
,\n )\n }\n {\n renderIf(showCancelButton)(() =>\n
\n \n \n
\n {t('cancel_the_alarm')}\n ,\n )\n }\n {\n
\n
\n \n
\n {t('disable')}\n
\n }\n ,\n )\n }\n \n {\n renderIf(showTimerPanel)(() =>\n
\n
\n {t('TIMER_TIME')}\n
\n
\n
\n \n
\n {homeTimer}\n
\n
\n
\n \n
\n {outsideTimer}\n
\n
\n
\n \n
\n {t('TIME_REMAINING')}\n {!isSet ? '--' : currentTimer}\n
\n
,\n () => defaultAlarmState.latest_log_list.length > 0 ?\n
\n {\n defaultAlarmState.latest_log_list.map((log, index) => {\n const dateObject = new Date(log.timestamp * 1000);\n let hourString = dateObject.getHours().toString();\n if (hourString.length === 1) {\n hourString = '0' + hourString;\n }\n\n let minuteString = dateObject.getMinutes().toString();\n if (minuteString.length === 1) {\n minuteString = '0' + minuteString;\n }\n\n const timeString = `${hourString}.${minuteString}`;\n\n return (\n
\n \n {timeString}   {log.log_message}\n
\n );\n })\n }\n
: null,\n )}\n \n {\n renderNumpad()\n }\n \n
\n );\n});\n","import React, {ReactNode, useMemo, useState} from 'react';\nimport {Numpad} from '../components/Numpad';\n\nexport function useNumpad(disabled: boolean): [() => ReactNode, string, (name: string) => void] {\n const [password, setPassword] = useState('');\n const passwordHash = useMemo(\n () => password.length > 0 ? new Array(password.length).fill('*').join('') : 'Åžifre Giriniz',\n [password],\n );\n\n const keyPad = (key: string) => {\n if (disabled) {\n if (password !== '') {\n setPassword('');\n }\n return;\n }\n\n if (key === 'X') {\n if (password.length === 0) {\n return;\n }\n setPassword(password => password.substring(0, password.length - 1));\n } else {\n if (password.length >= 8) {\n return;\n }\n\n setPassword(password => password + key);\n }\n };\n\n const renderNumpad = () => {\n return (\n \n );\n };\n\n return [renderNumpad, password, setPassword];\n}\n","import React, {memo, useCallback, useState} from 'react';\n\nimport './index.scss';\nimport {Container} from '../../components/Container';\nimport yellowDoorIcon from '../../assets/images/icons/intercom/door_open1_icon.png';\nimport blueDoorIcon from '../../assets/images/icons/intercom/door_open2_icon.png';\nimport pingDoorIcon from '../../assets/images/icons/intercom/door_open3_icon.png';\nimport limeDoorIcon from '../../assets/images/icons/intercom/door_open4_icon.png';\nimport {setIntercomInfoAction, setIntercomStatusAction} from '../../store/control/actions';\nimport {IntercomModel} from '../../types/intercom';\nimport {useRPC} from '../../hooks/rpc';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {onClickHandler} from '../../utils/onclick';\nimport {CameraRenderer} from '../../components/CameraRenderer';\nimport {useLocalization} from \"../../hooks/localization\";\n\nconst doors = [yellowDoorIcon, blueDoorIcon, pingDoorIcon, limeDoorIcon];\nconst colors = ['yellow', 'blue', 'pink', 'lime'];\n\nexport const IntercomScreen = memo(function IntercomScreen() {\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n const {t} = useLocalization();\n\n const intercomList = useSelector(state => state.control.intercomList);\n const intercomState = useSelector(state => state.control.intercomState);\n const [disabledLookup, setDisabledLookup] = useState({});\n\n const click = useCallback((intercom: IntercomModel) => {\n dispatch(setIntercomInfoAction(intercom));\n dispatch(setIntercomStatusAction('special',true));\n }, [dispatch]);\n\n const openDoor = useCallback((e: React.MouseEvent, intercom: IntercomModel) => {\n e.stopPropagation();\n if (disabledLookup[intercom.door_id_list[0]]) {\n return;\n }\n\n rpc.openDoor(intercom.door_id_list[0]);\n setDisabledLookup(lookup => ({\n ...lookup,\n [intercom.door_id_list[0]]: true,\n }));\n\n setTimeout(() => {\n setDisabledLookup(lookup => ({\n ...lookup,\n [intercom.door_id_list[0]]: false,\n }));\n }, 3000);\n }, [disabledLookup, rpc]);\n\n if (intercomState.status === 'special' || (intercomState.status === 'incoming')) {\n return null;\n }\n\n return (\n \n
\n
\n {\n intercomList.map((intercom, index) => (\n
click(intercom))}>\n \n {\n renderIf(intercom.door_id_list.length > 0)(() =>\n \n {intercom.name}\n
openDoor(e, intercom))}>\n \"\"/\n {t('OPEN_THE_DOOR')}\n
\n
,\n )\n }\n
\n ))\n }\n
\n \n
\n );\n});\n","import Keyboard from 'react-simple-keyboard';\nimport React, {\n Dispatch,\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {useOrientation} from './orientation';\n\nexport type KeyboardTuple = [MutableRefObject, string, (value: string) => void];\ntype KeyboardLayout = 'shift' | 'default' | 'shift-persisted' | 'alt' | 'numpad' | 'numpad-extended';\n\nexport function useKeyboard(defaultLayout: KeyboardLayout = 'shift', persistLayout = false): [Dispatch, () => ReactNode, KeyboardTuple] {\n const [keyboardRef, setKeyboardRef] = useState(null);\n const [keyboardLayout, setKeyboardLayoutRaw] = useState(defaultLayout);\n const [currentInput, setCurrentInput] = useState(null);\n const orientation = useOrientation();\n const setKeyboardLayout = useCallback((value: KeyboardLayout) => {\n if (persistLayout) {\n return;\n }\n\n setKeyboardLayoutRaw(value);\n }, [persistLayout]);\n\n const keyboardVisible = useMemo(() => !!currentInput, [currentInput]);\n\n const setActiveInput = useCallback((activeInput: KeyboardTuple) => {\n if (orientation === 'none') {\n return;\n }\n\n if (activeInput && activeInput[1].length > 0) {\n setKeyboardLayout('default');\n } else {\n setKeyboardLayout('shift');\n }\n setCurrentInput(activeInput);\n }, [setKeyboardLayout, orientation]);\n\n const onChange = useCallback((content: string) => {\n currentInput[2](content);\n }, [currentInput]);\n\n const onKeyPress = useCallback((key: string) => {\n if (key === '{enter}') {\n currentInput[0].current.blur();\n return;\n }\n\n let layoutName = null;\n\n if (keyboardLayout === 'shift' && !(key.includes('{') && key.includes('}'))) {\n layoutName = 'default';\n }\n\n switch (key) {\n case '{shift}':\n case '{shift-activated}':\n case '{shift-persisted}':\n case '{default}':\n if (keyboardLayout === 'default') {\n layoutName = 'shift';\n } else if (keyboardLayout === 'shift') {\n layoutName = 'shift-persisted';\n } else {\n layoutName = 'default';\n }\n break;\n case '{alt}':\n case '{alt-right}':\n layoutName = keyboardLayout === 'alt' ? 'default' : 'alt';\n break;\n\n default:\n break;\n }\n\n if (layoutName) {\n setKeyboardLayout(layoutName);\n }\n }, [setKeyboardLayout, currentInput, keyboardLayout]);\n\n const layout = useMemo(() => {\n return {\n default: [\n 'q w e r t y u ı o p ğ ü {backspace}',\n 'a s d f g h j k l ş i ,',\n '{shift} < z x c v b n m ö ç . {shift}',\n '{alt} {space} {enter}',\n ],\n shift: [\n 'Q W E R T Y U I O P Ğ Ü {backspace}',\n 'A S D F G H J K L Ş İ ;',\n '{shift-activated} > Z X C V B N M Ö Ç : {shift-activated}',\n '{alt} {space} {enter}',\n ],\n 'shift-persisted': [\n 'Q W E R T Y U I O P Ğ Ü {backspace}',\n 'A S D F G H J K L Ş İ ;',\n '{shift-persisted} > Z X C V B N M Ö Ç : {shift-persisted}',\n '{alt} {space} {enter}',\n ],\n alt: [\n '1 2 3 4 5 6 7 8 9 0 {backspace}',\n `@ # $ & * ( ) ' \"`,\n '% - + = / ; : ! ?',\n '{default} {space} {enter}',\n ],\n numpad: [\n '1 2 3',\n '4 5 6',\n '7 8 9',\n '{empty} 0 {backspace}',\n ],\n 'numpad-extended': [\n '1 2 3',\n '4 5 6',\n '7 8 9',\n '{empty} - 0 . {backspace}',\n ],\n };\n\n // todo orientation\n\n }, []);\n\n const renderKeyboard = useCallback(() => renderIf(keyboardVisible)(() => (\n
\n \n
\n )), [currentInput, keyboardLayout, keyboardVisible, layout, onChange, onKeyPress, orientation]);\n\n useEffect(() => {\n if (keyboardRef && currentInput) {\n keyboardRef.setInput(currentInput[1]);\n }\n }, [keyboardRef, currentInput]);\n\n return [setActiveInput, renderKeyboard, currentInput];\n}\n","import {DependencyList, useCallback, useMemo} from 'react';\n\nexport function useFilter(content: T[], selector: (item: T) => boolean, deps: DependencyList = []) {\n const predicate = useCallback(selector, deps);\n return useMemo(() => content.filter(predicate), [content, predicate]);\n}\n","import React, {memo, useCallback, useRef, useState} from 'react';\n\nimport './index.scss';\nimport iconSave from '../../assets/images/icons/media/save.png';\nimport iconTv from '../../assets/images/icons/media/tv.png';\nimport iconAirConditioner from '../../assets/images/icons/media/air-conditioner.png';\nimport iconMusicPlayer from '../../assets/images/icons/media/music-player.png';\nimport iconSatellite from '../../assets/images/icons/media/satellite.png';\nimport iconProjection from '../../assets/images/icons/media/projection.png';\nimport iconOther from '../../assets/images/icons/media/other.png';\nimport {useKeyboard} from '../../hooks/keyboard';\nimport {useRPC} from '../../hooks/rpc';\nimport {setMediaScreenAction} from '../../store/ui/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Container} from '../../components/Container';\nimport {useHistory} from 'react-router-dom';\nimport {useMessage} from '../../hooks/message';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useSetSelector} from '../../hooks/set-selector';\nimport {useFilter} from '../../hooks/filter';\nimport {useLocalization} from \"../../hooks/localization\";\n\n\nconst MyButton = memo(function MyButton({type, selected, onClick}: { type: string; selected: boolean; onClick: (type: string) => void }) {\n let icon = iconOther;\n switch (type) {\n case 'air-conditioner':\n icon = iconAirConditioner;\n break;\n case 'tv':\n icon = iconTv;\n break;\n case 'music-player':\n icon = iconMusicPlayer;\n break;\n case 'satellite':\n icon = iconSatellite;\n break;\n case 'projection':\n icon = iconProjection;\n break;\n }\n\n let style = 'button';\n if (!selected) {\n style += ' no-border';\n }\n\n return (\n
onClick(type))}>\n \"\"/\n
\n );\n});\n\nconst MyRadioButton = memo(function MyRadioButton({label, id, selected, onClick}: { selected: boolean; label: string; id: string; onClick: (id: string) => void; }) {\n const onPress = useCallback(() => {\n onClick(id);\n }, [id, onClick]);\n\n return (\n
\n
\n {renderIf(selected)(() =>
)}\n
\n {label}\n
\n );\n});\n\nexport const MediaCreateScreen = memo(function MediaCreateScreen() {\n const {t} = useLocalization();\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n\n const dispatch = useDispatch();\n const history = useHistory();\n const {failure} = useMessage();\n\n const [rpc] = useRPC();\n const inputRef = useRef();\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const [mediaName, setMediaName] = useState('');\n const [bridgeDeviceId, setBridgeDeviceId] = useState('');\n const [selectedType, setSelectedType] = useState('air-conditioner');\n\n const devices = useFilter(\n bridgeDeviceList,\n device => bridgeDeviceTypeSet[device.type_id].is_media_device,\n [bridgeDeviceTypeSet],\n );\n\n const onFocus = useCallback(() => {\n setActiveInput([inputRef, mediaName, setMediaName]);\n }, [mediaName, setActiveInput]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const save = useCallback(() => {\n if (mediaName == null || mediaName.trim().length < 3) {\n failure(t('REMOTE_NAME_MUST_CONTAIN_AT_LEAST_3_CHARACTERS'));\n return;\n }\n\n if (bridgeDeviceId == null || bridgeDeviceId === '') {\n failure(t('PLS_SELECT_A_DEVICE'));\n return;\n }\n\n rpc.createMediaDevice({name: mediaName, type: selectedType, bridge_device_id: bridgeDeviceId})\n .then(media => {\n history.push('/media-remote');\n dispatch(setMediaScreenAction(media, true));\n setSelectedType('air-conditioner');\n setMediaName('');\n setBridgeDeviceId('');\n });\n }, [t, failure, dispatch, history, bridgeDeviceId, mediaName, rpc, selectedType]);\n\n return (\n \n
\n
\n
\n
\n setMediaName(e.target.value)}\n className=\"highlighted\"\n onFocus={onFocus} onBlur={onBlur}\n value={mediaName}/>\n
save())}>\n \n {t('SAVE')}\n
\n
\n
\n
\n
\n
\n {t('SELECT_REMOTE_TYPE')}\n
\n \n \n \n \n \n \n
\n
\n
\n {t('SELECT_DEVICE')}\n {\n devices.map(device => )\n }\n
\n
\n
\n {\n renderKeyboard()\n }\n
\n );\n});\n","import {UserRole} from '../types/control';\n\nexport function hasAuthority(role: UserRole, requiredRole: UserRole) {\n if (role == null) {\n return false;\n }\n\n if (role === 'developer') {\n return true;\n }\n\n if (role === 'service') {\n return requiredRole === 'service' || requiredRole === 'admin' || requiredRole === 'user' || requiredRole === 'default';\n }\n\n if (role === 'admin') {\n return requiredRole === 'admin' || requiredRole === 'user' || requiredRole === 'default';\n }\n\n if (role === 'user') {\n return requiredRole === 'default' || requiredRole === 'user';\n }\n\n return requiredRole === 'default';\n}\n","import React, {memo, ReactNode, useCallback, useMemo, useRef, useState} from 'react';\nimport {Container} from '../Container';\n\nimport './index.scss';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useKeyboard} from '../../hooks/keyboard';\nimport {useRPC} from '../../hooks/rpc';\nimport {UserRole} from '../../types/control';\nimport {hasAuthority} from '../../utils/role';\nimport {useMessage} from '../../hooks/message';\nimport {onClickHandler} from '../../utils/onclick';\nimport {setSession} from '../../utils/session-storage';\nimport {setUserAction} from '../../store/user/action';\nimport {useLocalization} from \"../../hooks/localization\";\n\ntype Props = {\n children?: ReactNode;\n isFullscreen?: boolean;\n requiredRole: UserRole;\n};\n\nexport const PasswordContainer = memo(function PasswordContainer({children, requiredRole, isFullscreen}: Props) {\n const {t} = useLocalization();\n const role = useSelector(state => state.ui.role);\n const [rpc] = useRPC();\n const {failure} = useMessage();\n const dispatch = useDispatch();\n\n const usernameRef = useRef();\n const passwordRef = useRef();\n\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const [setActivePassword, renderNumpad] = useKeyboard('numpad', true);\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n\n const onFocusUsername = useCallback(() => {\n setActiveInput([usernameRef, username, setUsername]);\n }, [username, setActiveInput]);\n\n const onFocusPassword = useCallback(() => {\n setActivePassword([passwordRef, password, setPassword]);\n }, [password, setActivePassword]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActivePassword(null);\n }, [setActiveInput, setActivePassword]);\n\n const onClick = useCallback(() => {\n rpc.authenticate(username, password)\n .then(() => {\n setSession(username, password);\n dispatch(setUserAction(username, password));\n setUsername('');\n setPassword('');\n })\n .catch(failure);\n }, [rpc, username, password, failure, dispatch]);\n\n const renderPassword = useCallback(() => {\n return (\n <>\n
\n
\n
\n setUsername(e.target.value)}\n className=\"input-button\"\n onFocus={onFocusUsername} onBlur={onBlur}\n value={username}\n />\n setPassword(e.target.value)}\n className=\"input-button\"\n onFocus={onFocusPassword} onBlur={onBlur}\n value={password}\n />\n
\n {t('LOGIN')}\n
\n
\n
\n {\n renderIf(role !== 'default' && role !== null)(() => (\n \n {t('YOU_ARE_NOT_AUTHORIZED_TO_ACCESS_THIS_PAGE')}\n ))\n }\n
\n {renderKeyboard()}\n {renderNumpad()}\n \n );\n }, [t, onBlur, onClick, onFocusPassword, onFocusUsername, password, renderKeyboard, renderNumpad, role, username]);\n\n const isAuthenticated = useMemo(() => hasAuthority(role, requiredRole), [requiredRole, role]);\n\n return (\n \n {\n renderIf(isAuthenticated)(() => children, renderPassword)\n }\n \n );\n});\n","import {createAction} from '../../base/fsa';\nimport {SettingsModel} from './state';\n\nexport const setSettingsAction = createAction(\n resolve => (settings: SettingsModel) => resolve(settings),\n);\n","import {RPCService} from '../service/rpc-service';\nimport {\n CameraBrandModel,\n CameraModel,\n ControlModel,\n ControlTypeModel,\n InputModel, InputTypeModel, MediaModel,\n SensorTypeModel,\n UserModel,\n} from '../types/control';\nimport {BridgeDeviceModel} from '../types/bridge-device';\nimport {\n AlarmStateModel,\n AreaModel,\n ConfigModel,\n MediaInputModel, VirtualControlModel,\n ScenarioModel,\n ScenarioTriggerModel, HomepageItemModel, SoundState, MenuEntity, STPUIEntity, LanguageModel,\n} from '../store/control/state';\nimport {DoorModel} from '../types/door';\nimport {IntercomModel} from '../types/intercom';\nimport {SettingsModel} from '../store/settings/state';\nimport {setDefaultAlarmStateAction, setEntityListAction, setSoundStateAction} from '../store/control/actions';\nimport {setSettingsAction} from '../store/settings/actions';\nimport {Dispatch} from 'react';\nimport {Action} from '../base/fsa/createAction';\nimport {batch} from 'react-redux';\nimport {setApplicationLoaded, setMediaFileListAction} from '../store/ui/actions';\nimport {MediaFileModel} from '../store/ui/state';\nimport {GatewayModel} from '../types/gateway';\nimport {DoorBrandModel} from '../types/door-brand';\nimport {BridgeDeviceTypeModel} from '../types/bridge-device-type';\nimport {LocationModel} from '../types/location';\nimport {setTemperatureAction} from '../store/temperature/action';\nimport {TemperatureMessage} from '../store/temperature/state';\nimport i18n from 'i18next';\nimport {ConciergeModel} from '../types/concierge';\nimport {ConciergeTypeModel} from '../types/concierge-type';\n\nlet latestVersion = null;\n\nexport async function fetchAndInitialize(rpc_service: RPCService, dispatch: Dispatch) {\n const sensorTypePromise = rpc_service.getSensorTypeList();\n const controlTypePromise = rpc_service.getControlTypeList();\n const userPromise = rpc_service.getUserList();\n const controlPromise = rpc_service.getControlList();\n const bridgeDevicePromise = rpc_service.getBridgeDeviceList();\n const bridgeDeviceTypePromise = rpc_service.getBridgeDeviceTypeList();\n const gatewayPromise = rpc_service.getGatewayList();\n const cameraPromise = rpc_service.getCameraList();\n const cameraBrandPromise = rpc_service.getCameraBrandList();\n const mediaFilePromise = rpc_service.getMediaFileList();\n const inputTypePromise = rpc_service.getInputTypeList();\n const inputPromise = rpc_service.getInputList();\n const scenarioPromise = rpc_service.getScenarioList();\n const scenarioTriggerPromise = rpc_service.getScenarioTriggerList();\n const doorPromise = rpc_service.getDoorList();\n const doorBrandPromise = rpc_service.getDoorBrandList();\n const intercomPromise = rpc_service.getIntercomList();\n const areaPromise = rpc_service.getAreaList();\n const mediaPromise = rpc_service.getMediaList();\n const mediaInputPromise = rpc_service.getMediaInputList();\n const virtualControlPromise = rpc_service.getVirtualControlList();\n const homepageItemPromise = rpc_service.getHomepageItemList();\n const alarmStatePromise = rpc_service.getAlarmState();\n const soundStatePromise = rpc_service.getSoundState();\n const settingsPromise = rpc_service.getSettings();\n const configsPromise = rpc_service.getConfigs();\n const locationPromise = rpc_service.getLocationList();\n const temperaturePromise = rpc_service.getTemperature();\n const menuItemPromise = rpc_service.getMenuList();\n const stpUIPromise = rpc_service.getSTPUIList();\n const languagePromise = rpc_service.getLanguageList();\n const conciergePromise = rpc_service.getConciergeList();\n const conciergeTypePromise = rpc_service.getConciergeTypeList();\n\n const [\n sensorTypes,\n controlTypes,\n users,\n controls,\n bridgeDevices,\n bridgeDeviceTypes,\n gateways,\n cameras,\n cameraBrands,\n mediaFiles,\n ] = await Promise.all([\n sensorTypePromise,\n controlTypePromise,\n userPromise,\n controlPromise,\n bridgeDevicePromise,\n bridgeDeviceTypePromise,\n gatewayPromise,\n cameraPromise,\n cameraBrandPromise,\n mediaFilePromise,\n ]);\n\n const [\n inputTypes,\n inputs,\n scenarios,\n scenarioTriggers,\n doors,\n doorBrands,\n intercoms,\n areas,\n medias,\n mediaInputs,\n ] = await Promise.all([\n inputTypePromise,\n inputPromise,\n scenarioPromise,\n scenarioTriggerPromise,\n doorPromise,\n doorBrandPromise,\n intercomPromise,\n areaPromise,\n mediaPromise,\n mediaInputPromise,\n ]);\n\n const [\n virtualControls,\n homepageItems,\n alarmState,\n soundState,\n settings,\n configs,\n locations,\n temperatureResponse,\n menuItems,\n stpUIs,\n ] = await Promise.all([\n virtualControlPromise,\n homepageItemPromise,\n alarmStatePromise,\n soundStatePromise,\n settingsPromise,\n configsPromise,\n locationPromise,\n temperaturePromise,\n menuItemPromise,\n stpUIPromise,\n ]);\n\n const [\n languages,\n concierges,\n conciergeTypes,\n ] = await Promise.all([\n languagePromise,\n conciergePromise,\n conciergeTypePromise,\n ]);\n\n for (const lang of languages) {\n localStorage.setItem(`lang_${lang.id}`, JSON.stringify(lang.variables));\n i18n.addResources(lang.id, 'translations', lang.variables);\n }\n\n if (await shouldReloadPage(rpc_service)) {\n window.location.reload();\n return;\n }\n\n batch(() => {\n\n dispatch(setEntityListAction(sensorTypes, 'sensorType'));\n dispatch(setEntityListAction(controlTypes, 'controlType'));\n dispatch(setEntityListAction(users, 'user'));\n dispatch(setEntityListAction(controls, 'control'));\n dispatch(setEntityListAction(bridgeDevices, 'bridgeDevice'));\n dispatch(setEntityListAction(bridgeDeviceTypes, 'bridgeDeviceType'));\n dispatch(setEntityListAction(gateways, 'gateway'));\n dispatch(setEntityListAction(cameras, 'camera'));\n dispatch(setEntityListAction(cameraBrands, 'cameraBrand'));\n dispatch(setEntityListAction(inputTypes, 'inputType'));\n dispatch(setEntityListAction(inputs, 'input'));\n dispatch(setEntityListAction(scenarios, 'scenario'));\n dispatch(setEntityListAction(scenarioTriggers, 'scenarioTrigger'));\n dispatch(setEntityListAction(doors, 'door'));\n dispatch(setEntityListAction(doorBrands, 'doorBrand'));\n dispatch(setEntityListAction(intercoms, 'intercom'));\n dispatch(setEntityListAction(areas, 'area'));\n dispatch(setEntityListAction(medias, 'media'));\n dispatch(setEntityListAction(mediaInputs, 'mediaInput'));\n dispatch(setEntityListAction(virtualControls, 'virtualControl'));\n dispatch(setEntityListAction(homepageItems, 'homepageItem'));\n dispatch(setEntityListAction(configs, 'config'));\n dispatch(setEntityListAction(locations, 'location'));\n dispatch(setEntityListAction(stpUIs, 'stpUI'));\n dispatch(setEntityListAction(languages, 'language'));\n dispatch(setEntityListAction(concierges, 'concierge'));\n dispatch(setEntityListAction(conciergeTypes, 'conciergeType'));\n\n if (temperatureResponse != null) {\n dispatch(setTemperatureAction(temperatureResponse.icon, temperatureResponse.temperature));\n }\n dispatch(setEntityListAction(menuItems, 'menu'));\n\n dispatch(setDefaultAlarmStateAction(alarmState));\n dispatch(setSoundStateAction(soundState));\n dispatch(setSettingsAction(settings));\n dispatch(setMediaFileListAction(mediaFiles || []));\n dispatch(setApplicationLoaded());\n });\n}\n\n\nfunction shouldReloadPage(rpc_service: RPCService) {\n return rpc_service.getSystemInfo()\n .then(systemInfo => {\n if (latestVersion != null && systemInfo.version !== latestVersion) {\n return true;\n }\n\n latestVersion = systemInfo.version;\n return false;\n });\n}\n","import React, {memo, useEffect} from 'react';\nimport {PasswordContainer} from '../../components/PasswordContainer';\nimport {fetchAndInitialize} from '../../utils/initialize';\nimport {useDispatch} from 'react-redux';\nimport {useRPC} from '../../hooks/rpc';\nimport {useHistory} from 'react-router-dom';\n\nexport const LoginContent = memo(function LoginContent() {\n const dispatch = useDispatch();\n const [rpc] = useRPC();\n const history = useHistory();\n\n useEffect(() => {\n fetchAndInitialize(rpc, dispatch);\n }, [rpc, dispatch]);\n\n useEffect(() => {\n history.push('/');\n });\n\n return <>;\n});\n\nexport const LoginScreen = memo(function LoginScreen() {\n return (\n \n \n \n );\n});\n","export function isPromise(obj: unknown) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj['then'] === 'function';\n}\n\nexport function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","import React, {\n ChangeEventHandler,\n FocusEvent,\n Dispatch,\n forwardRef,\n InputHTMLAttributes,\n memo,\n useCallback, useState, KeyboardEventHandler,\n} from 'react';\nimport {useLegacyRef} from '../../../hooks/legacy-ref';\nimport {KeyboardTuple} from '../../../hooks/keyboard';\nimport iconShow from '../../../assets/images/icons/icon-show.png';\nimport iconHide from '../../../assets/images/icons/icon-hide.png';\n\nimport './index.scss';\nimport {onClickHandler} from '../../../utils/onclick';\n\ntype SettingInputComponentProps = {\n label: string;\n value: string;\n setValue: (newValue: string) => void;\n setActiveInput: Dispatch;\n tempValue?: string;\n};\n\nconst valueConsistsOfStarts = (value: string) => value.length > 0 && (value.match(/\\*/g) || []).length === value.length;\n\nexport const SettingInputComponent = memo(forwardRef & SettingInputComponentProps>(\n function SettingInputComponent(props, ref) {\n const {label, value, setValue, setActiveInput, tempValue, type, onFocus: onFocusProp, onBlur: onBlurProp, ...restProps} = props;\n const inputRef = useLegacyRef(ref);\n\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n // noinspection JSUnusedLocalSymbols\n const onFocus = useCallback((event: FocusEvent) => {\n if (typeof onFocusProp === 'function') {\n onFocusProp(event);\n }\n\n let valueLast = value;\n if (tempValue != null) {\n if (value === tempValue) {\n valueLast = '';\n setValue('');\n }\n }\n\n if (typeof setActiveInput === 'function') {\n setActiveInput([inputRef, valueLast, setValue]);\n }\n }, [onFocusProp, value, tempValue, setActiveInput, inputRef, setValue]);\n\n const onBlur = useCallback((event: FocusEvent) => {\n if (typeof onBlurProp === 'function') {\n onBlurProp(event);\n }\n\n if (tempValue != null && value === '') {\n setValue(tempValue);\n }\n }, [onBlurProp, setValue, tempValue, value]);\n\n const onChange: ChangeEventHandler = useCallback((e) => {\n setValue(e.target.value);\n }, [setValue]);\n\n const onKeyPress: KeyboardEventHandler = useCallback((e) => {\n if (type === 'number-password') {\n if (!(/\\d/.test(String.fromCharCode(e.which)))) {\n e.preventDefault();\n }\n }\n }, [type]);\n\n const onClick = useCallback(() => {\n setPasswordVisible(passwordVisible => !passwordVisible);\n }, []);\n\n const internalType = type === 'number-password' ? 'password' : type;\n\n return (\n
\n
\n {label}\n
\n
\n \n {\n renderIf(type === 'password' && !valueConsistsOfStarts(value))(() =>\n ,\n )\n }\n
\n
\n );\n },\n));\n","import {Ref, useEffect, useRef} from 'react';\n\nexport function useLegacyRef(ref: Ref) {\n const newRef = useRef();\n\n useEffect(() => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(newRef.current);\n }\n });\n\n return newRef;\n}\n","import React, {useContext} from 'react';\n\nexport const SearchContext = React.createContext(null);\n\nexport function useSearchTerm() {\n return useContext(SearchContext);\n}\n","import React, {CSSProperties, memo, ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport iconLeft from '../../../assets/images/icons/settings/left.png';\nimport iconUser from '../../../assets/images/icons/settings/user.png';\nimport iconSearch from '../../../assets/images/icons/settings/search.png';\nimport iconCross from '../../../assets/images/icons/settings/cross.png';\nimport './index.scss';\nimport {onClickHandler} from '../../../utils/onclick';\nimport {Link} from 'react-router-dom';\nimport {useOrientation} from '../../../hooks/orientation';\nimport {KeyboardTuple, useKeyboard} from '../../../hooks/keyboard';\nimport {useDispatch} from 'react-redux';\nimport {changeBusyAction} from '../../../store/ui/actions';\nimport {useIsMounted} from '../../../hooks/is-mounted';\nimport {isPromise} from '../../../utils/promise';\nimport {SettingInputComponent} from '../SettingInputComponent';\nimport {SearchContext} from '../../../hooks/search-term';\n\nexport type SettingsPageContainerProps = {\n className?: string;\n children?: ReactNode;\n backUrl?: string;\n buttons: ButtonProps[];\n currentInput?: KeyboardTuple;\n currentNumpadInput?: KeyboardTuple;\n currentNumpadExtendedInput?: KeyboardTuple;\n title?: string;\n doNotBlockUI?: boolean;\n style?: CSSProperties;\n searchable?: boolean;\n}\n\nexport type ButtonProps = {\n className?: string;\n onClick?: () => any;\n url?: string;\n text?: string;\n renderContent?: () => ReactNode;\n hidden?: boolean;\n withState?: () => any;\n component?: ReactNode;\n doNotBlockUI?: boolean;\n};\n\nconst ButtonComponent = ({onClick, text, className, url, withState, renderContent, doNotBlockUI}: ButtonProps) => {\n const dispatch = useDispatch();\n const isMounted = useIsMounted();\n const [isBusy, setIsBusy] = useState(false);\n let Element = (props) =>
;\n if (!onClick) {\n // @ts-ignore\n Element = Link;\n }\n\n const internalOnClick = useCallback(() => {\n if (isBusy) {\n return;\n }\n\n if (onClick) {\n const output = onClick();\n if (isPromise(output)) {\n if (isMounted() === true) {\n setIsBusy(true);\n }\n if (doNotBlockUI !== true) {\n dispatch(changeBusyAction(true));\n }\n (output as Promise)\n .finally(() => {\n if (isMounted() === true) {\n setIsBusy(false);\n }\n if (doNotBlockUI !== true) {\n dispatch(changeBusyAction(false));\n }\n });\n }\n }\n }, [isBusy, onClick, doNotBlockUI, dispatch, isMounted]);\n\n return (\n \n {\n renderIf(renderContent)(() =>\n <>\n {\n renderContent()\n }\n ,\n () =>\n \n {text}\n ,\n )\n }\n \n );\n};\n\nexport const SettingsPageContainer = memo(\n function SettingsPage(props: SettingsPageContainerProps) {\n const {\n className, children, backUrl,\n buttons, currentInput, currentNumpadInput,\n currentNumpadExtendedInput, title, style,\n searchable,\n } = props;\n const orientation = useOrientation();\n const childrenRef = useRef();\n const [setActiveInput, renderKeyboard] = useKeyboard();\n\n const [isSearchActive, setIsSearchActive] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n\n const selectedRef = useMemo(() => {\n if (currentInput) {\n return currentInput[0];\n }\n\n if (currentNumpadInput) {\n return currentNumpadInput[0];\n }\n\n if (currentNumpadExtendedInput) {\n return currentNumpadExtendedInput[0];\n }\n\n return null;\n }, [currentInput, currentNumpadExtendedInput, currentNumpadInput]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const onCrossClick = useCallback(() => {\n if (searchTerm === '') {\n setIsSearchActive(false);\n return;\n }\n setActiveInput(null);\n setSearchTerm('');\n }, [searchTerm, setActiveInput]);\n\n const keyboardVisible = Boolean(selectedRef);\n\n useEffect(() => {\n if (selectedRef) {\n childrenRef.current.scrollTo(0, (selectedRef.current.offsetParent as HTMLElement).offsetTop - 60);\n }\n }, [selectedRef]);\n\n useEffect(() => {\n if (searchable) {\n return;\n }\n\n setIsSearchActive(false);\n setActiveInput(null);\n setSearchTerm('');\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchable]);\n\n return (\n \n
\n
\n \n <>\n \"back\"/\n \"users\"/\n \n \n {renderIf(searchable)(() =>\n
\n setIsSearchActive(true))}\n />\n
\n \n \n
\n
,\n )}\n
\n
\n {\n renderIf(orientation !== 'vertical')(() =>\n {title || ''},\n )\n }\n
\n
\n {\n buttons\n .filter(button => button != null && !button.hidden)\n .map((button, index) => {\n if (button.component != null) {\n return button.component;\n }\n\n return (\n \n );\n },\n )\n }\n
\n
\n
\n
\n
\n \n {children}\n \n
\n {\n renderKeyboard()\n }\n
\n );\n },\n);\n","import {useCallback, useEffect, useRef} from 'react';\n\nexport function useIsMounted() {\n const componentIsMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n componentIsMounted.current = false;\n };\n }, []);\n\n return useCallback(() => componentIsMounted.current, []);\n}\n","import {changeBusyAction, setPopupScreenAction} from '../store/ui/actions';\nimport {useDispatch} from 'react-redux';\nimport {useCallback} from 'react';\nimport {isPromise} from '../utils/promise';\n\nexport function useQuestion() {\n const dispatch = useDispatch();\n\n return useCallback((message: string, yesCallback?: () => void, noCallback?: () => void, positive_button?: { text: string; timed: boolean; }, showCancel?: boolean) => {\n dispatch(setPopupScreenAction(true, 'question', message, null, isApproved => {\n if (isApproved) {\n if (yesCallback) {\n const output = yesCallback();\n if (isPromise(output)) {\n dispatch(changeBusyAction(true));\n (output as unknown as Promise).finally(() => {\n dispatch(changeBusyAction(false));\n });\n }\n }\n } else {\n if (noCallback) {\n const output = noCallback();\n if (isPromise(output)) {\n dispatch(changeBusyAction(true));\n (output as unknown as Promise).finally(() => {\n dispatch(changeBusyAction(false));\n });\n }\n }\n }\n }, false, positive_button, showCancel));\n }, [dispatch]);\n}\n","import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport SelectBox, {Props} from 'react-select';\nimport {useOrientation} from '../../hooks/orientation';\nimport {useLocalization} from \"../../hooks/localization\";\n\nconst MAX_HEIGHT = 250;\nconst ITEM_HEIGHT = 40;\n\n// noinspection JSUnusedGlobalSymbols\nconst selectStyles = (isUp: boolean) => ({\n control: (provided, {menuIsOpen}) => ({\n height: ITEM_HEIGHT,\n width: 250,\n color: '#efdd1c',\n borderRadius: menuIsOpen ? (isUp ? '0 0 10px 10px' : '10px 10px 0 0') : 10,\n border: '1px solid #6565657f',\n backgroundColor: '#00000065',\n fontSize: 20,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n }),\n singleValue: () => ({\n maxWidth: 170,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }),\n indicatorSeparator: () => ({}),\n indicatorsContainer: () => ({color: 'white'}),\n option: (_, state) => {\n return ({\n height: ITEM_HEIGHT,\n width: 250,\n color: state.isSelected ? '#303030' : '#efdd1c',\n borderBottom: state.value === state.options[state.options.length - 1].value ? 0 : '1px solid #6565657f',\n borderTop: state.value === state.options[0].value ? 0 : '1px solid #6565657f',\n backgroundColor: state.isSelected ? '#efdd1c' : '#00000065',\n fontSize: 20,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '0 10px',\n });\n },\n menu: (provided) => ({\n ...provided,\n marginTop: 0,\n marginBottom: 0,\n paddingTop: 0,\n backgroundColor: '#303030',\n ...isUp ? {\n top: 'auto',\n bottom: '100%',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n } : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n border: '1px solid #6565657f',\n borderTop: 0,\n }),\n menuList: () => ({\n maxHeight: MAX_HEIGHT,\n overflow: 'scroll',\n }),\n multiValue: () => ({\n marginRight: '5px',\n }),\n multiValueLabel: () => ({}),\n multiValueRemove: () => ({display: 'none'}),\n container: (provided) => ({...provided, height: 40}),\n valueContainer: (provided) => ({...provided, overflow: 'hidden', flexWrap: 'nowrap'}),\n});\n\nexport type SelectItem = {\n label: string;\n value: T;\n};\n\nexport function Select(props: Props) {\n const {t} = useLocalization();\n const orientation = useOrientation();\n const ref = useRef();\n const [isUp, setIsUp] = useState(false);\n\n const styles = useMemo(() => selectStyles(isUp), [isUp]);\n\n const determineUp = useCallback(() => {\n if (!ref.current) {\n return;\n }\n\n if (!ref.current.select) {\n return;\n }\n\n // @ts-ignore\n const inputRef = ref.current.select.inputRef as HTMLInputElement;\n\n if (!inputRef) {\n return;\n }\n\n let windowHeight = window.innerHeight;\n if (orientation === 'none') {\n if (windowHeight > 600) {\n windowHeight /= 2;\n windowHeight += 300;\n }\n }\n\n const options = props.options || [];\n const height = Math.min(MAX_HEIGHT, options.length * ITEM_HEIGHT);\n const offset = inputRef.getBoundingClientRect().bottom + height;\n // console.log({offset, windowHeight});\n\n setIsUp(offset > windowHeight);\n }, [orientation, props.options]);\n\n useEffect(() => {\n window.addEventListener('resize', determineUp);\n window.addEventListener('scroll', determineUp);\n\n return () => {\n window.removeEventListener('resize', determineUp);\n window.removeEventListener('scroll', determineUp);\n };\n }, [determineUp]);\n\n useEffect(determineUp, [props, orientation]);\n return (\n // @ts-ignore\n t('empty_list')}\n closeMenuOnSelect={!props.isMulti}\n isClearable={false}\n hideSelectedOptions={false}\n {...props}\n styles={styles}\n />\n );\n}\n","import {Props as SelectProps} from 'react-select/src/Select';\nimport {Select} from '../../Select';\nimport React, {memo} from 'react';\n\nconst typedMemo: (c: T) => T = memo;\n\nexport const SettingSelectComponent = typedMemo(\n function SettingSelectComponent({label, ...restProps}: SelectProps & { label: string }) {\n\n return (\n
\n
\n {label}\n
\n
\n
\n {t('hide_version')}\n setFilterMessage(e.target.value)} placeholder={t('filter')}/>\n\n \n \n \n \n {t('copy_raw')}\n \n
\n
\n {\n filteredMessageList.map(m => {\n return (\n
\n {m.message}\n {m.time}\n
\n );\n })\n }\n
\n
\n setMessage(e.target.value)}\n value={message}\n type=\"text\"\n onKeyPress={e => onKeyPress(e)}\n />\n \n
\n
\n \n );\n});\n","import {DefaultRootState, useSelector} from 'react-redux';\nimport {useFilter} from './filter';\nimport {DependencyList} from 'react';\n\nexport function useFilterSelector(selector: (state: TState) => TSelected[], predicate: (item: TSelected) => boolean, deps?: DependencyList) {\n return useFilter(useSelector(selector), predicate, deps);\n}\n","import {useCallback, useEffect, useMemo} from 'react';\nimport {Configs} from '../configs';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {setSelectedBackgroundAction} from '../store/ui/actions';\nimport {useFilterSelector} from './filter-selector';\nimport {useOrientation} from './orientation';\nimport {MediaFileTag} from '../store/ui/state';\n\nexport function useBackground(): [string, (value: string) => void, { backgroundImage: string }] {\n const value = useSelector(state => state.ui.selectedBackground);\n const orientation = useOrientation('horizontal');\n const backgrounds = useFilterSelector(state => state.ui.mediaFileList, i => i.type === 'background' && i.tags.includes(orientation as MediaFileTag), [orientation]);\n\n const dispatch = useDispatch();\n const setValue = useCallback((newValue: string) => dispatch(setSelectedBackgroundAction(newValue)), [dispatch]);\n\n useEffect(() => {\n if (value) {\n return;\n }\n\n const selected = backgrounds[Math.floor(Math.random() * backgrounds.length)];\n if (selected) {\n setValue(selected.id);\n }\n }, [value, backgrounds, setValue]);\n\n const style = useMemo(() => {\n return {\n backgroundImage: `url(${Configs.IMAGE_PREFIX}/media/${value})`,\n };\n }, [value]);\n\n return [value, setValue, style];\n}\n","import React, {memo} from 'react';\nimport {useBackground} from '../../../../hooks/background-class';\n\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport './index.scss';\nimport {Configs} from '../../../../configs';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useOrientation} from '../../../../hooks/orientation';\nimport {MediaFileTag} from '../../../../store/ui/state';\n\nconst MyButton = memo(function MyButton({icon, onClick}: { icon?: string; onClick: () => void }) {\n return (\n
\n \"\"/\n
\n );\n});\n\nexport const BackgroundSettingsScreen = memo(function BackgroundSettingsScreen() {\n const [, changeBackground, backgroundStyle] = useBackground();\n const orientation = useOrientation('horizontal');\n const backgroundList = useFilterSelector(state => state.ui.mediaFileList, media => media.type === 'background' && media.tags.includes(orientation as MediaFileTag),[orientation]);\n\n return (\n \n \n
\n {\n backgroundList.map(image => (\n changeBackground(image.id)}/>\n ))\n }\n
\n
\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {BackgroundSettingsScreen} from './BackgroundSettingsScreen';\n\nexport const CustomizationSettingsRoutes:RouteDefinition[]=[\n {\n routerLink: '/settings/customization',\n component: BackgroundSettingsScreen,\n },\n];\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\n\ntype Props = {\n children?: ReactNode;\n min: number;\n max: number;\n innerWidth: number;\n};\n\nexport const ColumnComponent = memo(function ColumnComponent({children, min, max, innerWidth}: Props) {\n let className = 'appColumn';\n\n if (innerWidth > 600) {\n className += ` col-${min}`;\n } else {\n className += ` col-${max}`;\n }\n\n return (\n
\n {children}\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\nimport {useWindowSize} from '../../hooks/window-size';\nimport {ColumnComponent} from './component';\n\nexport type ColumnProps = {\n children?: ReactNode;\n min: number;\n max: number;\n};\n\nexport const Column = memo(function Column({children, min, max}: ColumnProps) {\n const [innerWidth] = useWindowSize();\n return (\n \n {children}\n \n );\n});\n","import React, {memo, useCallback, useEffect} from 'react';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {CONTROL_TYPE_ID_SIREN, ControlModel, InputModel, SensorTypeModel} from '../../../../types/control';\nimport './index.scss';\nimport {useDispatch} from 'react-redux';\nimport {entityUpdatedAction, inputSendErrorAction} from '../../../../store/control/actions';\nimport {Column} from '../../../../components/Column';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst getImage = (sensor: InputModel, set: { [key: string]: SensorTypeModel }) => {\n const type = set[sensor.sensor_settings.sensor_type_id];\n if (!type) {\n return null;\n }\n\n if (sensor.is_active) {\n return type.image_set.active;\n }\n\n return type.image_set.passive;\n};\n\ntype SensorEditProps = {\n sensorOrSiren: InputModel | ControlModel;\n isInput: boolean;\n icon: string;\n}\n\nexport const SensorEditComponent = memo(function SensorEditComponent({sensorOrSiren, icon, isInput}: SensorEditProps) {\n const {t} = useLocalization();\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (sensorOrSiren.hasError) {\n const timeout = setTimeout(() => dispatch(inputSendErrorAction(sensorOrSiren.id, false)), 3000);\n return () => clearTimeout(timeout);\n }\n }, [dispatch, sensorOrSiren]);\n\n const changeStatus = useCallback((sensor: InputModel | ControlModel, is_active: boolean) => {\n if (is_active === sensor.is_active) {\n return;\n }\n\n dispatch(entityUpdatedAction({...sensor, isUpdating: true}, isInput ? 'input' : 'control'));\n\n rpc.updateSensorStatus(sensor.id, is_active, !isInput);\n }, [dispatch, rpc, isInput]);\n\n return (\n \n
\n
\n {sensorOrSiren.name}\n
\n \n
\n changeStatus(sensorOrSiren, true))}>\n I\n
\n changeStatus(sensorOrSiren, false))}>\n 0\n
\n
\n {\n renderIf(sensorOrSiren.isUpdating)(() =>\n
,\n )\n }\n {\n renderIf(sensorOrSiren.hasError)(() =>\n
\n {t('DEVICE_NOT_REACHABLE')}\n
,\n )\n }\n
\n \n );\n});\n\nexport const SensorSettingsScreen = memo(function SensorSettingsScreen() {\n const inputTypeSet = useSetSelector(state => state.control.inputTypeList);\n const sensorList = useFilterSelector(state => state.control.inputList, i => inputTypeSet[i.type_id]?.primitive_name === 'sensor', [inputTypeSet]);\n const sensorTypeSet = useSetSelector(state => state.control.sensorTypeList);\n const sirenList = useFilterSelector(state => state.control.controlList, c => c.type_id === CONTROL_TYPE_ID_SIREN, []);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n\n return (\n \n \n
\n
\n {\n sensorList.map(sensor =>\n ,\n )\n }\n {\n sirenList.map(siren =>\n ,\n )\n }\n
\n
\n
\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {SensorSettingsScreen} from './SensorSettingsScreen';\n\nexport const SensorSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/sensors',\n component: SensorSettingsScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: BridgeDeviceModel) => item.id;\n\nexport const DeviceListScreen = memo(function DeviceListScreen() {\n const {t} = useLocalization();\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const gatewaySet = useSetSelector(state => state.control.gatewayList);\n\n const [selectedDevice, setSelectedDevice] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('stp_editor'),\n url: `/settings/stp-editor/${selectedDevice?.id}`,\n className: 'gray',\n hidden: !(selectedDevice?.type_id === '4' || selectedDevice?.type_id === '5' || selectedDevice?.type_id === '23'),\n },\n {\n text: t('settings'),\n url: `/settings/device/device-settings/${selectedDevice ? selectedDevice.id : ''}`,\n className: 'blue',\n hidden: !(selectedDevice),\n },\n {\n text: t('edit'),\n url: `/settings/device/edit/${selectedDevice ? selectedDevice.id : ''}`,\n className: 'orange',\n hidden: !(selectedDevice),\n },\n {\n text: t('create_device'),\n url: '/settings/device/edit',\n className: 'green',\n },\n ], [t, selectedDevice]);\n\n\n const displayNameExtractor = useCallback((item: BridgeDeviceModel, column: ColumnModel) => {\n if (column.key === 'type') {\n return bridgeDeviceTypeSet[item.type_id].name;\n }\n\n if (column.key === 'gateway_id') {\n return (gatewaySet[item.gateway_id] && gatewaySet[item.gateway_id].name) || '-';\n }\n\n return item[column.key] || '-';\n }, [bridgeDeviceTypeSet, gatewaySet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('devices'),\n key: 'name',\n },\n {\n length: 2,\n name: t('type'),\n key: 'type',\n },\n {\n length: 2,\n name: t('unique_id'),\n key: 'unique_device_id',\n },\n {\n length: 1,\n name: t('rf'),\n key: 'rf_address',\n },\n {\n length: 2,\n name: t('gateway'),\n key: 'gateway_id',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import {DependencyList, useCallback, useMemo} from 'react';\n\nexport function useMap(content: T[], selector: (item: T) => U, deps: DependencyList = []) {\n const predicate = useCallback(selector, deps);\n return useMemo(() => content.map(predicate), [content, predicate]);\n}\n","import {DefaultRootState, useSelector} from 'react-redux';\nimport {DependencyList} from 'react';\nimport {useMap} from './map';\n\nexport function useMapSelector(selector: (state: TState) => TSelected[], callbackfn: (item: TSelected) => TOutput, deps?: DependencyList) {\n return useMap(useSelector(selector), callbackfn, deps);\n}\n","export const regexIp = /\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}\\b/;\nexport const regexUrl = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)/;\nexport const isValidIP = (value: string) => Boolean(value) && regexIp.test(value);\nexport const isValidPort = (value: string) => Boolean(value) && Number(value) < 65536 && Number(value) > 0 && Number.isInteger(Number(value));\nexport const isValidRFAddress = (value: string) => Boolean(value) && Number(value) < 256 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidRFNetworkId = (value: string) => Boolean(value) && Number(value) < 65536 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidSIPNo = (value: string) => Boolean(value) && Number(value) > 0 && Number.isInteger(Number(value));\nexport const isValidDoorNumber = (value: string) => Boolean(value) && Number(value) < 65536 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidDuration = (value: string) => Boolean(value) && Number(value) < 65536 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidPulseDuration = (value: string) => Boolean(value) && Number(value) < 65536 && Number(value) > 0 && Number.isInteger(Number(value) * 10);\nexport const isValidMaxDimmerValue = (value: string) => Boolean(value) && Number(value) < 101 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidMinDimmerValue = (value: string) => Boolean(value) && Number(value) < 101 && Number(value) > -1 && Number.isInteger(Number(value));\nexport const isValidString = (value: string) => Boolean(value) && value.length !== 0;\nexport const isValidURL = (value: string) => Boolean(value) && regexUrl.test(value);\n","import {useSelector} from 'react-redux';\nimport {useRPC} from './rpc';\nimport {useCallback} from 'react';\nimport {BaseModel} from '../types/control';\nimport {VirtualControlModel} from '../store/control/state';\n\nconst messageFromEntityList = (entityList: { name: string }[]) => {\n if (entityList.length === 0) {\n return null;\n } else if (entityList.length === 1) {\n return `${entityList[0].name}`;\n } else {\n return `${entityList[0].name} ve ${entityList.length - 1} tane daha kayıt`;\n }\n};\n\nexport function useRelations() {\n const [rpc] = useRPC();\n const all = useSelector(state => state.control);\n\n return useCallback((id, type) => {\n return rpc.getRelations(id, type)\n .then(({data: relations}) => {\n const entityList = [];\n for (const relation of relations) {\n if (relation.type === 'homepageItem') {\n continue;\n }\n\n if (relation.type === 'stpUI') {\n continue;\n }\n\n if (relation.should_update) {\n continue;\n }\n\n const key = relation.type + 'List';\n const relatedList = (all[key] as BaseModel[]);\n const relatedEntity = relatedList.find(e => e.id === relation.relational_id);\n if (relatedEntity == null) {\n continue;\n }\n\n if (relatedEntity.registered_by_system === true) {\n continue;\n }\n\n if (relation.type === 'virtualControl') {\n const control = all.controlList.find(c => c.id === (relatedEntity as VirtualControlModel).control_id);\n if (control == null) {\n continue;\n }\n\n relatedEntity['name'] = `${control.name} sanal kontrol`;\n }\n\n entityList.push(relatedEntity);\n }\n\n const message = messageFromEntityList(entityList);\n const positiveButton = message == null ? undefined : {text: 'Hepsini Sil', timed: true};\n return [message, positiveButton];\n })\n .catch(() => null);\n }, [rpc, all]);\n}\n","import React, {memo, useCallback} from 'react';\nimport {onClickHandler} from '../../../utils/onclick';\nimport {useQuestion} from '../../../hooks/question';\nimport {useRelations} from '../../../hooks/relations';\nimport {useLocalization} from \"../../../hooks/localization\";\n\ntype Props = {\n id: string;\n type: string;\n questionText: string;\n questionTextRelational: (message:string) => string;\n onPress: () => void;\n}\n\nexport const SettingsDeleteButton = memo(function SettingsDeleteButton({onPress: onPressProp, id, type, questionText, questionTextRelational}: Props) {\n const {t} = useLocalization();\n const question = useQuestion();\n const getRelations = useRelations();\n\n const onPress = useCallback(() => {\n getRelations(id, type)\n .then(([message, positiveButton]) => {\n const questionMessage = message == null ? questionText : questionTextRelational(message);\n question(questionMessage, onPressProp, undefined, positiveButton);\n });\n }, [getRelations, id, onPressProp, question, questionText, questionTextRelational, type]);\n\n return (\n \n \n {t('delete')}\n \n
\n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {useSelector} from 'react-redux';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport './index.scss';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {GatewayModel} from '../../../../types/gateway';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {BridgeDeviceTypeModel} from '../../../../types/bridge-device-type';\nimport {useMessage} from '../../../../hooks/message';\nimport {isValidRFAddress} from '../../../../utils/validation';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/device';\n\nexport const DeviceEditScreen = memo(function DeviceEditScreen() {\n const {t} = useLocalization()\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard] = useKeyboard('numpad', true);\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const alarmConfig = useSelector(state => state.control.config.alarm);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const GATEWAY_OPTION_ITEM_LIST = useMapSelector(\n state => state.control.gatewayList,\n gatewayModel => ({value: gatewayModel, label: gatewayModel.name}),\n [],\n );\n const DEVICE_TYPE_SELECTION_ITEMS = useMapSelector(\n state => state.control.bridgeDeviceTypeList,\n device => ({value: device, label: device.name}),\n [],\n );\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [type, setType] = useState>(null);\n const [rfAddress, setRFAddress] = useState('');\n const [gateway, setGateway] = useState>(null);\n\n const nextFreeRfId = useMemo(() => {\n const usedRfAddressList = bridgeDeviceList.filter(v => v.gateway_id === gateway?.value?.id).map(value => value.rf_address);\n for (let i = 10; i < 255; i++) {\n if (!usedRfAddressList.includes(i)) {\n return i.toString();\n }\n }\n\n return '';\n }, [bridgeDeviceList, gateway?.value?.id]);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteBridgeDevice(selected.id)\n .then(() => {\n success(t('device_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, onBackPressed, rpc, selected, success]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_device_name'));\n\n return false;\n }\n\n if (type == null || type.value == null) {\n failure(t('pls_select_a_valid_device_type'));\n\n return false;\n }\n\n if (!isValidRFAddress(rfAddress)) {\n failure(t('pls_enter_a_valid_rf_address'));\n\n return false;\n }\n\n if (gateway == null || gateway.value == null) {\n failure(t('pls_select_a_valid_gateway'));\n\n return false;\n }\n\n return true;\n }, [t, failure, gateway, name, rfAddress, type]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const bridgeDeviceModel: BridgeDeviceModel = {\n ...selected,\n id: selected != null ? selected.id : null,\n type_id: type.value.id,\n name,\n rf_address: Number(rfAddress),\n gateway_id: gateway.value.id,\n temperature_offset: selected != null ? selected.temperature_offset : 0,\n temperature_hysteresis: selected != null ? selected.temperature_hysteresis : 2,\n alarm_config: selected != null ? selected.alarm_config : alarmConfig,\n };\n\n return rpc.updateBridgeDevice(bridgeDeviceModel)\n .then(() => {\n success(t(bridgeDeviceModel.id ? 'device_successfully_edited' : 'device_successfully_created'));\n onBackPressed();\n })\n .catch(failure);\n }, [\n t,\n isFieldsValid,\n name,\n type,\n rfAddress,\n gateway,\n alarmConfig,\n selected,\n rpc,\n success,\n failure,\n onBackPressed,\n ]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n t('this_will_be_deleted_with_this_message__continue',{name:selected?.name, message})}/>,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed, onDeletePressed, selected]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n }, [setActiveInput, setActiveNumpadInput]);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setType(DEVICE_TYPE_SELECTION_ITEMS[0]);\n setGateway(GATEWAY_OPTION_ITEM_LIST[0]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [GATEWAY_OPTION_ITEM_LIST]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const device = bridgeDeviceList.find(device => device.id === params['id']);\n if (device == null) {\n return;\n }\n\n setSelected(device);\n setName(device.name);\n setType(DEVICE_TYPE_SELECTION_ITEMS.find(option => option.value.id === device.type_id));\n setGateway(GATEWAY_OPTION_ITEM_LIST.find(gatewayOptionItem => gatewayOptionItem.value.id === device.gateway_id));\n setRFAddress(device.rf_address.toString());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id == null) {\n setRFAddress(nextFreeRfId);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nextFreeRfId]);\n\n return (\n \n \n
\n
\n \n \n \n \n
\n
\n\n
\n
\n
\n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import React, {memo, useCallback, useEffect, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useMessage} from '../../../../hooks/message';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useTranslation} from \"react-i18next\";\n\nconst BACK_URL = '/settings/device';\n\nexport const DeviceSettingsScreen = memo(function DeviceSettingsScreen() {\n const {t} = useTranslation();\n const params = useParams<{ id: string }>();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const [setActiveNumpadExtendedInput, renderNumpadExtendedKeyboard, currentNumpadExtendedInput] =\n useKeyboard('numpad-extended', true);\n const {success, failure} = useMessage();\n const question = useQuestion();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n\n const [selected, setSelected] = useState(null);\n const [isTemperatureDevice, setTemperatureDevice] = useState(false);\n const [temperatureOffset, setTemperatureOffset] = useState('0');\n const [temperatureHysteresis, setTemperatureHysteresis] = useState('0.2');\n const [firstLevelAlarmCountdownDuration, setFirstLevelAlarmCountdownDuration] = useState('0');\n const [secondLevelAlarmCountdownDuration, setSecondLevelAlarmCountdownDuration] = useState('0');\n const [thirdLevelAlarmCountdownDuration, setThirdLevelAlarmCountdownDuration] = useState('0');\n const [reactivationDurationAfterReset, setReactivationDurationAfterReset] = useState('0');\n const [sirenIntervalOnDuration, setSirenIntervalOnDuration] = useState('0');\n const [sirenIntervalOffDuration, setSirenIntervalOffDuration] = useState('0');\n const [sirenRepeatCount, setSirenRepeatCount] = useState('0');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onSavePressed = useCallback(() => {\n const temperatureOffsetValue = Number(temperatureOffset);\n if (isTemperatureDevice) {\n if (isNaN(temperatureOffsetValue) ||\n temperatureOffsetValue < -9.9 ||\n temperatureOffsetValue > 9.9\n ) {\n failure(t('temperature_offset_value_must_be_between_-9.9_9.9'));\n\n return;\n }\n }\n\n const temperatureHysteresisValue = Number(temperatureHysteresis);\n if (isTemperatureDevice) {\n if (isNaN(temperatureHysteresisValue) ||\n temperatureHysteresisValue < 0 ||\n temperatureHysteresisValue > 25.5\n ) {\n failure(t('hysteresis_value_must_be_between_25.5_0'));\n\n return;\n }\n }\n\n const firstLevelAlarmCountdownDurationValue = Number(firstLevelAlarmCountdownDuration);\n if (isNaN(firstLevelAlarmCountdownDurationValue) || firstLevelAlarmCountdownDurationValue < 0) {\n failure(t('alarm_level_1_countdown_duration_is_invalid'));\n\n return;\n }\n\n const secondLevelAlarmCountdownDurationValue = Number(secondLevelAlarmCountdownDuration);\n if (isNaN(secondLevelAlarmCountdownDurationValue) || secondLevelAlarmCountdownDurationValue < 0) {\n failure(t('alarm_level_2_countdown_duration_is_invalid'));\n\n return;\n }\n\n const thirdLevelAlarmCountdownDurationValue = Number(thirdLevelAlarmCountdownDuration);\n if (isNaN(thirdLevelAlarmCountdownDurationValue) || thirdLevelAlarmCountdownDurationValue < 0) {\n failure(t('alarm_level_3_countdown_duration_is_invalid'));\n\n return;\n }\n\n const reactivationDurationAfterResetValue = Number(reactivationDurationAfterReset);\n if (isNaN(reactivationDurationAfterResetValue) || reactivationDurationAfterResetValue < 0) {\n failure(t('reactivation_after_alarm_reset_duration_is_invalid'));\n\n return;\n }\n\n const sirenIntervalOnDurationValue = Number(sirenIntervalOnDuration);\n if (isNaN(sirenIntervalOnDurationValue) || sirenIntervalOnDurationValue < 0) {\n failure(t('siren_interval_on_duration_is_invalid'));\n\n return;\n }\n\n const sirenIntervalOffDurationValue = Number(sirenIntervalOffDuration);\n if (isNaN(sirenIntervalOffDurationValue) || sirenIntervalOffDurationValue < 0) {\n failure(t('siren_interval_off_duration_is_invalid'));\n\n return;\n }\n\n const sirenRepeatCountValue = Number(sirenRepeatCount);\n if (isNaN(sirenRepeatCountValue) || sirenRepeatCountValue < 0) {\n failure(t('siren_repeat_count_is_invalid'));\n\n return;\n }\n\n const bridgeDeviceModel: BridgeDeviceModel = {\n ...selected,\n ...(isTemperatureDevice ? {temperature_offset: Math.round(temperatureOffsetValue * 10)} : {}),\n ...(isTemperatureDevice ? {temperature_hysteresis: Math.round(temperatureHysteresisValue * 10)} : {}),\n alarm_config: {\n first_level_alarm_countdown_duration: firstLevelAlarmCountdownDurationValue,\n second_level_alarm_countdown_duration: secondLevelAlarmCountdownDurationValue,\n third_level_alarm_countdown_duration: thirdLevelAlarmCountdownDurationValue,\n reactivation_duration_after_reset: reactivationDurationAfterResetValue,\n siren_interval_on_duration: sirenIntervalOnDurationValue,\n siren_interval_off_duration: sirenIntervalOffDurationValue,\n siren_interval_repeat_count: sirenRepeatCountValue,\n },\n };\n\n rpc.updateBridgeDevice(bridgeDeviceModel)\n .then(() => {\n success(t('successfully_saved'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isTemperatureDevice,\n temperatureOffset,\n temperatureHysteresis,\n firstLevelAlarmCountdownDuration,\n secondLevelAlarmCountdownDuration,\n thirdLevelAlarmCountdownDuration,\n reactivationDurationAfterReset,\n sirenIntervalOnDuration,\n sirenIntervalOffDuration,\n sirenRepeatCount,\n selected,\n success,\n failure,\n rpc,\n onBackPressed,\n ]);\n\n const onResetPressed = useCallback(() => {\n question(t('will_be_reset_continue'), () => {\n rpc.resetDevice(selected.gateway_id, selected.unique_device_id)\n .then(() => {\n success(t('device_successfully_reset'));\n setSelected({...selected, unique_device_id: ''});\n })\n .catch(failure);\n });\n }, [t, selected, question, rpc, success, failure]);\n\n const buttons = [\n {\n text: t('reset'),\n className: 'orange',\n onClick: onResetPressed,\n hidden: !selected?.unique_device_id,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ];\n\n const onBlur = useCallback(() => {\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n }, [setActiveNumpadInput, setActiveNumpadExtendedInput]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const device = bridgeDeviceList.find(device => device.id === params['id']);\n if (device == null) {\n return;\n }\n\n setSelected(device);\n setTemperatureDevice(bridgeDeviceTypeSet[device.type_id]?.is_temperature_device || false);\n setTemperatureOffset((device.temperature_offset / 10).toFixed(1));\n setTemperatureHysteresis((device.temperature_hysteresis / 10).toFixed(1));\n setFirstLevelAlarmCountdownDuration(device.alarm_config.first_level_alarm_countdown_duration.toString());\n setSecondLevelAlarmCountdownDuration(device.alarm_config.second_level_alarm_countdown_duration.toString());\n setThirdLevelAlarmCountdownDuration(device.alarm_config.third_level_alarm_countdown_duration.toString());\n setReactivationDurationAfterReset(device.alarm_config.reactivation_duration_after_reset.toString());\n setSirenIntervalOnDuration(device.alarm_config.siren_interval_on_duration.toString());\n setSirenIntervalOffDuration(device.alarm_config.siren_interval_off_duration.toString());\n setSirenRepeatCount(device.alarm_config.siren_interval_repeat_count.toString());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n {\n renderIf(selected)(() =>\n
\n
\n <>\n
\n {t('alarm_countdown_durations')}\n
\n \n \n \n
\n {t('alar_reactivation_duration_after_reset')}\n
\n \n \n
\n
\n <>\n
\n {t('siren_interval')}\n
\n \n \n \n
\n {t('temperature')}\n
\n \n \n \n
\n
,\n )\n }\n \n {\n renderNumpadKeyboard()\n }\n {\n renderNumpadExtendedKeyboard()\n }\n
\n );\n});\n","import {DeviceListScreen} from './DeviceListScreen';\nimport {RouteDefinition} from '../../../routes';\nimport {DeviceEditScreen} from './DeviceEditScreen';\nimport {DeviceSettingsScreen} from './DeviceSettingsScreen';\n\nexport const DeviceSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/device/edit',\n component: DeviceEditScreen,\n },\n {\n routerLink: '/settings/device/edit/:id',\n component: DeviceEditScreen,\n },\n {\n routerLink: '/settings/device/device-settings/:id',\n component: DeviceSettingsScreen,\n },\n {\n routerLink: '/settings/device',\n component: DeviceListScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {GatewayModel} from '../../../../types/gateway';\nimport {useMessage} from '../../../../hooks/message';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {GatewayCommand} from '../../../../types/control';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport const GATEWAY_TYPES = {\n '1': 'NOVA_PANEL',\n '2': 'HOME_MANAGER',\n};\n\nconst keyExtractor = (item: GatewayModel) => item.id;\n\nexport const GatewayListScreen = memo(function GatewayListScreen() {\n const {t} = useLocalization();\n const {success} = useMessage();\n const question = useQuestion();\n const [rpc] = useRPC();\n\n const gatewayList = useSelector(state => state.control.gatewayList);\n\n const [selectedGateway, setSelectedGateway] = useState(null);\n\n const onRestartClick = useCallback(() => {\n question(t('this_will_be_rebooted__continue',{name:selectedGateway.name}), () => {\n success(t('rebooting'));\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Reboot);\n });\n }, [\n t,\n rpc,\n question,\n selectedGateway,\n success,\n ]);\n\n const buttons = useMemo(() => [\n {\n text: t('manage'),\n url: `/settings/gateway-control/${selectedGateway ? selectedGateway.id : ''}`,\n className: 'red',\n hidden: !(selectedGateway),\n },\n {\n text: t('deployment'),\n url: `/settings/gateway/${selectedGateway ? selectedGateway.id : ''}/setup/match`,\n className: 'blue',\n hidden: !(selectedGateway),\n },\n {\n text: t('edit'),\n url: `/settings/gateway/edit/${selectedGateway ? selectedGateway.id : ''}`,\n className: 'orange',\n hidden: !(selectedGateway),\n },\n /*{\n text: 'GATEWAY OLUÅžTUR',\n url: '/settings/gateway/edit',\n className: 'green',\n },*/\n ], [t, selectedGateway]);\n\n const displayNameExtractor = useCallback((item: GatewayModel, column: ColumnModel) => {\n if (column.key === 'type') {\n return t(GATEWAY_TYPES[item.type_id]);\n } else if (column.key === 'ip_address') {\n return item.settings.home_network.ip_address || '-';\n }\n\n return item[column.key] || '-';\n }, [t]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('gateway_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('type'),\n key: 'type',\n },\n {\n length: 2,\n name: t('ip_address'),\n key: 'ip_address',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo} from 'react';\nimport {onClickHandler} from '../../../utils/onclick';\n\nimport './index.scss';\n\ntype ACheckBoxProps = {\n label: string;\n set: () => void;\n value: boolean;\n};\n\nexport const SettingCheckBoxComponent = memo(function SettingCheckBoxComponent({label, set, value}: ACheckBoxProps) {\n return (\n
\n
\n {label}\n
\n
\n
\n
\n
\n );\n});\n","import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport './index.scss';\nimport {useParams, useHistory} from 'react-router-dom';\nimport {useMessage} from '../../../../hooks/message';\nimport {useSelector} from 'react-redux';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SelectItem} from '../../../../components/Select';\nimport {GatewayModel, GatewayNetworkSettingsModel} from '../../../../types/gateway';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {isValidIP, isValidPort, isValidRFAddress, isValidRFNetworkId} from '../../../../utils/validation';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {GATEWAY_TYPES} from '../GatewayListScreen';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst GATEWAY_NETWORK_SELECTION_ITEMS: SelectItem[] = [\n {value: true, label: 'Ethernet'},\n {value: false, label: 'Wi-Fi'},\n];\n\nconst BACK_URL = '/settings/gateway';\n\nexport const GatewayEditScreen = memo(function GatewayEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const [setActiveNumpadExtendedInput, renderNumpadExtendedKeyboard, currentNumpadExtendedInput] =\n useKeyboard('numpad-extended', true);\n const [rpc] = useRPC();\n const history = useHistory();\n\n const gatewayList = useSelector(state => state.control.gatewayList);\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [type, setType] = useState>(null);\n const [isUPnP, setUPnP] = useState(false);\n const [hasIntercomCamera, setHasIntercomCamera] = useState(false);\n const [rfNetworkAddress, setRFNetworkAddress] = useState('');\n const [rfNetworkID, setRFNetworkID] = useState('');\n const [rfNetworkChannel, setRFNetworkChannel] = useState('');\n const [homeNetworkOption, setHomeNetworkOption] = useState>(null);\n const [homeNetworkIP, setHomeNetworkIP] = useState('');\n // const [homeNetworkPort, setHomeNetworkPort] = useState('');\n const [homeNetworkSubnetMask, setHomeNetworkSubnetMask] = useState('');\n const [homeNetworkDefaultGateway, setHomeNetworkDefaultGateway] = useState('');\n const [remoteNetworkOption, setRemoteNetworkOption] = useState>(null);\n const [remoteNetworkIsStatic, setRemoteNetworkIsStatic] = useState(false);\n const [remoteNetworkIP, setRemoteNetworkIP] = useState('');\n const [remoteNetworkPort, setRemoteNetworkPort] = useState('');\n const [remoteNetworkSubnetMask, setRemoteNetworkSubnetMask] = useState('');\n const [remoteNetworkDefaultGateway, setRemoteNetworkDefaultGateway] = useState('');\n\n const setRemoteNetworkIsStaticCheckbox = useCallback(() => {\n setRemoteNetworkIsStatic(remoteNetworkIsStatic => !remoteNetworkIsStatic);\n }, []);\n\n const setUPnPCheckbox = useCallback(() => {\n setUPnP(isUPnP => !isUPnP);\n }, []);\n\n const setIntercomCamera = useCallback(() => {\n setHasIntercomCamera(hasIntercomCamera => !hasIntercomCamera);\n }, []);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n }, [setActiveInput, setActiveNumpadInput, setActiveNumpadExtendedInput]);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length < 3 || name === 'default') {\n failure(t('pls_enter_a_valid_gateway_name'));\n\n return false;\n }\n\n if (type == null || type.value == null) {\n failure(t('pls_enter_a_valid_gateway_type'));\n\n return false;\n }\n\n if (!isValidRFAddress(rfNetworkAddress)) {\n failure(t('rf_address_must_be_between_0_255'));\n\n return false;\n }\n\n if (!isValidRFNetworkId(rfNetworkID)) {\n failure(t('pls_select_a_valid_rf_network_id'));\n\n return false;\n }\n\n if (!isValidRFAddress(rfNetworkChannel)) {\n failure(t('rf_channel_must_be_between_0_255'));\n\n return false;\n }\n\n // if (!isValidPort(homeNetworkPort)) {\n // failure(t('pls_enter_a_valid_home_network_port'));\n //\n // return false;\n // }\n\n if (homeNetworkOption == null || homeNetworkOption.value == null) {\n failure(t('pls_select_a_valid_home_network'));\n\n return false;\n }\n\n if (!isValidIP(homeNetworkIP)) {\n failure(t('pls_enter_a_valid_home_network_id_address'));\n\n return false;\n }\n\n if (!isValidIP(homeNetworkSubnetMask)) {\n failure(t('pls_enter_a_valid_home_network_subnet_mask'));\n\n return false;\n }\n\n if (!isValidIP(homeNetworkDefaultGateway)) {\n failure(t('pls_enter_a_valid_home_network_default_gateway'));\n\n return false;\n }\n\n if (!isValidPort(remoteNetworkPort)) {\n failure(t('pls_enter_a_valid_remote_network_port'));\n\n return false;\n }\n\n if (remoteNetworkOption == null || remoteNetworkOption.value == null) {\n failure(t('pls_select_a_valid_remote_network'));\n\n return false;\n }\n\n if (homeNetworkOption.value !== remoteNetworkOption.value) {\n if (remoteNetworkIsStatic) {\n if (!isValidIP(remoteNetworkIP)) {\n failure(t('pls_enter_a_valid_remote_network_ip_address'));\n\n return false;\n }\n\n if (!isValidIP(remoteNetworkSubnetMask)) {\n failure(t('pls_enter_a_valid_remote_network_subnet_mask'));\n\n return false;\n }\n\n if (!isValidIP(remoteNetworkDefaultGateway)) {\n failure(t('pls_enter_a_valid_remote_network_default_gateway'));\n\n return false;\n }\n }\n }\n\n return true;\n }, [\n t,\n failure,\n homeNetworkIP,\n homeNetworkOption,\n // homeNetworkPort,\n homeNetworkSubnetMask,\n homeNetworkDefaultGateway,\n name,\n remoteNetworkIP,\n remoteNetworkOption,\n remoteNetworkPort,\n remoteNetworkIsStatic,\n remoteNetworkSubnetMask,\n remoteNetworkDefaultGateway,\n rfNetworkAddress,\n rfNetworkChannel,\n rfNetworkID,\n type,\n ]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const homeNetworkSettings: GatewayNetworkSettingsModel = {\n is_ethernet: homeNetworkOption.value,\n is_static: true,\n ip_address: homeNetworkIP,\n // port: Number(homeNetworkPort),\n port: 8088,\n subnet_mask: homeNetworkSubnetMask,\n default_gateway: homeNetworkDefaultGateway,\n };\n\n let sipSettings = selected?.settings.sip;\n let intercomSettings = selected?.settings.intercom;\n\n if (!selected) {\n sipSettings = {\n flat_name: '',\n password: '',\n server_ip: '',\n server_port: 0,\n user_id: 0,\n };\n\n intercomSettings = {\n has_usb_camera: hasIntercomCamera,\n };\n }\n\n const gatewayModel: GatewayModel = {\n id: selected ? selected.id : null,\n name,\n type_id: type.value,\n upnp: isUPnP,\n settings: {\n ...selected ? selected.settings : {},\n intercom: {\n ...intercomSettings,\n has_usb_camera: hasIntercomCamera,\n },\n sip: sipSettings,\n home_network: homeNetworkSettings,\n rf: {\n address: Number(rfNetworkAddress),\n network_id: Number(rfNetworkID),\n channel: Number(rfNetworkChannel),\n },\n remote_network: homeNetworkOption.value !== remoteNetworkOption.value ? {\n is_ethernet: remoteNetworkOption.value,\n is_static: remoteNetworkIsStatic,\n ip_address: remoteNetworkIP,\n port: Number(remoteNetworkPort),\n subnet_mask: remoteNetworkSubnetMask,\n default_gateway: remoteNetworkDefaultGateway,\n } : {\n ...homeNetworkSettings,\n port: Number(remoteNetworkPort),\n },\n setup_mode: false,\n },\n };\n\n return rpc.updateGateway(gatewayModel)\n .then(() => {\n success(t(gatewayModel.id ? 'gateway_successfully_edited' : 'gateway_successfully_created'));\n onBackPressed();\n })\n .catch(failure);\n }, [\n t,\n rpc,\n success,\n failure,\n onBackPressed,\n selected,\n isFieldsValid,\n name,\n type,\n isUPnP,\n hasIntercomCamera,\n rfNetworkAddress,\n rfNetworkID,\n rfNetworkChannel,\n homeNetworkOption,\n homeNetworkIP,\n // homeNetworkPort,\n homeNetworkSubnetMask,\n homeNetworkDefaultGateway,\n remoteNetworkOption,\n remoteNetworkIsStatic,\n remoteNetworkIP,\n remoteNetworkPort,\n remoteNetworkSubnetMask,\n remoteNetworkDefaultGateway,\n ]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteGateway(selected.id)\n .then(() => {\n success(t('gateway_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, success, failure, onBackPressed, rpc, selected]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n t('this_will_be_deleted_with_this_message__continue',{name:selected?.name, message})}/>,\n },\n {\n text: t('wifi_settings'),\n url: `/settings/gateway/${selected ? selected.id : ''}/wifi`,\n className: 'blue',\n hidden: !(selected),\n },\n {\n text: t('sip_settings'),\n url: `/settings/gateway/${selected ? selected.id : ''}/sip`,\n className: 'blue',\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed, onDeletePressed, selected]);\n\n\n const GATEWAY_TYPE_SELECTION_ITEMS = useMemo[]>(() =>\n Object.entries(GATEWAY_TYPES).map(([id, name]) => ({\n value: id,\n label: t(name)\n })), [t]);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setType(GATEWAY_TYPE_SELECTION_ITEMS[0]);\n setHomeNetworkOption(GATEWAY_NETWORK_SELECTION_ITEMS[0]);\n setRemoteNetworkOption(GATEWAY_NETWORK_SELECTION_ITEMS[0]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const gateway = gatewayList.find(gateway => gateway.id === params['id']);\n if (gateway == null) {\n return;\n }\n\n setSelected(gateway);\n setName(gateway.name);\n setType(GATEWAY_TYPE_SELECTION_ITEMS.find(option => option.value === gateway.type_id));\n setUPnP(gateway.upnp);\n setHasIntercomCamera(gateway.settings.intercom.has_usb_camera);\n setRFNetworkAddress(gateway.settings.rf.address.toString());\n setRFNetworkID(gateway.settings.rf.network_id.toString());\n setRFNetworkChannel(gateway.settings.rf.channel.toString());\n if (gateway.settings.home_network) {\n setHomeNetworkOption(GATEWAY_NETWORK_SELECTION_ITEMS.find(\n option => option.value === gateway.settings.home_network.is_ethernet));\n setHomeNetworkIP(gateway.settings.home_network.ip_address);\n // setHomeNetworkPort(gateway.settings.home_network.port.toString());\n setHomeNetworkSubnetMask(gateway.settings.home_network.subnet_mask);\n setHomeNetworkDefaultGateway(gateway.settings.home_network.default_gateway);\n }\n\n if (gateway.settings.remote_network) {\n setRemoteNetworkOption(GATEWAY_NETWORK_SELECTION_ITEMS.find(\n option => option.value === gateway.settings.remote_network.is_ethernet));\n setRemoteNetworkPort(gateway.settings.remote_network.port.toString());\n if (gateway.settings.home_network.is_ethernet !== gateway.settings.remote_network.is_ethernet) {\n setRemoteNetworkIsStatic(gateway.settings.remote_network.is_static);\n if (gateway.settings.remote_network.is_static) {\n setRemoteNetworkIP(gateway.settings.remote_network.ip_address);\n setRemoteNetworkSubnetMask(gateway.settings.remote_network.subnet_mask);\n setRemoteNetworkDefaultGateway(gateway.settings.remote_network.default_gateway);\n }\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [gatewayList]);\n\n useEffect(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n // eslint-disable-next-line\n }, [remoteNetworkIsStatic]);\n\n return (\n \n \n
\n
\n \n \n \n {/**/}\n \n \n \n \n
\n
\n \n \n \n \n \n \n {\n renderIf(homeNetworkOption != null &&\n remoteNetworkOption != null &&\n homeNetworkOption.value !== remoteNetworkOption.value)(() =>\n <>\n {\n renderIf(remoteNetworkIsStatic)(() =>\n <>\n \n \n \n ,\n )\n }\n \n ,\n )\n }\n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n {\n renderNumpadExtendedKeyboard()\n }\n
\n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useKeyboard} from '../../../../../hooks/keyboard';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {SettingInputComponent} from '../../../../../components/Settings/SettingInputComponent';\nimport {isValidIP, isValidPort, isValidSIPNo} from '../../../../../utils/validation';\nimport {GatewayModel} from '../../../../../types/gateway';\nimport {useFilterSelector} from '../../../../../hooks/filter-selector';\nimport {SettingReadOnlyRowComponent} from '../../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {useLocalization} from '../../../../../hooks/localization';\n\nconst BACK_URL = '/settings/gateway';\n\nexport const SIPDetailScreen = memo(function SIPDetailScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const [setActiveNumpadExtendedInput, renderNumpadExtendedKeyboard, currentNumpadExtendedInput] =\n useKeyboard('numpad-extended', true);\n const [rpc] = useRPC();\n const history = useHistory();\n\n const filteredGatewayList = useFilterSelector(\n state => state.control.gatewayList,\n gateway => gateway.id === params.id);\n const selectedGateway = filteredGatewayList.length === 0 ? null : filteredGatewayList[0];\n\n const [userId, setUserId] = useState('');\n const [password, setPassword] = useState('');\n const [ip, setIP] = useState('');\n const [port] = useState('5060');\n const [flatName, setFlatName] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (!isValidSIPNo(userId)) {\n failure(t('pls_enter_a_valid_sip_user_no'));\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure(t('pls_enter_a_valid_password'));\n\n return false;\n }\n\n if (!isValidIP(ip)) {\n failure(t('pls_enter_a_valid_ip'));\n\n return false;\n }\n\n if (!isValidPort(port)) {\n failure(t('pls_enter_a_valid_port'));\n\n return false;\n }\n\n if (flatName == null || flatName.length === 0) {\n failure(t('pls_enter_a_valid_flat_name'));\n\n return false;\n }\n\n return true;\n }, [\n t,\n failure,\n userId,\n password,\n ip,\n port,\n flatName,\n ]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const gatewayModel: GatewayModel = {\n ...selectedGateway,\n settings: {\n ...selectedGateway.settings,\n sip: {\n user_id: Number(userId),\n password,\n server_ip: ip,\n server_port: Number(port),\n flat_name: flatName,\n },\n },\n };\n\n rpc.updateGateway(gatewayModel)\n .then(() => {\n success(t('successfully_saved'));\n onBackPressed();\n })\n .catch(failure);\n }, [\n t,\n isFieldsValid,\n rpc,\n success,\n failure,\n onBackPressed,\n userId,\n password,\n ip,\n port,\n flatName,\n selectedGateway,\n ]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n }, [setActiveInput, setActiveNumpadInput, setActiveNumpadExtendedInput]);\n\n const buttons = useMemo(() => [\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onSavePressed]);\n\n useEffect(() => {\n if (selectedGateway == null) {\n onBackPressed();\n\n return;\n }\n\n setUserId(selectedGateway.settings?.sip?.user_id?.toString() || '');\n setPassword(selectedGateway.settings?.sip?.password || '');\n setIP(selectedGateway.settings?.sip?.server_ip || '');\n // setPort(selectedGateway.settings?.sip?.server_port?.toString() || '');\n setFlatName(selectedGateway.settings?.sip?.flat_name || '');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n \n \n \n {/**/}\n
\n
\n \n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n {\n renderNumpadExtendedKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../../routes';\nimport {SIPDetailScreen} from './SIPDetailScreen';\n\nexport const SIPSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/gateway/:id/sip',\n component: SIPDetailScreen,\n },\n];\n","import React, {memo, useEffect, useState} from 'react';\nimport {onClickHandler} from '../../../../../utils/onclick';\n\nimport './index.scss';\nimport {RawDevice} from '../../../../../store/setup/state';\nimport {useSelector} from 'react-redux';\nimport {useOrientation} from '../../../../../hooks/orientation';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useLocalization} from \"../../../../../hooks/localization\";\n\ntype Props = {\n onClosePressed: () => void;\n rawDevice: RawDevice;\n deviceName: string;\n deviceImage: string;\n};\n\nfunction createNullArray(count) {\n if (!count) {\n return [];\n }\n\n return Array(count).fill(null);\n}\n\nexport const SetupIOTestComponent = memo(function SetupIOTestComponent(props: Props) {\n const {\n onClosePressed,\n rawDevice,\n deviceName,\n deviceImage,\n } = props;\n const {t} = useLocalization();\n const [rpc] = useRPC();\n const {failure} = useMessage();\n const orientation = useOrientation();\n const deviceType = useSelector(state => state.control.bridgeDeviceTypeList.find(d => d.id === rawDevice.device_type_id));\n\n const [outputs, setOutputs] = useState(createNullArray(deviceType?.output_count));\n const [inputs, setInputs] = useState(createNullArray(deviceType?.input_count));\n\n const outputClick = (slot: number) => {\n const newOutputs = outputs.map((o, i) => {\n if (i === slot) {\n return !o;\n }\n\n return o == null ? null : false;\n });\n rpc.setDirectOutput(rawDevice.gateway_id, rawDevice.unique_device_id, slot, newOutputs[slot] ? 1 : 0)\n .then(() => setOutputs(newOutputs))\n .catch(failure);\n };\n\n const inputClick = (slot: number) => {\n rpc.getDirectInput(rawDevice.gateway_id, rawDevice.unique_device_id, slot)\n .then((value) => setInputs(inputs => inputs.map((v, i) => {\n if (i === slot) {\n return Boolean(value);\n }\n\n return v;\n })))\n .catch(failure);\n };\n\n useEffect(() => {\n setOutputs(createNullArray(deviceType?.output_count));\n }, [deviceType?.output_count]);\n\n useEffect(() => {\n setInputs(createNullArray(deviceType?.input_count));\n }, [deviceType?.input_count]);\n\n return (\n
\n
\n
\n {t('io_test')}\n \n {deviceType?.name || '-'}\n
\n
\n
\n \n {t('device_name')}: {deviceName}\n \n
\n
\n \n {t('unique_id')}: {rawDevice.unique_device_id}\n \n
\n {/*
*/}\n {/* {t('VERSION')}: 1.27*/}\n {/*
*/}\n
\n \n {t('rf_power')}: {rawDevice.rf_power.toString()}\n \n
\n
\n
\n {t('close')}\n
\n
\n
\n
\n {\n inputs.map((state, i) => (\n
inputClick(i)}>\n {`IN${i}`}\n
\n
\n ))\n }\n
\n
\n {\n outputs.map((state, i) => (\n
outputClick(i)}>\n {`Q${i}`}\n
\n
\n ))\n }\n
\n
\n
\n );\n});\n","import {DefaultRootState, useSelector} from 'react-redux';\nimport {DependencyList} from 'react';\nimport {useSort} from './sort';\n\nexport function useSortBySelector(selector: (state: TState) => TSelected[], callbackfn: (item: TSelected) => TField, deps?: DependencyList) {\n const callback = function (s1: TSelected, s2: TSelected) {\n const f1 = callbackfn(s1);\n const f2 = callbackfn(s2);\n\n if (f1 > f2) {\n return 1;\n } else if (f1 < f2) {\n return -1;\n }\n\n return 0;\n };\n\n return useSort(useSelector(selector), callback, deps);\n}\n","import {DependencyList, useCallback, useMemo} from 'react';\n\nexport function useSort(content: T[], selector: (item1: T, item2: T) => number, deps: DependencyList = []) {\n const predicate = useCallback(selector, deps);\n return useMemo(() => content.sort(predicate), [content, predicate]);\n}\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../../components/Settings/SettingsPageContainer';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useParams} from 'react-router-dom';\n\nimport './index.scss';\nimport {RawDevice} from '../../../../../store/setup/state';\nimport {useSetSelector} from '../../../../../hooks/set-selector';\nimport {onClickHandler} from '../../../../../utils/onclick';\nimport {BridgeDeviceModel} from '../../../../../types/bridge-device';\nimport {Select, SelectItem} from '../../../../../components/Select';\nimport {addRawDeviceAction, clearRawDevicesAction, removeRawDeviceAction} from '../../../../../store/setup/actions';\nimport {SetupIOTestComponent} from '../SetupIOTestComponent';\nimport {useFilter} from '../../../../../hooks/filter';\nimport {useFilterSelector} from '../../../../../hooks/filter-selector';\nimport {\n BRIDGE_DEVICE_TYPE_ID_INO_PAN,\n BRIDGE_DEVICE_TYPE_ID_INO_PAN_2,\n BRIDGE_DEVICE_TYPE_ID_INO_PAN_3,\n} from '../../../../../types/control';\nimport {useSortBySelector} from '../../../../../hooks/sort-by-selector';\nimport {useQuestion} from '../../../../../hooks/question';\nimport {useLocalization} from \"../../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/gateway';\n\nconst MatchedItemButton = memo(function MatchedItemButton({color, text, onClick, disabled}: { color: string; text: string; onClick: () => void; disabled?: boolean }) {\n const {t} = useLocalization();\n return (\n
\n \n
\n );\n});\n\ntype MatchedItemProps = {\n deviceTypeName: string;\n deviceImage: string;\n deviceName: string;\n inputCount: number;\n outputCount: number;\n bridgeDeviceList: BridgeDeviceModel[];\n ioTestClick: () => void;\n deviceId?: string;\n onDeviceReset: () => void;\n onDeviceMatch: () => void;\n searchInProgress: boolean;\n} & RawDevice;\n\nconst MatchedItem = memo(function MatchedItem(props: MatchedItemProps) {\n const {t} = useLocalization();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n\n const {\n gateway_id,\n unique_device_id,\n device_type_id,\n rf_power,\n deviceTypeName,\n deviceImage,\n deviceName,\n bridgeDeviceList,\n ioTestClick,\n deviceId,\n onDeviceReset,\n onDeviceMatch,\n inputCount,\n outputCount,\n searchInProgress,\n } = props;\n\n const [findInProgress, setFindInProgress] = useState(false);\n const [selectedBridgeDevice, setSelectedBridgeDevice] = useState>(null);\n const [matchInProgress, setMatchInProgress] = useState(false);\n\n const bridgeDeviceOptionList: SelectItem[] = useMemo(() =>\n bridgeDeviceList\n .filter(bridgeDevice => bridgeDevice.gateway_id === gateway_id && bridgeDevice.type_id === device_type_id)\n .map(bridgeDevice => ({value: bridgeDevice, label: bridgeDevice.name})),\n [gateway_id, device_type_id, bridgeDeviceList],\n );\n\n const onFindClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n setFindInProgress(true);\n rpc.findDevice(gateway_id, unique_device_id, false)\n .catch(failure);\n }, [rpc, matchInProgress, gateway_id, unique_device_id, failure]);\n\n const onStopFindClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n setFindInProgress(false);\n rpc.findDevice(gateway_id, unique_device_id, true)\n .catch(failure);\n }, [rpc, matchInProgress, gateway_id, unique_device_id, failure]);\n\n const onResetClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n rpc.resetDevice(gateway_id, unique_device_id)\n .then((message: string) => {\n onDeviceReset();\n success(message);\n })\n .catch(failure);\n }, [matchInProgress, rpc, gateway_id, unique_device_id, success, failure, onDeviceReset]);\n\n const onIOTestClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n ioTestClick();\n }, [ioTestClick, matchInProgress]);\n\n const onMatchClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n if (selectedBridgeDevice?.value == null) {\n failure(t('pls_select_device'));\n\n return;\n }\n\n setMatchInProgress(true);\n rpc.matchDevice(gateway_id, unique_device_id, selectedBridgeDevice?.value?.id)\n .then(onDeviceMatch)\n .catch(failure)\n .finally(() => setMatchInProgress(false));\n }, [t, failure, gateway_id, matchInProgress, rpc, selectedBridgeDevice?.value, unique_device_id, onDeviceMatch]);\n\n const onReMatchClick = useCallback(() => {\n if (matchInProgress) {\n return;\n }\n\n setMatchInProgress(true);\n rpc.reMatchDevice(gateway_id, unique_device_id, deviceId)\n .catch(failure)\n .finally(() => setMatchInProgress(false));\n }, [matchInProgress, rpc, gateway_id, failure, unique_device_id, deviceId]);\n\n return (\n
\n
\n
\n \n {deviceTypeName}\n
\n
\n {\n renderIf(unique_device_id)(() =>\n <>\n {t('unique_id')}: {unique_device_id}\n {t('device_name')}: {deviceName}\n {t('rf_power')}: {rf_power.toString()}\n , () =>\n {t('device_name')}: {deviceName},\n )\n }\n
\n
\n
\n
\n {\n renderIf(deviceName.length === 0)(() =>\n ,\n )\n }\n
\n
\n {\n renderIf(unique_device_id.length > 0)(() =>\n <>\n {\n renderIf(findInProgress)(() =>\n , () =>\n ,\n )\n }\n \n {\n renderIf(inputCount > 0 || outputCount > 0)(() => (\n \n ), () => (
),\n )\n }\n ,\n )\n }\n {\n renderIf(deviceName.length === 0)(() =>\n ,\n () =>\n ' + t('match')}\n onClick={onReMatchClick}\n disabled={searchInProgress}/>,\n )\n }\n
\n
\n
\n );\n});\n\nexport const SetupMatchScreen = memo(function SetupMatchScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [rpc] = useRPC();\n const {failure} = useMessage();\n const dispatch = useDispatch();\n const question = useQuestion();\n\n const panelList = useFilterSelector(\n state => state.control.bridgeDeviceList,\n bridgeDevice => bridgeDevice.type_id === BRIDGE_DEVICE_TYPE_ID_INO_PAN || bridgeDevice.type_id === BRIDGE_DEVICE_TYPE_ID_INO_PAN_2 || bridgeDevice.type_id === BRIDGE_DEVICE_TYPE_ID_INO_PAN_3,\n []);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const filteredBridgeDeviceList = useFilter(\n bridgeDeviceList,\n bridgeDevice => bridgeDevice.unique_device_id == null || bridgeDevice.unique_device_id.length === 0,\n []);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n\n const [manualSearchInProgress, setManualSearchInProgress] = useState(false);\n const [automaticSearchInProgress, setAutomaticSearchInProgress] = useState(false);\n const [ioTestModalRawDevice, setIoTestModalRawDevice] = useState(null);\n\n const manualSearchText = useMemo(() =>\n manualSearchInProgress ? 'manual_searching' : 'manual_search', [manualSearchInProgress]);\n\n const automaticSearchText = useMemo(() =>\n automaticSearchInProgress ? 'automatic_searching' : 'automatic_search', [automaticSearchInProgress]);\n\n const gatewayList = useSelector(state => state.control.gatewayList);\n\n const selectedGateway = useMemo(() => gatewayList.find(gateway => gateway.id === params?.id) || null, [gatewayList, params?.id]);\n\n const rawDeviceList = useFilter(useSortBySelector(state => state.setup.rawDeviceList, r => r.unique_device_id ? -r.rf_power : -999, []), i => i.gateway_id === selectedGateway?.id);\n\n const setupMode = useMemo(() => selectedGateway?.settings?.setup_mode || false, [selectedGateway?.settings?.setup_mode]);\n\n const searchInProgress = useMemo(() => manualSearchInProgress || automaticSearchInProgress,\n [manualSearchInProgress, automaticSearchInProgress]);\n\n const changeSetupMode = useCallback((setupMode: boolean) => {\n if (searchInProgress) {\n return;\n }\n\n dispatch(clearRawDevicesAction());\n\n const job = () => {\n rpc.updateGateway({\n ...selectedGateway,\n settings: {\n ...selectedGateway?.settings,\n setup_mode: setupMode,\n },\n }).catch(failure);\n };\n\n if (setupMode && gatewayList.some(gateway => gateway.id !== selectedGateway.id && gateway.settings.setup_mode)) {\n question(t('there_can_be_only_one_gateway_setup_mode__do_you_want_get_other_gateways_to_home_mode'), () => {\n job();\n });\n return;\n }\n\n job();\n }, [t, searchInProgress, dispatch, rpc, selectedGateway, failure, gatewayList, question]);\n\n const disableSetupModePressed = useCallback(() => {\n changeSetupMode(false);\n }, [changeSetupMode]);\n\n const enableSetupModePressed = useCallback(() => {\n changeSetupMode(true);\n }, [changeSetupMode]);\n\n const manualSearchPressed = useCallback(() => {\n if (searchInProgress) {\n return;\n }\n\n dispatch(clearRawDevicesAction());\n if (panelList.length > 0) {\n dispatch(addRawDeviceAction({\n unique_device_id: '',\n gateway_id: selectedGateway.id,\n device_type_id: panelList[0].type_id,\n rf_power: 0,\n }));\n }\n\n setManualSearchInProgress(true);\n rpc.scanDevices(selectedGateway?.id, false)\n .catch(failure)\n .finally(() => {\n setManualSearchInProgress(false);\n });\n }, [searchInProgress, dispatch, panelList, rpc, selectedGateway?.id, failure]);\n\n const automaticSearchPressed = useCallback(() => {\n if (searchInProgress) {\n return;\n }\n\n dispatch(clearRawDevicesAction());\n if (panelList.length > 0) {\n dispatch(addRawDeviceAction({\n unique_device_id: '',\n gateway_id: selectedGateway.id,\n device_type_id: panelList[0].type_id,\n rf_power: 0,\n }));\n }\n\n setAutomaticSearchInProgress(true);\n rpc.scanDevices(selectedGateway.id, true)\n .catch(failure)\n .finally(() => {\n setAutomaticSearchInProgress(false);\n });\n }, [searchInProgress, dispatch, panelList, rpc, selectedGateway?.id, failure]);\n\n const onDeviceReset = useCallback((rawDevice: RawDevice) => {\n if (!setupMode) {\n dispatch(removeRawDeviceAction(rawDevice));\n }\n }, [dispatch, setupMode]);\n\n const onDeviceMatch = useCallback((rawDevice: RawDevice) => {\n if (setupMode) {\n dispatch(removeRawDeviceAction(rawDevice));\n }\n }, [dispatch, setupMode]);\n\n const buttons = useMemo(() => [\n {\n renderContent: () => {t('change_mode')}
{t('home')}
,\n onClick: enableSetupModePressed,\n className: 'gray',\n hidden: setupMode,\n },\n {\n renderContent: () => {t('change_mode')}
{t('setup')}
,\n onClick: disableSetupModePressed,\n className: 'gray',\n hidden: !setupMode,\n },\n {\n text: t(manualSearchText),\n onClick: manualSearchPressed,\n className: 'red',\n },\n {\n text: t(automaticSearchText),\n onClick: automaticSearchPressed,\n className: 'green',\n },\n ], [\n t,\n enableSetupModePressed,\n disableSetupModePressed,\n manualSearchPressed,\n manualSearchText,\n automaticSearchPressed,\n automaticSearchText,\n setupMode,\n ]);\n\n useEffect(() => {\n dispatch(clearRawDevicesAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n {\n rawDeviceList.map((item) =>\n bridgeDevice.unique_device_id === item.unique_device_id)?.name || ''}\n deviceId={item.unique_device_id.length === 0 ? panelList.find(p=>p.gateway_id === selectedGateway.id)?.id : bridgeDeviceList.find(bridgeDevice => bridgeDevice.unique_device_id === item.unique_device_id)?.id || ''}\n bridgeDeviceList={filteredBridgeDeviceList}\n ioTestClick={() => setIoTestModalRawDevice(item)}\n onDeviceReset={() => onDeviceReset(item)}\n onDeviceMatch={() => onDeviceMatch(item)}\n searchInProgress={searchInProgress}/>,\n )\n }\n
\n \n {\n renderIf(ioTestModalRawDevice != null)(() =>\n setIoTestModalRawDevice(null)}\n rawDevice={ioTestModalRawDevice}\n deviceName={bridgeDeviceList.find(bridgeDevice => bridgeDevice.unique_device_id === ioTestModalRawDevice.unique_device_id)?.name || ''}\n deviceImage={bridgeDeviceTypeSet[ioTestModalRawDevice.device_type_id]?.image_set?.default || '-'}/>,\n )\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../../routes';\nimport {SetupMatchScreen} from './SetupMatchScreen';\n\nexport const SetupRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/gateway/:id/setup/match',\n component: SetupMatchScreen,\n },\n];\n","import {RouteDefinition} from '../../../routes';\nimport {GatewayListScreen} from './GatewayListScreen';\nimport {GatewayEditScreen} from './GatewayEditScreen';\nimport {SIPSettingsRoutes} from './SIP';\nimport {SetupRoutes} from './Setup';\n\nexport const GatewaySettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/gateway/edit',\n component: GatewayEditScreen,\n },\n {\n routerLink: '/settings/gateway/edit/:id',\n component: GatewayEditScreen,\n },\n {\n routerLink: '/settings/gateway',\n component: GatewayListScreen,\n },\n ...SIPSettingsRoutes,\n ...SetupRoutes,\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {CameraModel} from '../../../../types/control';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: CameraModel) => item.id;\n\nexport const CameraListScreen = memo(function CameraListScreen() {\n const cameraList = useSelector(state => state.control.cameraList);\n const cameraBrandSet = useSetSelector(state => state.control.cameraBrandList);\n const {t} = useLocalization();\n\n const [selectedCamera, setSelectedCamera] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/camera/edit/${selectedCamera ? selectedCamera.id : ''}`,\n className: 'orange',\n hidden: !(selectedCamera),\n },\n {\n text: t('create_camera'),\n url: '/settings/camera/edit',\n className: 'green',\n },\n ], [t, selectedCamera]);\n\n const displayNameExtractor = useCallback((item: CameraModel, column: ColumnModel) => {\n if (column.key === 'camera_brand_id') {\n return cameraBrandSet[item.camera_brand_id].name;\n }\n\n return item[column.key] || '-';\n }, [cameraBrandSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('camera_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('brand'),\n key: 'camera_brand_id',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {CameraBrandModel, CameraModel} from '../../../../types/control';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useQuestion} from '../../../../hooks/question';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {isValidIP, isValidPort, isValidString} from '../../../../utils/validation';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {AreaModel} from '../../../../store/control/state';\nimport {useMap} from '../../../../hooks/map';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/camera';\n\n// const CAMERA_PROTOCOL_LIST = {\n// 'http': 'HTTP',\n// };\n\n// const CAMERA_PROTOCOL_SELECT_ITEM_LIST: SelectItem[] =\n// Object.entries(CAMERA_PROTOCOL_LIST).map(([id, name]) => ({value: id, label: name}));\n\nexport const CameraEditScreen = memo(function CameraEditScreen() {\n const {t} = useLocalization()\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const [setActiveNumpadExtendedInput, renderNumpadExtendedKeyboard, currentNumpadExtendedInput] =\n useKeyboard('numpad-extended', true);\n const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const cameraList = useSelector(state => state.control.cameraList);\n const cameraBrandOptionList: SelectItem[] = useMapSelector(\n state => state.control.cameraBrandList,\n cameraBrand => ({\n value: cameraBrand,\n label: cameraBrand.name,\n }),\n // {\n // value: 'manual',\n // label: 'Manual',\n // },\n );\n const areaOptionList = useMap(\n useFilterSelector(state => state.control.areaList, area => area.type === 'place', []),\n area => ({value: area, label: area.name}),\n []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => cameraList.find(device => device.id === params['id']) || null, []);\n const [name, setName] = useState(selected?.name || '');\n const [areaOption, setAreaOption] = useState>(\n selected == null ? areaOptionList[0] || null :\n areaOptionList.find(areaOption => areaOption.value.id === selected.area_id) || null);\n const [cameraBrandModel, setCameraBrandModel] = useState>(\n selected == null ? cameraBrandOptionList[0] || null :\n cameraBrandOptionList.find(cameraBrandOption => cameraBrandOption.value.id === selected.camera_brand_id)\n || null,\n );\n\n const [ip, setIP] = useState(selected?.ip || '');\n\n const [username, setUsername] = useState(selected?.username || '');\n const [password, setPassword] = useState(selected?.password || '');\n\n const [useRTSP, setUseRTSP] = useState(Boolean(selected?.rtsp?.port));\n const [rtspPort, setRTSPPort] = useState(selected?.rtsp?.port?.toString() || '');\n const [rtspRemotePort, setRTSPRemotePort] = useState(selected?.rtsp?.remote_port?.toString() || '');\n\n const [useVideoCGI, setUseVideoCGI] = useState(Boolean(selected?.video_cgi?.port));\n const [videoCGIPort, setVideoCGIPort] = useState(selected?.video_cgi?.port?.toString() || '');\n const [videoCGIRemotePort, setVideoCGIRemotePort] = useState(selected?.video_cgi?.remote_port?.toString() || '');\n\n\n const [useMJPEG, setUseMJPEG] = useState(Boolean(selected?.mjpeg?.port));\n const [mjpegPort, setMJPEGPort] = useState(selected?.mjpeg?.port?.toString() || '');\n const [mjpegRemotePort, setMJPEGRemotePort] = useState(selected?.mjpeg?.remote_port?.toString() || '');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_camera_name'));\n\n return false;\n }\n\n if (areaOption?.value == null) {\n failure(t('pls_select_an_area'));\n\n return false;\n }\n\n if (cameraBrandModel == null || cameraBrandModel.value == null) {\n failure(t('pls_select_a_valid_brand_model'));\n\n return false;\n }\n\n if(!(useMJPEG || useVideoCGI || useRTSP)){\n failure(t('pls_select_at_least_one_protocol'));\n\n return false;\n }\n\n if (!isValidIP(ip)) {\n failure(t('pls_enter_a_valid_ip_address'));\n\n return false;\n }\n\n if (cameraBrandModel.value.authentication_required) {\n if (!isValidString(username)) {\n failure(t('pls_enter_a_valid_username'));\n\n return false;\n }\n\n if (!isValidString(password)) {\n failure(t('pls_enter_a_valid_password'));\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.rtsp && useRTSP) {\n if (!isValidPort(rtspPort)) {\n failure('pls_enter_a_valid_rtsp_port');\n\n return false;\n }\n\n if (!isValidPort(rtspRemotePort)) {\n failure(t('pls_enter_a_valid_rtsp_remote_port'));\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.mjpeg && useMJPEG) {\n if (!isValidPort(mjpegPort)) {\n failure(t('pls_enter_a_valid_mjpeg_port'));\n\n return false;\n }\n\n if (!isValidPort(mjpegRemotePort)) {\n failure(t('pls_enter_a_valid_mjpeg_remote_port'));\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.video_cgi && useVideoCGI) {\n if (!isValidPort(videoCGIPort)) {\n failure(t('pls_enter_a_valid_video_cgi_port'));\n\n return false;\n }\n\n if (!isValidPort(videoCGIRemotePort)) {\n failure(t('pls_enter_a_valid_video_cgi_remote_port'));\n\n return false;\n }\n }\n return true;\n }, [\n t,\n areaOption?.value,\n cameraBrandModel,\n failure,\n ip,\n mjpegPort,\n mjpegRemotePort,\n name,\n password,\n rtspPort,\n rtspRemotePort,\n useMJPEG,\n useRTSP,\n useVideoCGI,\n username,\n videoCGIPort,\n videoCGIRemotePort,\n ]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const cameraModel: CameraModel = {\n id: selected != null ? selected.id : null,\n name,\n camera_brand_id: cameraBrandModel.value.id,\n area_id: areaOption.value.id,\n username: cameraBrandModel.value.authentication_required ? username : '',\n password: cameraBrandModel.value.authentication_required ? password : '',\n ip,\n };\n\n if (cameraBrandModel.value.rtsp && useRTSP) {\n cameraModel.rtsp = {\n port: Number(rtspPort),\n remote_port: Number(rtspRemotePort),\n };\n }\n\n if (cameraBrandModel.value.mjpeg && useMJPEG) {\n cameraModel.mjpeg = {\n port: Number(mjpegPort),\n remote_port: Number(mjpegRemotePort),\n };\n }\n\n if (cameraBrandModel.value.video_cgi && useVideoCGI) {\n cameraModel.video_cgi = {\n port: Number(videoCGIPort),\n remote_port: Number(videoCGIRemotePort),\n };\n }\n\n return rpc.updateCamera(cameraModel)\n .then(() => {\n success( t(cameraModel.id ? 'device_successfully_edited' : 'device_successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n selected,\n name,\n cameraBrandModel?.value?.id,\n cameraBrandModel?.value?.authentication_required,\n cameraBrandModel?.value?.rtsp,\n cameraBrandModel?.value?.mjpeg,\n cameraBrandModel?.value?.video_cgi,\n areaOption?.value?.id,\n username,\n password,\n ip,\n useRTSP,\n useMJPEG,\n useVideoCGI,\n rpc,\n failure,\n rtspPort,\n rtspRemotePort,\n mjpegPort,\n mjpegRemotePort,\n videoCGIPort,\n videoCGIRemotePort,\n success,\n onBackPressed,\n ]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_you_want_to_delete'), () => {\n return rpc.deleteCamera(selected.id)\n .then(() => {\n success(t('camera_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, failure, onBackPressed, question, rpc, selected, success]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n }, [setActiveInput, setActiveNumpadInput, setActiveNumpadExtendedInput]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, selected, onSavePressed, onDeletePressed],\n );\nconsole.log({cameraBrandModel});\n return (\n \n \n
\n
\n \n \n \n \n {\n renderIf(cameraBrandModel?.value?.authentication_required)(() => (\n <>\n \n \n \n ))\n }\n
\n
\n {\n renderIf(cameraBrandModel?.value?.rtsp)(() => (\n <>\n setUseRTSP(r => !r)}\n value={useRTSP}/>\n {\n renderIf(useRTSP)(() => (\n <>\n \n \n \n ))\n }\n \n ))\n }\n {\n renderIf(cameraBrandModel?.value?.video_cgi)(() => (\n <>\n setUseVideoCGI(r => !r)}\n value={useVideoCGI}/>\n {\n renderIf(useVideoCGI)(() => (\n <>\n \n \n \n ))\n }\n \n ))\n }\n {\n renderIf(cameraBrandModel?.value?.mjpeg)(() => (\n <>\n setUseMJPEG(r => !r)}\n value={useMJPEG}/>\n {\n renderIf(useMJPEG)(() => (\n <>\n \n \n \n ))\n }\n \n ))\n }\n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n {\n renderNumpadExtendedKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {CameraListScreen} from \"./CameraListScreen\";\nimport {CameraEditScreen} from './CameraEditScreen';\n\nexport const CameraSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/camera/edit',\n component: CameraEditScreen,\n },\n {\n routerLink: '/settings/camera/edit/:id',\n component: CameraEditScreen,\n },\n {\n routerLink: '/settings/camera',\n component: CameraListScreen,\n },\n];\n","import {DefaultRootState} from 'react-redux';\nimport {ControlModel, GlassControlParameters} from '../types/control';\nimport {useSetSelector} from './set-selector';\nimport {useMemo} from 'react';\nimport {useMapSelector} from './map-selector';\n\nexport type CONTROL_WRAPPER = {\n id: string;\n isVirtual: boolean;\n bridgeDeviceId: string;\n glassControlParameters: Omit;\n control: ControlModel;\n};\n\nexport function useControlSelector() {\n\n const controlSet = useSetSelector(state => state.control.controlList);\n\n const controlList: CONTROL_WRAPPER[] = useMapSelector(\n state => state.control.controlList,\n control => ({\n id: control.id,\n bridgeDeviceId: control.bridge_device_id,\n isVirtual: false,\n glassControlParameters: (control.parameters as GlassControlParameters),\n control,\n }),\n );\n\n const virtualControlList: CONTROL_WRAPPER[] = useMapSelector(\n state => state.control.virtualControlList,\n virtualControl => ({\n id: virtualControl.id,\n bridgeDeviceId: virtualControl.bridge_device_id,\n isVirtual: true,\n glassControlParameters: virtualControl.parameters,\n control: controlSet[virtualControl.control_id],\n }),\n [controlSet],\n );\n\n return useMemo(() => [...controlList, ...virtualControlList], [controlList, virtualControlList]);\n}\n","import {SelectItem} from '../components/Select';\nimport {useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n BRIDGE_DEVICE_TYPE_ID_STPM,\n CONTROL_TYPE_ID_THERMOSTAT,\n ControlModel,\n GlassControlParameters,\n} from '../types/control';\nimport {BridgeDeviceTypeModel} from '../types/bridge-device-type';\nimport {STPUIEntity, VirtualControlModel} from '../store/control/state';\nimport {useControlSelector} from './control-selector';\nimport {useSetSelector} from './set-selector';\nimport {useSelector} from 'react-redux';\n\nexport function useGlassControl(\n selected: ControlModel | VirtualControlModel | STPUIEntity,\n bridgeDeviceId: string,\n bridgeDeviceType: BridgeDeviceTypeModel,\n controlTypeId?: string) {\n\n const stpUIList = useSelector(state => state.control.stpUIList);\n const controlList = useControlSelector();\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n\n const isSTPUIEntity = selected?.hasOwnProperty('page_number') === true;\n\n const glassControlParameters: GlassControlParameters =\n !isSTPUIEntity ?\n ((selected as ControlModel)?.parameters as GlassControlParameters) :\n null;\n\n const [onlyEmptyPages, setOnlyEmptyPages] = useState(false);\n const pageOptionList: SelectItem[] = useMemo(() => {\n const list: SelectItem[] = [];\n const sameBridgeDevice = selected?.id != null && selected.bridge_device_id === bridgeDeviceId;\n const selectedPageNumber = selected?.id != null && (selected as STPUIEntity).page_number;\n // const isMediaOrAir = selected?.id != null && ((selected as STPUIEntity).type === 'media' || (selected as STPUIEntity).type === 'air');\n\n if (bridgeDeviceType?.page_count > 0) {\n const occupiedBySelected = sameBridgeDevice && selectedPageNumber === 0;// todo removed: && isMediaOrAir;\n let occupied = false;\n if (!occupiedBySelected) {\n occupied = stpUIList.some(stpUI =>\n stpUI.bridge_device_id === bridgeDeviceId &&\n stpUI.page_number === 0 &&\n (selected == null || stpUI.relational_id !== selected.id) &&\n (onlyEmptyPages || stpUI.type === 'media' || stpUI.type === 'air'),\n );\n }\n if (occupiedBySelected || !occupied) {\n console.log({occupiedBySelected, occupied});\n list.push({\n value: 0,\n label: bridgeDeviceType.has_home_page === true ?\n 'Anasayfa' :\n '0',\n });\n } else {\n console.log({nope: true, occupiedBySelected, occupied});\n }\n }\n\n for (let index = 1; index < bridgeDeviceType?.page_count; index++) {\n const occupiedBySelected = sameBridgeDevice && selectedPageNumber === index; // todo removed: && isMediaOrAir;\n let occupied = false;\n if (!occupiedBySelected) {\n for (const stpUI of stpUIList) {\n if (stpUI.bridge_device_id === bridgeDeviceId &&\n stpUI.page_number === index &&\n (onlyEmptyPages || stpUI.type === 'media' || stpUI.type === 'air')) {\n occupied = true;\n break;\n }\n }\n }\n\n if (occupiedBySelected || !occupied) {\n list.push({value: index, label: index.toString()});\n }\n }\n\n return list;\n }, [bridgeDeviceId, selected, stpUIList, bridgeDeviceType?.page_count, bridgeDeviceType?.has_home_page, onlyEmptyPages]);\n const [pageNumber, setPageNumber] = useState>(() =>\n (selected == null || !isSTPUIEntity) ? null :\n pageOptionList.find(option => option.value === (selected as STPUIEntity).page_number)\n || null,\n );\n\n const isThermostat = useCallback((pageNumber: number, rowNumber: number) => {\n if (bridgeDeviceType?.id !== BRIDGE_DEVICE_TYPE_ID_STPM) {\n return false;\n }\n\n for (const stpUI of stpUIList) {\n if (stpUI.bridge_device_id === bridgeDeviceId && stpUI.page_number === pageNumber && stpUI.row_number === rowNumber) {\n if (stpUI.type === 'control' || stpUI.type === 'virtualControl') {\n const control = controlList.find(c => c.id === stpUI.relational_id)?.control;\n if (control?.type_id === CONTROL_TYPE_ID_THERMOSTAT) {\n return true;\n }\n }\n }\n }\n\n return false;\n }, [bridgeDeviceId, bridgeDeviceType?.id, controlList, stpUIList]);\n\n const rowOptionList: SelectItem[] = useMemo(() => {\n if (selected != null && !isSTPUIEntity) {\n return [];\n }\n\n const list: SelectItem[] = [];\n const sameBridgeDevice = selected?.id != null && selected.bridge_device_id === bridgeDeviceId;\n const selectedPageNumber = selected?.id != null && (selected as STPUIEntity).page_number;\n const samePageNumber = selectedPageNumber != null && selectedPageNumber === pageNumber?.value;\n const isMediaOrAir = selected?.id != null && ((selected as STPUIEntity).type === 'media' || (selected as STPUIEntity).type === 'air');\n const selectedRowNumber = selected?.id != null && (selected as STPUIEntity).row_number;\n for (let index = 1; index <= bridgeDeviceType?.row_count; index++) {\n const occupiedBySelected = sameBridgeDevice && samePageNumber && (isMediaOrAir || selectedRowNumber === index);\n if (!occupiedBySelected) {\n const occupied = stpUIList.some(stpUI =>\n stpUI.bridge_device_id === bridgeDeviceId &&\n stpUI.page_number === pageNumber?.value &&\n (stpUI.type === 'media' || stpUI.type === 'air' || stpUI.row_number === index || isThermostat(pageNumber?.value, index - 1)),\n );\n if (occupied) {\n continue;\n }\n }\n\n list.push({value: index, label: (index).toString()});\n }\n\n return list;\n }, [isSTPUIEntity, isThermostat, selected, bridgeDeviceType?.row_count, bridgeDeviceId, pageNumber, stpUIList]);\n const [rowNumber, setRowNumber] = useState>(() =>\n (selected == null || !isSTPUIEntity) ? null :\n rowOptionList.find(option => option.value === (selected as STPUIEntity).row_number)\n || null,\n );\n const buttonNumberOptionList: SelectItem[] = useMemo(() => {\n const list: SelectItem[] = [];\n const sameBridgeDevice = selected?.id != null &&\n selected.bridge_device_id === bridgeDeviceId;\n const selectedButtonNumber = selected?.id != null && glassControlParameters?.button_number;\n const controlType = controlTypeSet[controlTypeId];\n if (controlType?.render_type === 'three_phase' || controlType?.render_type === 'two_phase') {\n for (let index = 0; index < bridgeDeviceType?.button_count; index += 2) {\n const occupiedBySelected = sameBridgeDevice && selectedButtonNumber === index;\n if (!occupiedBySelected) {\n const occupied = controlList.some(control => {\n const itemSameBridgeDevice = control.bridgeDeviceId === bridgeDeviceId;\n const buttonNumber = control.glassControlParameters?.button_number;\n return itemSameBridgeDevice && (buttonNumber === index || buttonNumber === index + 1);\n },\n );\n if (occupied) {\n continue;\n }\n }\n\n list.push({value: index, label: `${(index + 1).toString()}-${(index + 2).toString()}`});\n }\n } else {\n for (let index = 0; index < bridgeDeviceType?.button_count; index++) {\n const occupiedBySelected = sameBridgeDevice && selectedButtonNumber === index;\n if (!occupiedBySelected) {\n const occupied = controlList.some(control => {\n const itemSameBridgeDevice = control.bridgeDeviceId === bridgeDeviceId;\n const isThreePhase = controlTypeSet[control.control.type_id]?.render_type === 'three_phase' || controlTypeSet[control.control.type_id]?.render_type === 'two_phase';\n const buttonNumber = control.glassControlParameters?.button_number;\n return itemSameBridgeDevice && (buttonNumber === index || (isThreePhase && buttonNumber === index - 1));\n },\n );\n if (occupied) {\n continue;\n }\n }\n\n list.push({value: index, label: (index + 1).toString()});\n }\n }\n\n return list;\n }, [selected?.id, selected?.bridge_device_id, glassControlParameters, controlTypeSet, controlTypeId, bridgeDeviceId, bridgeDeviceType?.button_count, controlList]);\n const [buttonNumber, setButtonNumber] = useState>(() =>\n (selected == null ? buttonNumberOptionList[0] :\n buttonNumberOptionList.find(option => option.value === glassControlParameters?.button_number)\n || null),\n );\n\n useEffect(() => {\n setPageNumber(pageOptionList.find(option => option.value === pageNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageOptionList]);\n\n useEffect(() => {\n setRowNumber(rowOptionList.find(option => option.value === rowNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowOptionList]);\n\n useEffect(() => {\n setButtonNumber(buttonNumberOptionList.find(option => option.value === buttonNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buttonNumberOptionList]);\n\n\n return ({\n pageNumber, setPageNumber, pageOptionList,\n rowNumber, setRowNumber, rowOptionList,\n buttonNumber, setButtonNumber, buttonNumberOptionList,\n setOnlyEmptyPages,\n });\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, {Fragment, memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useLocation, useParams} from 'react-router-dom';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useSelector} from 'react-redux';\nimport {\n AlarmControlParameters, BRIDGE_DEVICE_TYPE_ID_ST, BRIDGE_DEVICE_TYPE_ID_STPM, BRIDGE_DEVICE_TYPE_ID_STS_PLUS,\n CONTROL_TYPE_ID_ALARM,\n CONTROL_TYPE_ID_DIMMER,\n CONTROL_TYPE_ID_SIREN,\n CONTROL_TYPE_ID_THERMOSTAT,\n ControlModel,\n ControlParameters,\n ControlRenderType,\n ControlTypeModel,\n DeviceParameters,\n DimmerControlParameters,\n INPUT_TYPE_ID_MOMENTARY,\n INPUT_TYPE_ID_SENSOR,\n IOControlParameters,\n PulseControlParameters,\n SimpleControlParameters,\n SirenControlParameters,\n TemperatureControlSettings,\n ThreePhaseControlParameters,\n} from '../../../../types/control';\nimport {SelectItem} from '../../../../components/Select';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {AreaModel} from '../../../../store/control/state';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {\n isValidDuration,\n isValidMaxDimmerValue,\n isValidMinDimmerValue,\n isValidPulseDuration,\n} from '../../../../utils/validation';\n\nimport {CONTROL_WRAPPER, useControlSelector} from '../../../../hooks/control-selector';\nimport {useGlassControl} from '../../../../hooks/glass-control';\nimport {useMap} from '../../../../hooks/map';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from '../../../../hooks/localization';\n\nconst BACK_URL = '/settings/control';\nconst INPUT_EDIT_URL = '/settings/input/edit';\n\nconst CONTROL_TYPE_VALUE_MAP: Record[]> = {\n complex: [\n {\n value: 0,\n label: 'close_stop',\n },\n {\n value: 1,\n label: 'open_up',\n },\n {\n value: 2,\n label: 'down',\n },\n {\n value: 3,\n label: 'open_close',\n },\n ],\n simple: [\n {\n value: 0,\n label: 'close',\n },\n {\n value: 1,\n label: 'open',\n },\n ],\n three_phase: [\n {\n value: 0,\n label: 'stop',\n },\n {\n value: 1,\n label: 'up',\n },\n {\n value: 2,\n label: 'down',\n },\n ],\n two_phase: [\n {\n value: 1,\n label: 'up',\n },\n {\n value: 2,\n label: 'down',\n },\n ],\n pulse: [\n {\n value: 0,\n label: 'passive',\n },\n {\n value: 1,\n label: 'active',\n },\n ],\n};\n\nexport const NO_OUTPUT_OPTION: SelectItem = {value: 99, label: 'do_not_output'};\n\ntype ALARM_CONTROL_VALUE = {\n id: string;\n isVirtual: boolean;\n};\n\nexport const ControlEditScreen = memo(function ControlEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n const location = useLocation();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const [setActiveNumpadExtendedInput, renderNumpadExtendedKeyboard, currentNumpadExtendedInput] =\n useKeyboard('numpad-extended', true);\n\n const controlList = useControlSelector();\n const controlSet = useSetSelector(state => state.control.controlList);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n\n const bridgeDeviceOptionList: SelectItem[] =\n useMemo(() => bridgeDeviceList\n .filter(bridgeDevice => (bridgeDeviceTypeSet[bridgeDevice.type_id]?.output_count || 0) > 0)\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\n .map(bridgeDevice => ({\n value: bridgeDevice,\n label: bridgeDevice.name,\n })), [bridgeDeviceList, bridgeDeviceTypeSet]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => location.state || controlSet[params?.id] || null, []);\n const [bridgeDevice, setBridgeDevice] = useState>(\n (selected == null ? null :\n bridgeDeviceOptionList.find(bridgeDeviceOption => bridgeDeviceOption.value.id === selected.bridge_device_id)\n || null),\n );\n const bridgeDeviceType = useMemo(() => bridgeDevice == null ? null : bridgeDeviceTypeSet[bridgeDevice.value.type_id],\n [bridgeDevice, bridgeDeviceTypeSet]);\n\n const bridgeDeviceDimmerCount = useMemo(() => bridgeDeviceType?.dimmer_count || 0, [bridgeDeviceType]);\n const isBridgeDeviceTypeIO = useMemo(() => bridgeDeviceType?.is_io_device || false, [bridgeDeviceType]);\n const usedOutputList = useMemo(() => {\n const list = [];\n for (const control of Object.values(controlSet)) {\n if (control.bridge_device_id !== bridgeDevice?.value.id) {\n continue;\n }\n\n list.push(control.parameters.output_number);\n\n if (controlTypeSet[control.type_id].render_type === 'three_phase' || controlTypeSet[control.type_id].render_type === 'two_phase') {\n list.push((control.parameters as ThreePhaseControlParameters).down_output_number);\n }\n }\n\n return list;\n }, [bridgeDevice, controlSet, controlTypeSet]);\n\n const alarmControlOptionList: SelectItem[] = useMemo(() => {\n const controls = controlList\n .filter(control => control.bridgeDeviceId === bridgeDevice?.value?.id && control.control.type_id !== CONTROL_TYPE_ID_ALARM && control.control.type_id !== CONTROL_TYPE_ID_SIREN)\n .map(control => ({label: control.control.name, value: control}));\n\n controls.unshift({\n label: t('do_not_output'), value: {\n id: undefined,\n isVirtual: false,\n bridgeDeviceId: '',\n glassControlParameters: undefined,\n control: undefined,\n },\n });\n\n return controls;\n },\n [t, controlList, bridgeDevice?.value]);\n const outputNumberOptionList: SelectItem[] = useMemo(() => {\n const outputCount = bridgeDeviceType?.output_count || 0;\n if (outputCount === 0) {\n return [];\n }\n\n const list = [];\n list.push({...NO_OUTPUT_OPTION, label: t(NO_OUTPUT_OPTION.label)});\n for (let i = 0; i < outputCount; i++) {\n //@ts-ignore\n const isUsedOutput = usedOutputList.some((o) => o === i && (o !== selected?.parameters.output_number && o !== selected?.parameters.down_output_number));\n list.push({value: i, label: `${t('output')} ${i.toString()}${isUsedOutput ? '*' : ''}`});\n }\n\n return list;\n }, [t, bridgeDeviceType, usedOutputList, selected?.parameters]);\n const doubledOutputNumberOptionList: SelectItem[] = useMemo(() => {\n const outputCount = bridgeDeviceType?.output_count || 0;\n if (outputCount === 0) {\n return [];\n }\n\n const list = [];\n list.push({...NO_OUTPUT_OPTION, label: t(NO_OUTPUT_OPTION.label)});\n for (let i = 0; i + 1 < outputCount; i += 2) {\n //@ts-ignore\n const isUsedOutput = usedOutputList.some((o) => o === i && (o !== selected?.parameters.output_number && o !== selected?.parameters.down_output_number));\n list.push({\n value: i,\n label: `${t('output')} ${i.toString()} - ${(i + 1).toString()}${isUsedOutput ? '*' : ''}`,\n });\n }\n\n return list;\n }, [t, bridgeDeviceType, usedOutputList, selected?.parameters]);\n\n const controlTypeList = useSelector(state => state.control.controlTypeList);\n const controlTypeOptionList: SelectItem>[] =\n useMemo(() => controlTypeList\n .filter(controlType =>\n controlType.allowed_bridge_device_type_id_list.indexOf(bridgeDevice?.value?.type_id) !== -1)\n .filter(controlType =>\n controlType.id !== CONTROL_TYPE_ID_DIMMER || bridgeDeviceDimmerCount > 0)\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\n .map(controlType => ({\n value: controlType,\n label: controlType.name,\n })), [bridgeDeviceDimmerCount, bridgeDevice?.value?.type_id, controlTypeList]);\n\n const [name, setName] = useState(selected?.id != null ? selected?.name : '');\n const [controlType, setControlType] = useState>>(\n (selected == null ? null : controlTypeOptionList.find(controlTypeOption => controlTypeOption.value.id === selected.type_id)\n || null),\n );\n const [outputReverse, setOutputReverse] = useState((selected?.parameters as SimpleControlParameters)?.should_output_reverse || false);\n const [rememberLastValue, setRememberLastValue] = useState((selected?.parameters as IOControlParameters)?.should_remember_last_value || false);\n const [navigateToSTPEditor, setNavigateToSTPEditor] = useState();\n\n const thermostatBridgeDeviceOptionList: SelectItem[] = useMap(\n useFilterSelector(\n state => state.control.bridgeDeviceList,\n bridgeDeviceItem =>\n bridgeDeviceTypeSet[bridgeDeviceItem.type_id]?.is_temperature_device === true &&\n bridgeDevice?.value != null &&\n bridgeDevice.value.gateway_id === bridgeDeviceItem.gateway_id &&\n controlList.find(c =>\n c.isVirtual === false &&\n (c.control.temperature_settings?.bridge_device_id === bridgeDeviceItem.id && bridgeDeviceItem.id !== selected?.temperature_settings?.bridge_device_id)) == null,\n [bridgeDeviceTypeSet, bridgeDevice?.value, controlList, selected],\n ),\n bridgeDevice => ({value: bridgeDevice, label: bridgeDevice.name}),\n [],\n );\n\n const [thermostatBridgeDevice, setThermostatBridgeDevice] = useState>(\n (selected == null ? null :\n thermostatBridgeDeviceOptionList.find(b => b.value.id === selected.temperature_settings?.bridge_device_id)\n || null),\n );\n\n const thermostatBridgeDeviceType = useMemo(() => thermostatBridgeDevice == null ? null : bridgeDeviceTypeSet[thermostatBridgeDevice.value.type_id],\n [thermostatBridgeDevice, bridgeDeviceTypeSet]);\n\n const isThermostatBridgeDeviceIO = useMemo(() => thermostatBridgeDeviceType == null || thermostatBridgeDeviceType?.is_io_device, [thermostatBridgeDeviceType]);\n\n const [addInput, setAddInput] = useState(false);\n\n const {\n buttonNumberOptionList,\n setButtonNumber,\n buttonNumber,\n } =\n useGlassControl(selected, bridgeDevice?.value?.id || null, bridgeDeviceType, controlType?.value?.id);\n\n const areaList = useFilterSelector(state => state.control.areaList, area => area.type === 'room' || area.type === 'place', []);\n const areaOptionList: SelectItem[] =\n useMemo(() => areaList.map(area => ({value: area, label: area.name})), [areaList]);\n const [areaOption, setAreaOption] = useState>(\n (selected == null ? null : areaOptionList.find(areaOption => areaOption.value.id === selected.area_id)\n || null),\n );\n const [outputNumber, setOutputNumber] = useState>(\n (selected == null ||\n (!isBridgeDeviceTypeIO && (controlType?.value.render_type === 'three_phase' || controlType?.value.render_type === 'two_phase')) ? null :\n outputNumberOptionList.find(outputNumberOption => outputNumberOption.value === selected.parameters?.output_number)\n || null),\n );\n const [downOutputNumber, setDownOutputNumber] = useState>(\n (selected == null ||\n (!isBridgeDeviceTypeIO && (controlType?.value.render_type === 'three_phase' || controlType?.value.render_type === 'two_phase')) ? null :\n outputNumberOptionList.find(outputNumberOption => outputNumberOption.value === (selected.parameters as ThreePhaseControlParameters)?.down_output_number)\n || null),\n );\n const [doubledOutputNumber, setDoubledOutputNumber] = useState>(\n (selected == null || isBridgeDeviceTypeIO || (controlType?.value.render_type !== 'three_phase' && controlType?.value.render_type !== 'two_phase') ? null :\n doubledOutputNumberOptionList.find(outputNumberOption => outputNumberOption.value === selected.parameters?.output_number)\n || null),\n );\n const [outputDurationLimitSeconds, setOutputDurationLimitSeconds] = useState(\n (selected?.parameters as ThreePhaseControlParameters)?.output_time_limit?.toString()\n || '');\n const [pulseDuration, setPulseDuration] = useState(\n (((selected?.parameters as PulseControlParameters)?.pulse_time || 0) / 10).toString()\n || '');\n const [maxValue, setMaxValue] = useState((selected?.parameters as DimmerControlParameters)?.max_limit?.toString()\n || '100');\n const [minValue, setMinValue] = useState((selected?.parameters as DimmerControlParameters)?.min_limit?.toString()\n || '0');\n const ALARM_LEVEL_LIST = useMemo(() => [\n {\n value: 1,\n label: t('level_1'),\n },\n {\n value: 2,\n label: t('level_2'),\n },\n {\n value: 3,\n label: t('level_3'),\n },\n ], [t]);\n const [alarmLevelOption, setAlarmLevelOption] = useState>(\n selected == null ? ALARM_LEVEL_LIST[0] : (\n ALARM_LEVEL_LIST.find(alarmLevelOption => alarmLevelOption.value === (selected.parameters as SirenControlParameters)?.alarm_level)\n || null),\n );\n const SIREN_LEVEL_LIST = useMemo[]>(() => [\n {\n value: 0,\n label: t('all'),\n },\n {\n value: 1,\n label: t('level_1'),\n },\n {\n value: 2,\n label: t('level_2'),\n },\n {\n value: 3,\n label: t('level_3'),\n },\n ], [t]);\n const [sirenLevelOption, setSirenLevelOption] = useState>(\n selected == null ? SIREN_LEVEL_LIST[0] : (\n SIREN_LEVEL_LIST.find(sirenLevelOption => sirenLevelOption.value === (selected.parameters as SirenControlParameters)?.alarm_level)\n || null),\n );\n const [alarmControlOption, setAlarmControlOption] = useState>(\n selected == null ? null : (\n alarmControlOptionList.find(option => option.value.id === (selected?.parameters as AlarmControlParameters)?.relational_control_id)\n ) || null,\n );\n const SIREN_LIST = useMemo[]>(() => [\n {\n value: 0,\n label: t('inactive'),\n },\n {\n value: 1,\n label: t('intermittent'),\n },\n {\n value: 2,\n label: t('continuous'),\n },\n ], [t]);\n const [alarmSirenOption, setAlarmSirenOption] = useState>(\n selected == null ? SIREN_LIST[0] : (\n SIREN_LIST.find(sirenOption => sirenOption.value === (selected.parameters as AlarmControlParameters)?.siren_type)\n || null),\n );\n const HEATING_MODE_LIST = useMemo[]>(() => [\n {\n value: 1,\n label: t('heating'),\n },\n {\n value: 2,\n label: t('cooling'),\n },\n {\n value: 3,\n label: t('heating_cooling'),\n },\n ], [t]);\n const [heatingModeOption, setHeatingModeOption] = useState>(\n selected == null ? HEATING_MODE_LIST[0] : (\n HEATING_MODE_LIST.find(heatingOption => heatingOption.value === (\n selected.temperature_settings?.has_cooling && selected.temperature_settings?.has_heating ? 3 :\n (selected.temperature_settings?.has_cooling ? 2 : 1)\n ))\n || null),\n );\n const [alarmDelaySeconds, setAlarmDelaySeconds] = useState(\n (selected?.parameters as AlarmControlParameters)?.delay_time?.toString()\n || '');\n const defaultValueOptionList = useMemo(() => {\n if (!controlType) {\n return [];\n }\n\n return CONTROL_TYPE_VALUE_MAP[controlType.value.render_type].map(value => ({...value, label: t(value.label)}));\n }, [t, controlType]);\n const [defaultValueOption, setDefaultValueOption] = useState>(\n (selected == null ? null : defaultValueOptionList.find(defaultValueOption => defaultValueOption.value === (selected.parameters as IOControlParameters)?.default_value))\n || defaultValueOptionList[0] || null,\n );\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const goToInputEditScreenWithState = useCallback((state: unknown) => {\n history.push({pathname: INPUT_EDIT_URL, state});\n }, [history]);\n\n const goToStpEditorWithState = useCallback((state: unknown) => {\n // if (controlType?.value?.id === CONTROL_TYPE_ID_THERMOSTAT) {\n // state['controlId'] = controlList.find(c => c.isVirtual === true && state['controlId'] === c.control.id)?.id || state['controlId'];\n // }\n // todo above not working, as a result thermostat virtualControl's stpUIEntity page cannot be redirected\n history.push({pathname: `/settings/stp-editor/${bridgeDevice.value.id}/content/`, state});\n }, [bridgeDevice, history/*, controlType, controlList*/]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteControl(selected?.id)\n .then(() => {\n success(t('control_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, rpc, success, onBackPressed, selected?.id]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_control_name'));\n\n return false;\n }\n\n if (bridgeDevice?.value == null) {\n failure(t('pls_select_device'));\n\n return false;\n }\n\n if (controlType == null) {\n failure(t('pls_select_control_type'));\n\n return false;\n }\n\n if (areaOption?.value == null) {\n failure(t('pls_select_area'));\n\n return false;\n }\n\n if (controlType.value.id === CONTROL_TYPE_ID_ALARM) {\n if (alarmControlOption?.value == null) {\n failure(t('pls_select_control'));\n\n return false;\n }\n\n if (alarmSirenOption?.value == null) {\n failure(t('pls_select_siren'));\n\n return false;\n }\n\n if (alarmLevelOption?.value == null) {\n failure(t('pls_select_alarm_level'));\n\n return false;\n }\n\n if (!isValidDuration(alarmDelaySeconds)) {\n failure(t('pls_enter_a_valid_delay_duration'));\n\n return false;\n }\n } else if (controlType.value.id === CONTROL_TYPE_ID_SIREN) {\n if (outputNumber?.value == null) {\n failure(t('pls_enter_output_no'));\n\n return false;\n }\n\n if (sirenLevelOption?.value == null) {\n failure(t('pls_select_alarm_level'));\n\n return false;\n }\n } else if (controlType.value.id === CONTROL_TYPE_ID_THERMOSTAT) {\n if (isBridgeDeviceTypeIO && thermostatBridgeDevice?.value == null) {\n failure(t('pls_select_sensor_device'));\n\n return false;\n }\n\n if (!isBridgeDeviceTypeIO) {\n const foundControl = controlList.find(c => c.isVirtual === false &&\n c.control.id !== selected?.id &&\n c.control.temperature_settings?.bridge_device_id === bridgeDevice.value.id,\n );\n if (foundControl != null) {\n failure(t('thermostat_was_previously_added_to_device', {\n deviceName: bridgeDevice.value.name,\n controlName: foundControl.control.name,\n }));\n\n return false;\n }\n\n }\n\n if (!isBridgeDeviceTypeIO) {\n if (heatingModeOption?.value === 2 || heatingModeOption?.value === 3) {\n if (downOutputNumber?.value == null) {\n failure(t('pls_select_cold_exit_no'));\n\n return false;\n }\n }\n\n\n if (heatingModeOption?.value === 1 || heatingModeOption?.value === 3) {\n if (outputNumber?.value == null) {\n failure(t('pls_select_hot_exit_no'));\n\n return false;\n }\n }\n } else {\n if (outputNumber?.value == null) {\n failure(t('pls_select_exit_no'));\n\n return false;\n }\n }\n } else {\n if (isBridgeDeviceTypeIO) {\n switch (controlType.value.render_type) {\n case 'simple':\n if (outputNumber?.value == null) {\n failure(t('pls_select_exit_no'));\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure(t('pls_select_default_value'));\n\n return false;\n }\n break;\n case 'two_phase':\n case 'three_phase':\n if (outputNumber?.value == null) {\n failure(t('pls_select_up_exit_no'));\n\n return false;\n }\n\n if (downOutputNumber?.value == null) {\n failure(t('pls_select_down_exit_no'));\n\n return false;\n }\n\n if (outputNumber.value !== NO_OUTPUT_OPTION.value &&\n outputNumber.value === downOutputNumber.value) {\n failure(t('up_down_exit_no_cannot_be_same'));\n\n return false;\n }\n\n if (!isValidDuration(outputDurationLimitSeconds)) {\n failure(t('pls_enter_a_valid_exit_duration_limit'));\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure(t('pls_select_default_value'));\n\n return false;\n }\n\n break;\n case 'pulse':\n if (outputNumber?.value == null) {\n failure(t('pls_select_up_exit_no'));\n\n return false;\n }\n\n if (!isValidPulseDuration(pulseDuration)) {\n failure(t('pls_enter_a_valid_pulse_duration'));\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure(t('pls_select_default_value'));\n\n return false;\n }\n\n break;\n case 'complex':\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure(t('pls_select_default_value'));\n\n return false;\n }\n\n failure(t('undefined_control_type'));\n\n return false;\n default:\n break;\n }\n } else {\n if (bridgeDeviceType?.button_count > 0) {\n if (buttonNumber?.value == null) {\n failure(t('pls_select_button_number'));\n\n return false;\n }\n }\n\n switch (controlType.value.render_type) {\n case 'simple':\n if (outputNumber?.value == null) {\n failure(t('pls_select_exit_no'));\n\n return false;\n }\n\n break;\n case 'two_phase':\n case 'three_phase':\n if (doubledOutputNumber?.value == null) {\n failure(t('pls_select_exit_no'));\n\n return false;\n }\n\n if (!isValidDuration(outputDurationLimitSeconds)) {\n failure(t('pls_enter_a_valid_exit_duration_limit'));\n\n return false;\n }\n\n break;\n case 'pulse':\n // no validations\n break;\n case 'complex':\n if (controlType.value.id === CONTROL_TYPE_ID_DIMMER) {\n if (outputNumber?.value == null) {\n failure(t('pls_select_exit_no'));\n\n return false;\n }\n\n if (!isValidMaxDimmerValue(maxValue)) {\n failure(t('pls_enter_a_valid_maximum_value'));\n\n return false;\n }\n\n if (!isValidMinDimmerValue(minValue)) {\n failure(t('pls_enter_a_valid_minimum_value'));\n\n return false;\n }\n\n if (Number(maxValue) <= Number(minValue)) {\n failure(t('maximum_value_must_be_greater_then_minimum_vale'));\n\n return false;\n }\n } else {\n failure(t('undefined_control_type'));\n\n return false;\n }\n\n break;\n default:\n break;\n }\n }\n }\n\n return true;\n }, [\n t,\n failure,\n name,\n bridgeDevice,\n bridgeDeviceType,\n areaOption,\n isBridgeDeviceTypeIO,\n controlType,\n outputNumber?.value,\n rememberLastValue,\n defaultValueOption,\n buttonNumber?.value,\n outputDurationLimitSeconds,\n downOutputNumber?.value,\n doubledOutputNumber?.value,\n pulseDuration,\n maxValue,\n minValue,\n alarmLevelOption?.value,\n alarmControlOption?.value,\n alarmSirenOption?.value,\n alarmDelaySeconds,\n thermostatBridgeDevice?.value,\n heatingModeOption?.value,\n sirenLevelOption?.value,\n controlList,\n selected?.id,\n ]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n let ioOrGlassParameters: DeviceParameters;\n if (isBridgeDeviceTypeIO) {\n ioOrGlassParameters = {\n should_output_reverse: outputReverse,\n should_remember_last_value: rememberLastValue,\n default_value: defaultValueOption?.value,\n output_number: outputNumber?.value,\n };\n } else {\n ioOrGlassParameters = {\n output_number: outputNumber?.value,\n button_number: buttonNumber?.value,\n };\n }\n\n let controlParameters: ControlParameters = null;\n let temperatureSettings: TemperatureControlSettings = null;\n switch (controlType.value.render_type) {\n case 'simple':\n controlParameters = {\n should_output_reverse: outputReverse,\n };\n break;\n case 'two_phase':\n case 'three_phase':\n controlParameters = {\n should_output_reverse: outputReverse,\n down_output_number: isBridgeDeviceTypeIO ? downOutputNumber.value :\n doubledOutputNumber.value === NO_OUTPUT_OPTION.value ? NO_OUTPUT_OPTION.value :\n doubledOutputNumber.value + 1,\n output_time_limit: Number(outputDurationLimitSeconds),\n };\n if (!isBridgeDeviceTypeIO) {\n ioOrGlassParameters.output_number = doubledOutputNumber.value;\n }\n\n break;\n case 'pulse':\n controlParameters = {\n pulse_time: Number(pulseDuration) * 10,\n };\n break;\n case 'complex':\n switch (controlType.value.id) {\n case CONTROL_TYPE_ID_DIMMER:\n controlParameters = {\n min_limit: Number(minValue),\n max_limit: Number(maxValue),\n };\n break;\n case CONTROL_TYPE_ID_ALARM:\n controlParameters = {\n is_virtual_control: alarmControlOption.value.isVirtual,\n relational_control_id: alarmControlOption.value.id,\n siren_type: alarmSirenOption.value,\n alarm_level: alarmLevelOption.value,\n delay_time: Number(alarmDelaySeconds),\n };\n break;\n case CONTROL_TYPE_ID_SIREN:\n controlParameters = {\n alarm_level: sirenLevelOption.value,\n };\n break;\n case CONTROL_TYPE_ID_THERMOSTAT:\n temperatureSettings = {\n bridge_device_id: isBridgeDeviceTypeIO ? thermostatBridgeDevice.value.id : bridgeDevice.value.id,\n is_mode_heating: heatingModeOption.value === 1 || heatingModeOption.value === 3,\n has_heating: heatingModeOption.value === 1 || heatingModeOption.value === 3,\n has_cooling: heatingModeOption.value === 2 || heatingModeOption.value === 3,\n };\n\n if (temperatureSettings.has_cooling && !(isBridgeDeviceTypeIO && isThermostatBridgeDeviceIO)) {\n controlParameters = {\n ...controlParameters,\n down_output_number: downOutputNumber.value,\n };\n if (!temperatureSettings.has_heating) {\n ioOrGlassParameters = {\n ...ioOrGlassParameters,\n output_number: downOutputNumber.value,\n };\n }\n }\n\n break;\n default:\n failure(t('undefined_control_type'));\n\n return;\n }\n\n break;\n default:\n break;\n }\n\n const controlModel: ControlModel = {\n ...(selected ? selected : {}),\n id: selected?.id || null,\n name,\n area_id: areaOption.value.id,\n bridge_device_id: bridgeDevice.value.id,\n type_id: controlType.value.id,\n parameters: {...ioOrGlassParameters, ...controlParameters},\n temperature_settings: temperatureSettings,\n };\n\n return rpc.updateControl(controlModel)\n .then((id: string) => {\n if (navigateToSTPEditor) {\n goToStpEditorWithState({\n controlId: id,\n bridgeDeviceId: bridgeDevice.value.id,\n });\n } else if (addInput) {\n goToInputEditScreenWithState({\n controlId: id,\n bridgeDeviceId: bridgeDevice.value.id,\n inputTypeId: controlType.value.id === CONTROL_TYPE_ID_ALARM ? INPUT_TYPE_ID_SENSOR : INPUT_TYPE_ID_MOMENTARY,\n });\n } else {\n success(t(selected?.id == null ? 'control_successfully_saved' : 'control_successfully_edited'));\n onBackPressed();\n }\n })\n .catch(failure);\n }, [\n t,\n isFieldsValid,\n rpc,\n success,\n failure,\n onBackPressed,\n goToInputEditScreenWithState,\n addInput,\n selected,\n name,\n bridgeDevice,\n areaOption,\n isBridgeDeviceTypeIO,\n controlType,\n rememberLastValue,\n defaultValueOption,\n outputReverse,\n outputNumber?.value,\n buttonNumber?.value,\n downOutputNumber?.value,\n outputDurationLimitSeconds,\n doubledOutputNumber?.value,\n pulseDuration,\n maxValue,\n minValue,\n sirenLevelOption?.value,\n alarmLevelOption?.value,\n alarmSirenOption?.value,\n alarmDelaySeconds,\n alarmControlOption?.value,\n thermostatBridgeDevice?.value?.id,\n heatingModeOption?.value,\n navigateToSTPEditor,\n goToStpEditorWithState,\n ]);\n\n const setOutputReverseCheckbox = useCallback(() => {\n setOutputReverse(!outputReverse);\n }, [outputReverse]);\n\n const setRememberLastValueCheckbox = useCallback(() => {\n setRememberLastValue(rememberLastValue => !rememberLastValue);\n }, []);\n\n const setAddInputCheckbox = useCallback(() => {\n setAddInput(addInput => !addInput);\n }, []);\n\n const setNavigateStpEditorCheckbox = useCallback(() => {\n setNavigateToSTPEditor(!navigateToSTPEditor);\n }, [navigateToSTPEditor]);\n\n\n const buttons = useMemo(() => [\n {\n component: params?.id == null ? null :\n t('this_will_be_deleted_with_this_message__continue', {\n name: selected?.name,\n message,\n })}\n onPress={onDeletePressed}/>,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed, onDeletePressed, selected, params?.id]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n setActiveNumpadExtendedInput(null);\n }, [setActiveInput, setActiveNumpadExtendedInput, setActiveNumpadInput]);\n\n useEffect(() => {\n setControlType(controlTypeOptionList.find(option => option.value === controlType?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlTypeOptionList]);\n\n useEffect(() => {\n setDefaultValueOption(defaultValueOptionList.find(option => option.value === defaultValueOption?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultValueOptionList]);\n\n useEffect(() => {\n setOutputNumber(outputNumberOptionList.find(option => option.value === outputNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [outputNumberOptionList]);\n\n useEffect(() => {\n setDownOutputNumber(outputNumberOptionList.find(option => option.value === downOutputNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [outputNumberOptionList]);\n\n useEffect(() => {\n setDoubledOutputNumber(doubledOutputNumberOptionList.find(option => option.value === doubledOutputNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [doubledOutputNumberOptionList]);\n\n useEffect(() => {\n setAlarmControlOption(alarmControlOptionList.find(option => option.value === alarmControlOption?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [alarmControlOptionList]);\n\n useEffect(() => {\n if (thermostatBridgeDeviceType?.id == null) {\n return;\n }\n\n if (thermostatBridgeDeviceType?.id === BRIDGE_DEVICE_TYPE_ID_ST) {\n setHeatingModeOption(HEATING_MODE_LIST[0]);\n }\n }, [HEATING_MODE_LIST, thermostatBridgeDeviceType?.id]);\n\n useEffect(() => {\n if (!isBridgeDeviceTypeIO) {\n setThermostatBridgeDevice(thermostatBridgeDeviceOptionList.find(b => b.value.id === bridgeDevice.value.id));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [bridgeDevice?.value?.id]);\n\n return (\n \n \n
\n
\n \n \n {\n renderIf(bridgeDevice)(() =>\n <>\n \n {\n renderIf(isBridgeDeviceTypeIO && controlType?.value?.id === CONTROL_TYPE_ID_THERMOSTAT)(() =>\n <>\n \n ,\n )\n }\n {\n renderIf(thermostatBridgeDeviceType?.id !== BRIDGE_DEVICE_TYPE_ID_ST && thermostatBridgeDevice?.value && controlType?.value?.id === CONTROL_TYPE_ID_THERMOSTAT)(() =>\n ,\n )\n }\n {\n renderIf(controlType?.value.id === CONTROL_TYPE_ID_ALARM)(() =>\n <>\n \n \n \n \n , () =>\n renderIf(controlType?.value?.render_type === 'three_phase' || controlType?.value?.render_type === 'two_phase')(() =>\n [\n renderIf(isBridgeDeviceTypeIO)(() =>\n \n \n \n , () =>\n ,\n ),\n ,\n ], () =>\n renderIf(!(isBridgeDeviceTypeIO && isThermostatBridgeDeviceIO) && controlType?.value?.id === CONTROL_TYPE_ID_THERMOSTAT)(() =>\n renderIf(thermostatBridgeDevice?.value)(() =>\n <>\n {\n renderIf(heatingModeOption.value === 1 || heatingModeOption.value === 3)(() =>\n ,\n )\n }\n {\n renderIf(heatingModeOption.value === 2 || heatingModeOption.value === 3)(() =>\n ,\n )\n }\n ,\n ), () =>\n renderIf(controlType?.value)(() =>\n ,\n ),\n ),\n ),\n )\n }\n {\n renderIf(isBridgeDeviceTypeIO && controlType?.value?.render_type === 'pulse')(() =>\n ,\n )\n }\n {\n renderIf(controlType?.value.id === CONTROL_TYPE_ID_DIMMER)(() =>\n <>\n \n \n ,\n )\n }\n {\n renderIf(controlType?.value.id === CONTROL_TYPE_ID_SIREN)(() =>\n ,\n )\n }\n ,\n )\n }\n
\n
\n \n {\n renderIf(controlType != null && isBridgeDeviceTypeIO)(() =>\n ,\n )\n }\n {\n renderIf(controlType?.value != null &&\n controlType.value.id !== CONTROL_TYPE_ID_ALARM &&\n controlType.value.id !== CONTROL_TYPE_ID_SIREN)(() =>\n renderIf(isBridgeDeviceTypeIO && controlType.value.id !== CONTROL_TYPE_ID_THERMOSTAT)(() =>\n <>\n \n {\n renderIf(!rememberLastValue)(() =>\n ,\n )\n }\n , () =>\n <>\n {\n renderIf(bridgeDeviceType?.button_count > 0)(() =>\n ,\n )\n }\n ,\n ))\n }\n {\n renderIf(!isBridgeDeviceTypeIO && controlType?.value?.render_type === 'simple')(() =>\n ,\n )\n }\n {\n renderIf(selected?.id == null &&\n controlType?.value != null &&\n controlType.value.id !== CONTROL_TYPE_ID_THERMOSTAT &&\n isBridgeDeviceTypeIO)(() =>\n ,\n )\n }\n {\n renderIf(selected?.id == null &&\n (bridgeDeviceType?.page_count > 0\n && bridgeDeviceType?.id !== '6'\n /*||\n (isBridgeDeviceTypeIO && controlType?.value?.id === CONTROL_TYPE_ID_THERMOSTAT && !isThermostatBridgeDeviceIO)*/))(() =>\n ,\n )\n }\n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n {\n renderNumpadExtendedKeyboard()\n }\n
\n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {ControlModel} from '../../../../types/control';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {NO_OUTPUT_OPTION} from '../ControlEditScreen';\nimport {useSortBySelector} from '../../../../hooks/sort-by-selector';\nimport {useHistory} from 'react-router-dom';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: ControlModel) => item.id;\n\nexport const ControlListScreen = memo(function ControlListScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n\n const bridgeDeviceSet = useSetSelector(state => state.control.bridgeDeviceList);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const controlList = useSortBySelector(state => state.control.controlList, control => control.bridge_device_id);\n\n const [selectedControl, setSelectedControl] = useState(null);\n\n const onCopyClick = useCallback(() => {\n history.push({pathname: '/settings/control/edit', state: {...selectedControl, id: null}});\n }, [history, selectedControl]);\n\n const buttons = useMemo(() => [\n {\n text: t('copy'),\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedControl),\n },\n {\n text: t('edit'),\n url: `/settings/control/edit/${selectedControl ? selectedControl.id : ''}`,\n className: 'orange',\n hidden: !(selectedControl),\n },\n {\n text: t('create_control'),\n url: '/settings/control/edit',\n className: 'green',\n },\n ], [t, selectedControl, onCopyClick]);\n\n const displayNameExtractor = useCallback((item: ControlModel, column: ColumnModel) => {\n if (column.key === 'bridge_device_id') {\n return (bridgeDeviceSet[item.bridge_device_id] && bridgeDeviceSet[item.bridge_device_id].name) || '-';\n }\n\n if (column.key === 'type_id') {\n return controlTypeSet[item.type_id].name;\n }\n\n if (column.key === 'output_number') {\n let outputString = '';\n\n if (item.parameters?.output_number != null && item.parameters?.output_number !== NO_OUTPUT_OPTION.value) {\n outputString += item.parameters?.output_number;\n }\n\n // @ts-ignore\n const downOutput = item.parameters?.down_output_number;\n if (downOutput != null) {\n outputString += outputString === '' ? downOutput.toString() : ' - ' + downOutput.toString();\n }\n\n return outputString || '-';\n }\n\n return item[column.key] || '-';\n }, [bridgeDeviceSet, controlTypeSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('control_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('device'),\n key: 'bridge_device_id',\n },\n {\n length: 3,\n name: t('control_type_name'),\n key: 'type_id',\n },\n {\n length: 1,\n name: t('output'),\n key: 'output_number',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {ControlListScreen} from './ControlListScreen';\nimport {ControlEditScreen} from './ControlEditScreen';\n\nexport const ControlSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/control/edit',\n component: ControlEditScreen,\n },\n {\n routerLink: '/settings/control/edit/:id',\n component: ControlEditScreen,\n },\n {\n routerLink: '/settings/control',\n component: ControlListScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {IntercomModel} from '../../../../types/intercom';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\n\nconst keyExtractor = (item: IntercomModel) => item.id;\n\nexport const IntercomListScreen = memo(function IntercomListScreen() {\n const {t} = useLocalization();\n const doorSet = useSetSelector(state => state.control.doorList);\n const intercomList = useSelector(state => state.control.intercomList);\n\n const [selectedIntercom, setSelectedIntercom] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/intercom/edit/${selectedIntercom ? selectedIntercom.id : ''}`,\n className: 'orange',\n hidden: !(selectedIntercom),\n },\n {\n text: t('create_intercom'),\n url: '/settings/intercom/edit',\n className: 'green',\n },\n ], [t, selectedIntercom]);\n\n\n const displayNameExtractor = useCallback((item: IntercomModel, column: ColumnModel) => {\n if (column.key === 'door_id_list') {\n return item.door_id_list.map(id => doorSet[id].name).join(', ');\n }\n\n return item[column.key] || '-';\n }, [doorSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('INTERCOM_NAME'),\n key: 'name',\n },\n {\n length: 1,\n name: 'SIP',\n key: 'sip_id',\n },\n {\n length: 3,\n name: t('DOORS'),\n key: 'door_id_list',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSelector} from 'react-redux';\nimport {IntercomModel} from '../../../../types/intercom';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {SelectItem} from '../../../../components/Select';\nimport {DoorModel} from '../../../../types/door';\nimport {isValidSIPNo, isValidString} from '../../../../utils/validation';\nimport {CameraModel} from '../../../../types/control';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/intercom';\n\nexport const IntercomEditScreen = memo(function IntercomEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const intercomList = useSelector(state => state.control.intercomList);\n const cameraList = useSelector(state => state.control.cameraList);\n const doorOptionList = useMapSelector(\n state => state.control.doorList,\n door => ({value: door, label: door.name}),\n ) || [];\n\n const selected = useMemo(() => intercomList.find(i => i.id === params?.id), [params?.id]);\n\n const [name, setName] = useState('');\n const [sipID, setSipID] = useState('');\n const [selectedDoorOptionList, setSelectedDoorOptionList] = useState[]>([]);\n const cameraOptionList: SelectItem[] = useMemo(() => cameraList.map(camera => ({\n label: camera.name,\n value: camera,\n })), [cameraList]);\n const [cameraOption, setCameraOption] = useState>(\n selected == null ? null : (\n cameraOptionList.find(option => option.value.id === selected?.camera_id)\n ) || null,\n );\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (!isValidString(name)) {\n failure(t('pls_enter_a_valid_intercom_name'));\n\n return false;\n }\n\n if (cameraOption?.value == null) {\n failure(t('pls_select_a_valid_camera'));\n\n return false;\n }\n\n if (!isValidSIPNo(sipID)) {\n failure(t('pls_enter_a_valid_sip_no'));\n\n return false;\n }\n\n if (selectedDoorOptionList.length === 0) {\n failure(t('pls_select_door'));\n\n return false;\n }\n\n return true;\n }, [t, name, cameraOption?.value, sipID, selectedDoorOptionList.length, failure]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const intercomModel: IntercomModel = {\n id: selected?.id || null,\n name,\n camera_id: cameraOption.value.id,\n sip_id: sipID,\n door_id_list: selectedDoorOptionList.map(doorOption => doorOption.value.id),\n };\n\n return rpc.updateIntercom(intercomModel)\n .then(() => {\n success(t(intercomModel.id ? 'intercom_successfully_edited' : 'intercom_successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n selected?.id,\n name,\n sipID,\n selectedDoorOptionList,\n rpc,\n failure,\n success,\n onBackPressed,\n cameraOption?.value,\n ]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_intercom'), () => {\n return rpc.deleteIntercom(selected.id)\n .then(() => {\n success(t('intercom_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, failure, onBackPressed, question, rpc, selected?.id, success]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n }, [setActiveInput, setActiveNumpadInput]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, selected, onSavePressed, onDeletePressed],\n );\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const intercom = intercomList.find(intercomModel => intercomModel.id === params['id']);\n if (intercom == null) {\n return;\n }\n\n setName(intercom.name);\n setSipID(intercom.sip_id);\n setSelectedDoorOptionList(doorOptionList.filter(doorOption =>\n intercom.door_id_list.indexOf(doorOption.value.id) !== -1));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n \n \n
\n
\n \n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {IntercomListScreen} from './IntercomListScreen';\nimport {IntercomEditScreen} from './IntercomEditScreen';\n\nexport const IntercomSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/intercom',\n component: IntercomListScreen,\n },\n {\n routerLink: '/settings/intercom/edit/:id',\n component: IntercomEditScreen,\n },\n {\n routerLink: '/settings/intercom/edit',\n component: IntercomEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {DoorModel} from '../../../../types/door';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: DoorModel) => item.id;\n\nexport const DoorListScreen = memo(function DoorListScreen() {\n const [rpc] = useRPC();\n const {t} = useLocalization();\n const doorList = useSelector(state => state.control.doorList);\n const doorBrandSet = useSetSelector(state => state.control.doorBrandList);\n\n const [selectedDoor, setSelectedDoor] = useState(null);\n\n const onTestClick = useCallback(() => {\n rpc.openDoor(selectedDoor.id);\n }, [selectedDoor, rpc]);\n\n const buttons = useMemo(() => [\n {\n text: t('test'),\n onClick: onTestClick,\n className: 'blue',\n hidden: !(selectedDoor),\n },\n {\n text: t('edit'),\n url: `/settings/door/edit/${selectedDoor ? selectedDoor.id : ''}`,\n className: 'orange',\n hidden: !(selectedDoor),\n },\n {\n text: t('create_door'),\n url: '/settings/door/edit',\n className: 'green',\n },\n ], [t, selectedDoor, onTestClick]);\n\n\n const displayNameExtractor = useCallback((item: DoorModel, column: ColumnModel) => {\n if (column.key === 'door_brand_id') {\n return doorBrandSet[item.door_brand_id].name;\n }\n\n return item[column.key] || '-';\n }, [doorBrandSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('door_name'),\n key: 'name',\n },\n {\n length: 1,\n name: t('brand'),\n key: 'door_brand_id',\n },\n {\n length: 2,\n name: t('url'),\n key: 'door_path',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSelector} from 'react-redux';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {DoorModel} from '../../../../types/door';\nimport {SelectItem} from '../../../../components/Select';\nimport {DoorBrandModel} from '../../../../types/door-brand';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {isValidDoorNumber} from '../../../../utils/validation';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/door';\n\nexport const DoorEditScreen = memo(function DoorEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const doorList = useSelector(state => state.control.doorList);\n const doorBranchOptionList = useMapSelector(\n state => state.control.doorBrandList,\n doorBrand => ({value: doorBrand, label: doorBrand.name}),\n ) || [];\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [doorBrandOption, setDoorBrandOption] = useState>(null);\n const [doorPath, setDoorPath] = useState('');\n const [doorNumber, setDoorNumber] = useState('');\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_door_name'));\n\n return false;\n }\n\n if (doorBrandOption == null) {\n failure(t('pls_select_a_valid_door_brand'));\n\n return false;\n }\n\n if (doorPath == null || doorPath.length === 0) {\n failure(t('pls_enter_a_valid_url'));\n\n return false;\n }\n\n if (!isValidDoorNumber(doorNumber)) {\n failure(t('pls_enter_a_valid_door_number'));\n\n return false;\n }\n\n if (username == null || username.length === 0) {\n failure(t('pls_enter_a_valid_username'));\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure(t('pls_enter_a_valid_password'));\n\n return false;\n }\n\n return true;\n }, [t, doorBrandOption, doorPath, doorNumber, failure, name, password, username]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n let doorPathWithScheme = doorPath;\n\n if (doorPathWithScheme.indexOf('http://') !== 0) {\n doorPathWithScheme = 'http://' + doorPath;\n }\n\n const doorModel: DoorModel = {\n id: selected?.id || null,\n name,\n door_brand_id: doorBrandOption.value.id,\n door_path: doorPathWithScheme,\n door_number: Number(doorNumber),\n username,\n password,\n };\n\n return rpc.updateDoor(doorModel)\n .then(() => {\n success(t(doorModel.id ? 'door_successfully_edited' : 'door_successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n doorBrandOption?.value?.id,\n doorPath,\n doorNumber,\n failure,\n isFieldsValid,\n name,\n onBackPressed,\n password,\n rpc,\n selected?.id,\n success,\n username,\n ]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteDoor(selected.id)\n .then(() => {\n success(t('door_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, onBackPressed, rpc, selected, success]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n }, [setActiveInput, setActiveNumpadInput]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n t('this_will_be_deleted_with_this_message__continue',{name:selected?.name, message})}\n onPress={onDeletePressed}/>,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n }], [t, selected, onSavePressed, onDeletePressed],\n );\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const door = doorList.find(doorItem => doorItem.id === params['id']);\n if (door == null) {\n return;\n }\n\n setSelected(door);\n setName(door.name);\n setDoorBrandOption(\n doorBranchOptionList.find(doorBranchOption => doorBranchOption.value.id === door.door_brand_id) ||\n doorBranchOptionList[0] ||\n null);\n setDoorPath(door.door_path);\n setDoorNumber(door.door_number.toString());\n setUsername(door.username);\n setPassword(door.password);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setDoorBrandOption(doorBranchOptionList[0] || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {DoorListScreen} from './DoorListScreen';\nimport {DoorEditScreen} from './DoorEditScreen';\n\nexport const DoorSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/door',\n component: DoorListScreen,\n },\n {\n routerLink: '/settings/door/edit/:id',\n component: DoorEditScreen,\n },\n {\n routerLink: '/settings/door/edit',\n component: DoorEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {useParams} from 'react-router-dom';\nimport {AreaModel} from '../../../../store/control/state';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: AreaModel) => item.id;\n\nexport const RoomListScreen = memo(function RoomListScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string; }>();\n const areaSet = useSetSelector(state => state.control.areaList);\n const roomList = useFilterSelector(state => state.control.areaList, room => room.type === 'room' && room.parent_area_id === params.id, [params.id]);\n\n const [selected, setSelected] = useState(null);\n const selectedFloor = useMemo(() => {\n if (params.id == null) {\n return null;\n }\n\n const floor = areaSet[params['id']];\n if (floor == null) {\n return null;\n }\n\n return floor;\n }, [areaSet, params]);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/floor/${selectedFloor.id}/room/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: t('create_room'),\n url: `/settings/floor/${selectedFloor.id}/room/edit`,\n className: 'green',\n },\n ], [t, selected, selectedFloor]);\n\n const displayNameExtractor = useCallback((item: AreaModel, column: ColumnModel) => {\n if (column.key === 'floorName') {\n return selectedFloor != null ? selectedFloor.name : '';\n }\n\n return item[column.key];\n }, [selectedFloor]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('room_name'),\n key: 'name',\n },\n {\n length: 3,\n name: t('floor_name'),\n key: 'floorName',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {AreaModel} from '../../../../store/control/state';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: AreaModel) => item.id;\n\nexport const AREA_TYPES = {\n 'floor': 'floor',\n 'place': 'place',\n};\n\nexport const AreaListScreen = memo(function AreaListScreen() {\n const {t} = useLocalization();\n const [selected, setSelected] = useState(null);\n\n const areaList = useFilterSelector(\n state => state.control.areaList,\n area => area.type === 'floor' || area.type === 'place',\n [],\n );\n\n const buttons = useMemo(() => [\n {\n text: t('room_list'),\n className: 'blue',\n url: selected != null ? `/settings/floor/${selected.id}/room` : '',\n hidden: !(selected && selected.type === 'floor'),\n },\n {\n text: t('edit'),\n url: `/settings/area/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: t('create_area'),\n url: '/settings/area/edit',\n className: 'green',\n },\n ], [t, selected]);\n\n const displayNameExtractor = useCallback((item: AreaModel, column: ColumnModel) => {\n if (column.key === 'type') {\n return t(AREA_TYPES[item.type]) || '-';\n }\n\n return item[column.key];\n }, [t]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('area_name'),\n key: 'name',\n },\n {\n length: 3,\n name: t('type'),\n key: 'type',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {AreaModel} from '../../../../store/control/state';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport const RoomEditScreen = memo(function RoomEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string; floor_id: string; }>();\n const {success, failure} = useMessage();\n const question = useQuestion();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const floorList = useFilterSelector(state => state.control.areaList, area => area.type === 'floor', []);\n const roomList = useFilterSelector(state => state.control.areaList, area => area.type === 'room', []);\n\n const [selected, setSelected] = useState(null);\n const [backURL, setBackURL] = useState('/settings/project-information');\n const [name, setName] = useState('');\n const [floor, setFloor] = useState>(null);\n\n const floorOptionList: SelectItem[] =\n useMemo(() => floorList.map(floor => ({value: floor, label: floor.name})), [floorList]);\n\n const onBackPressed = useCallback(() => {\n history.push(backURL);\n }, [history, backURL]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_name'));\n\n return false;\n }\n\n if (floor == null || floor.value == null) {\n failure(t('pls_select_floor'));\n\n return false;\n }\n\n return true;\n }, [t, failure, floor, name]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const areaModel: AreaModel = {\n id: selected != null ? selected.id : null,\n name,\n type: 'room',\n parent_area_id: floor.value.id,\n };\n\n return rpc.updateArea(areaModel)\n .then(() => {\n success(t(areaModel.id == null ? 'room_successfully_created' : 'room_successfully_edited'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n selected,\n isFieldsValid,\n name,\n floor,\n success,\n failure,\n onBackPressed,\n rpc,\n ]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_room'), () => {\n return rpc.deleteArea(selected.id)\n .then(() => {\n success(t('room_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, failure, onBackPressed, question, rpc, selected, success]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: backURL,\n },\n ], [t, onDeletePressed, selected, onSavePressed, backURL],\n );\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n useEffect(() => {\n if (params.floor_id != null) {\n const floor = floorList.find(floor => floor.id === params.floor_id);\n if (floor) {\n setBackURL(`/settings/floor/${floor.id}/room`);\n }\n setFloor(floorOptionList.find(floorOption => floorOption.value.id === floor.id));\n }\n\n if (params.id == null) {\n return;\n }\n\n const room = roomList.find(room => room.id === params['id']);\n if (room == null) {\n return;\n }\n\n setSelected(room);\n setName(room.name);\n }, [floorList, floorOptionList, params, roomList]);\n\n return (\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {AreaModel} from '../../../../store/control/state';\nimport {useSelector} from 'react-redux';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {AREA_TYPES} from '../AreaListScreen';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/project-information';\n\nexport const AreaEditScreen = memo(function AreaEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const areaList = useSelector(state => state.control.areaList);\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [type, setType] = useState>(null);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (type == null || type.value == null) {\n failure(t('pls_select_type'));\n\n return false;\n }\n\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_name'));\n\n return false;\n }\n\n return true;\n }, [t, failure, name, type]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const areaModel: AreaModel = {\n id: selected != null ? selected.id : null,\n name,\n // @ts-ignore\n type: type.value,\n parent_area_id: null,\n };\n\n return rpc.updateArea(areaModel)\n .then(() => {\n success(t(areaModel.id == null ? 'area_successfully_created' : 'area_successfully_edited', {label: type.label}));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n failure,\n name,\n onBackPressed,\n rpc,\n selected,\n success,\n type,\n ]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteArea(selected.id)\n .then(() => {\n success(t('area_successfully_deleted', {name: selected.name}));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, onBackPressed, rpc, selected, success]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n t('this_will_be_deleted_with_this_message__continue', {name:selected?.name, message})}\n onPress={onDeletePressed}/>,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n }], [t, selected, onSavePressed, onDeletePressed],\n );\n\n const TYPE_OPTION_LIST = useMemo[]>(() =>\n Object.entries(AREA_TYPES).map(([type, name]) => ({value: type, label: t(name)})),[t]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const area = areaList.find(floor => floor.id === params['id']);\n if (area == null) {\n return;\n }\n\n setSelected(area);\n setName(area.name);\n setType(TYPE_OPTION_LIST.find(option => option.value === area.type));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setType(TYPE_OPTION_LIST[0]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n {\n renderIf(selected)(() =>\n , () =>\n ,\n )\n }\n \n
\n
\n\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {RoomListScreen} from './RoomListScreen';\nimport {AreaListScreen} from './AreaListScreen';\nimport {RoomEditScreen} from './RoomEditScreen';\nimport {AreaEditScreen} from './AreaEditScreen';\n\nexport const ProjectInformationSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/project-information',\n component: AreaListScreen,\n },\n {\n routerLink: '/settings/area/edit',\n component: AreaEditScreen,\n },\n {\n routerLink: '/settings/area/edit/:id',\n component: AreaEditScreen,\n },\n {\n routerLink: '/settings/floor/:id/room',\n component: RoomListScreen,\n },\n {\n routerLink: '/settings/floor/:floor_id/room/edit',\n component: RoomEditScreen,\n },\n {\n routerLink: '/settings/floor/:floor_id/room/edit/:id',\n component: RoomEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {MediaInputModel} from '../../../../store/control/state';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useSelector} from 'react-redux';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\ntype MediaInputExtendedModel = MediaInputModel & { bridge_device_name: string; };\n\nconst keyExtractor = (item: MediaInputExtendedModel) => item.id;\n\nexport const MediaInputListScreen = memo(function MediaInputListScreen() {\n const {t} = useLocalization();\n const mediaInputList = useSelector(state => state.control.mediaInputList);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n\n const mediaInputNewList: MediaInputExtendedModel[] =\n useMemo(() => mediaInputList.map(mediaInput => ({\n ...mediaInput,\n bridge_device_name: bridgeDeviceList.find(bridgeDevice =>\n bridgeDevice.id === mediaInput.bridge_device_id)?.name || '',\n }),\n ), [mediaInputList, bridgeDeviceList]);\n\n const [selectedMediaInput, setSelectedMediaInput] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/media/edit/${selectedMediaInput ? selectedMediaInput.id : ''}`,\n className: 'orange',\n hidden: !(selectedMediaInput),\n },\n {\n text: t('create_remote'),\n url: '/settings/media/edit',\n className: 'green',\n },\n ], [t, selectedMediaInput]);\n\n const displayNameExtractor = useCallback((item: MediaInputExtendedModel, column: ColumnModel) => {\n if (column.key === 'bridge_device_name') {\n return item.bridge_device_name;\n }\n\n return item[column.key];\n }, []);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('remote_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('slot'),\n key: 'slot',\n },\n {\n length: 3,\n name: t('device_name'),\n key: 'bridge_device_name',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useMessage} from '../../../../hooks/message';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {MediaInputModel} from '../../../../store/control/state';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useSelector} from 'react-redux';\nimport {SelectItem} from '../../../../components/Select';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {ControlModel, ControlRenderType} from '../../../../types/control';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useMap} from '../../../../hooks/map';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/media';\n\nexport const MediaInputEditScreen = memo(function MediaInputEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const question = useQuestion();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const mediaInputList = useSelector(state => state.control.mediaInputList);\n const bridgeDeviceSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const bridgeDeviceOptionList: SelectItem[] = useMap(\n useFilterSelector(\n state => state.control.bridgeDeviceList,\n bridgeDevice => bridgeDeviceSet[bridgeDevice.type_id]?.is_media_device,\n [bridgeDeviceSet],\n ),\n bridgeDevice => ({\n value: bridgeDevice,\n label: bridgeDevice.name,\n }));\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [slot, setSlot] = useState('');\n const [bridgeDevice, setBridgeDevice] = useState>(null);\n const [control, setControl] = useState>(null);\n const [valueOptionList, setValueOptionList] = useState[]>([]);\n const [value, setValue] = useState>(null);\n\n const bridgeDeviceIdList = useMap(useFilterSelector(\n state => state.control.bridgeDeviceList,\n bridgeDeviceItem => bridgeDeviceItem.gateway_id === bridgeDevice?.value.gateway_id,\n [bridgeDevice],\n ), bridgeDeviceItem => bridgeDeviceItem.id);\n const controlOptionList = useMap(useFilterSelector(\n state => state.control.controlList,\n control => bridgeDeviceIdList.indexOf(control.bridge_device_id) !== -1,\n [bridgeDeviceIdList],\n ), control => ({\n value: control,\n label: control.name,\n }));\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_remote'), () => {\n return rpc.deleteMediaInput(selected.id)\n .then(() => {\n success(t('remote_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, success, failure, onBackPressed, question, rpc, selected]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_remote_name'));\n\n return false;\n }\n\n if (bridgeDevice == null) {\n failure(t('pls_select_a_valid_device'));\n\n return false;\n }\n\n if (control == null) {\n failure(t('pls_select_a_valid_control'));\n\n return false;\n }\n\n if (value == null) {\n failure(t('pls_select_a_valid_value'));\n\n return false;\n }\n\n return true;\n }, [\n t,\n failure,\n name,\n bridgeDevice,\n control,\n value,\n ]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const mediaInput: MediaInputModel = {\n id: selected != null ? selected.id : null,\n name,\n slot: 0,\n bridge_device_id: bridgeDevice.value.id,\n control_id: control.value.id,\n value: value.value,\n };\n\n return rpc.updateMediaInput(mediaInput)\n .then(() => {\n success(t(selected != null ? 'remote_successfully_edited' : 'remote_successfully_saved'));\n onBackPressed();\n })\n .catch(e => {\n if (e !== 'cant_read') {\n failure(e);\n }\n });\n }, [\n t,\n isFieldsValid,\n bridgeDevice,\n control,\n success,\n onBackPressed,\n rpc,\n selected,\n failure,\n name,\n value,\n ]);\n\n const onRegisterSignalPressed = useCallback(() => {\n rpc.registerMediaInput(selected.id)\n .catch(e => {\n if (e !== 'cant_read') {\n failure(e);\n }\n });\n }, [rpc, selected, failure]);\n\n const buttons = useMemo(() => [\n {\n text: t('register_signal'),\n className: 'blue',\n onClick: onRegisterSignalPressed,\n hidden: !(selected),\n doNotBlockUI: true,\n },\n {\n text: t('delete_remote'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n doNotBlockUI: true,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onRegisterSignalPressed, onCreatePressed, onDeletePressed, selected]);\n\n const CONTROL_TYPE_VALUE_MAP: Record[]> = useMemo(() => ({\n complex: [\n {\n value: 0,\n label: t('close_stop'),\n },\n {\n value: 1,\n label: t('open_up'),\n },\n {\n value: 2,\n label: t('down'),\n },\n {\n value: 3,\n label: t('open_close'),\n },\n ],\n simple: [\n {\n value: 0,\n label: t('close'),\n },\n {\n value: 1,\n label: t('open'),\n },\n {\n value: 3,\n label: t('open_close'),\n },\n ],\n three_phase: [\n {\n value: 0,\n label: t('stop'),\n },\n {\n value: 1,\n label: t('up'),\n },\n {\n value: 2,\n label: t('down'),\n },\n ],\n two_phase: [\n {\n value: 1,\n label: t('up'),\n },\n {\n value: 2,\n label: t('down'),\n },\n ],\n pulse: [\n {\n value: 0,\n label: t('passive'),\n },\n {\n value: 1,\n label: t('active'),\n }],\n }), [t]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const mediaInput = mediaInputList.find(mediaInputItem => mediaInputItem.id === params.id);\n if (mediaInput == null) {\n return;\n }\n setSelected(mediaInput);\n\n setName(mediaInput.name);\n setSlot(mediaInput.slot.toString());\n const bridgeDevice = bridgeDeviceOptionList.find(bridgeDeviceOption =>\n bridgeDeviceOption.value.id === mediaInput.bridge_device_id);\n setBridgeDevice(bridgeDevice || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setBridgeDevice(bridgeDeviceOptionList[0] || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (control == null) {\n if (selected != null) {\n const controlBefore = controlOptionList.find(control => control.value.id === selected.control_id) ||\n controlOptionList[0];\n setControl(controlBefore || null);\n } else {\n setControl(controlOptionList[0] || null);\n }\n } else {\n const exists = controlOptionList.some(controlItem => controlItem.value.id === control.value.id);\n if (!exists) {\n setControl(controlOptionList[0] || null);\n }\n }\n }, [selected, control, controlOptionList]);\n\n useEffect(() => {\n if (control?.value == null) {\n return;\n }\n\n const controlRenderType = controlTypeSet[control.value.type_id].render_type;\n const list = CONTROL_TYPE_VALUE_MAP[controlRenderType] || [];\n setValueOptionList(list);\n if (selected == null) {\n setValue(list[0] || null);\n } else {\n setValue(list.find(item => item.value === selected.value) || list[0] || null);\n }\n }, [selected, control, controlTypeSet, CONTROL_TYPE_VALUE_MAP]);\n\n return (\n \n \n
\n
\n \n {\n renderIf(selected)(() =>\n <>\n \n ,\n )\n }\n \n \n \n
\n
\n\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {MediaInputListScreen} from './MediaInputListScreen';\nimport {MediaInputEditScreen} from './MediaInputEditScreen';\n\nexport const MediaSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/media',\n component: MediaInputListScreen,\n },\n {\n routerLink: '/settings/media/edit/:id',\n component: MediaInputEditScreen,\n },\n {\n routerLink: '/settings/media/edit',\n component: MediaInputEditScreen,\n },\n];\n","import React, {memo, useCallback, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {ConfigModel} from '../../../../store/control/state';\nimport {useHistory} from 'react-router-dom';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useLocalization} from '../../../../hooks/localization';\n\nconst BACK_URL = '/settings';\n\nexport const AlarmEditScreen = memo(function AlarmEditScreen() {\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n const question = useQuestion();\n const {t} = useLocalization();\n\n const config = useSelector(state => state.control.config);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n\n const [homeTimer, setHomeTimer] = useState(config.alarm_settings.home_timer_seconds.toString());\n const [outsideTimer, setOutsideTimer] = useState(config.alarm_settings.outside_timer_seconds.toString());\n const [firstLevelAlarmCountdownDuration, setFirstLevelAlarmCountdownDuration] =\n useState(config.alarm.first_level_alarm_countdown_duration.toString());\n const [secondLevelAlarmCountdownDuration, setSecondLevelAlarmCountdownDuration] =\n useState(config.alarm.second_level_alarm_countdown_duration.toString());\n const [thirdLevelAlarmCountdownDuration, setThirdLevelAlarmCountdownDuration] =\n useState(config.alarm.third_level_alarm_countdown_duration.toString());\n const [reactivationDurationAfterReset, setReactivationDurationAfterReset] =\n useState(config.alarm.reactivation_duration_after_reset.toString());\n const [sirenIntervalOnDuration, setSirenIntervalOnDuration] =\n useState(config.alarm.siren_interval_on_duration.toString());\n const [sirenIntervalOffDuration, setSirenIntervalOffDuration] =\n useState(config.alarm.siren_interval_off_duration.toString());\n const [sirenRepeatCount, setSirenRepeatCount] =\n useState(config.alarm.siren_interval_repeat_count.toString());\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const save = useCallback(() => {\n const homeTimerValue = Number(homeTimer);\n if (isNaN(homeTimerValue) || homeTimerValue < 0) {\n failure(t('AT_HOME_TIMER_VALUE_IS_INVALID'));\n\n return;\n }\n\n const outsideTimerValue = Number(outsideTimer);\n if (isNaN(outsideTimerValue) || outsideTimerValue < 0) {\n failure(t('AT_OUTSIDE_TIMER_VALUE_IS_INVALID'));\n\n return;\n }\n\n const firstLevelAlarmCountdownDurationValue = Number(firstLevelAlarmCountdownDuration);\n if (isNaN(firstLevelAlarmCountdownDurationValue) || firstLevelAlarmCountdownDurationValue < 0) {\n failure(t('1ST_LEVEL_ALARM_COUNTDOWN_IS_INVALID'));\n\n return;\n }\n\n const secondLevelAlarmCountdownDurationValue = Number(secondLevelAlarmCountdownDuration);\n if (isNaN(secondLevelAlarmCountdownDurationValue) || secondLevelAlarmCountdownDurationValue < 0) {\n failure(t('2ND_LEVEL_ALARM_COUNTDOWN_IS_INVALID'));\n\n return;\n }\n\n const thirdLevelAlarmCountdownDurationValue = Number(thirdLevelAlarmCountdownDuration);\n if (isNaN(thirdLevelAlarmCountdownDurationValue) || thirdLevelAlarmCountdownDurationValue < 0) {\n failure(t('3RD_LEVEL_ALARM_COUNTDOWN_IS_INVALID'));\n\n return;\n }\n\n const reactivationDurationAfterResetValue = Number(reactivationDurationAfterReset);\n if (isNaN(reactivationDurationAfterResetValue) || reactivationDurationAfterResetValue < 0) {\n failure(t('REACTIVATION_DURATION_AFTER_ALARM_RESET_IS_INVALID'));\n\n return;\n }\n\n const sirenIntervalOnDurationValue = Number(sirenIntervalOnDuration);\n if (isNaN(sirenIntervalOnDurationValue) || sirenIntervalOnDurationValue < 0) {\n failure(t('SIREN_INTERVAL_ON_DURATION_IS_INVALID'));\n\n return;\n }\n\n const sirenIntervalOffDurationValue = Number(sirenIntervalOffDuration);\n if (isNaN(sirenIntervalOffDurationValue) || sirenIntervalOffDurationValue < 0) {\n failure(t('SIREN_INTERVAL_OFF_DURATION_IS_INVALID'));\n\n return;\n }\n\n const sirenRepeatCountValue = Number(sirenRepeatCount);\n if (isNaN(sirenRepeatCountValue) || sirenRepeatCountValue < 0) {\n failure(t('SIREN_REPEAT_COUNT_IS_INVALID'));\n\n return;\n }\n\n const configModel: ConfigModel = {\n ...config,\n alarm: {\n first_level_alarm_countdown_duration: firstLevelAlarmCountdownDurationValue,\n second_level_alarm_countdown_duration: secondLevelAlarmCountdownDurationValue,\n third_level_alarm_countdown_duration: thirdLevelAlarmCountdownDurationValue,\n reactivation_duration_after_reset: reactivationDurationAfterResetValue,\n siren_interval_on_duration: sirenIntervalOnDurationValue,\n siren_interval_off_duration: sirenIntervalOffDurationValue,\n siren_interval_repeat_count: sirenRepeatCountValue,\n },\n alarm_settings: {\n home_timer_seconds: homeTimerValue,\n outside_timer_seconds: outsideTimerValue,\n },\n };\n\n return rpc.updateConfigs(configModel).catch(failure);\n }, [\n t,\n config,\n homeTimer,\n outsideTimer,\n firstLevelAlarmCountdownDuration,\n secondLevelAlarmCountdownDuration,\n thirdLevelAlarmCountdownDuration,\n reactivationDurationAfterReset,\n sirenIntervalOnDuration,\n sirenIntervalOffDuration,\n sirenRepeatCount,\n failure,\n rpc,\n ]);\n\n const onSavePressed = useCallback(() => {\n save()\n .then(() => {\n success(t('SUCCESSFULLY_EDITED'));\n onBackPressed();\n });\n }, [\n t,\n save,\n success,\n onBackPressed,\n ]);\n\n const onApplyPressed = useCallback(() => {\n const count = bridgeDeviceList.length;\n question(t('SETTINGS_WILL_BE_APPLIED__CONTINUE', {count}), () => {\n save()\n .then(async () => {\n for (const bridgeDevice of bridgeDeviceList) {\n await rpc.updateBridgeDevice({\n ...bridgeDevice, alarm_config: {\n ...bridgeDevice.alarm_config,\n first_level_alarm_countdown_duration: Number(firstLevelAlarmCountdownDuration),\n second_level_alarm_countdown_duration: Number(secondLevelAlarmCountdownDuration),\n third_level_alarm_countdown_duration: Number(thirdLevelAlarmCountdownDuration),\n reactivation_duration_after_reset: Number(reactivationDurationAfterReset),\n siren_interval_on_duration: Number(sirenIntervalOnDuration),\n siren_interval_off_duration: Number(sirenIntervalOffDuration),\n siren_interval_repeat_count: Number(sirenRepeatCount),\n },\n });\n }\n })\n .then(() => {\n success(t('SUCCESSFULLY_EDITED'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\n t,\n firstLevelAlarmCountdownDuration,\n secondLevelAlarmCountdownDuration,\n thirdLevelAlarmCountdownDuration,\n reactivationDurationAfterReset,\n sirenIntervalOnDuration,\n sirenIntervalOffDuration,\n sirenRepeatCount,\n save,\n rpc,\n question,\n bridgeDeviceList,\n success,\n onBackPressed,\n failure,\n ]);\n\n const buttons = [\n {\n text: t('apply'),\n className: 'blue',\n onClick: onApplyPressed,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ];\n\n const onBlur = useCallback(() => {\n setActiveNumpadInput(null);\n }, [setActiveNumpadInput]);\n\n return (\n \n \n
\n
\n
\n {t('alarm_countdown_durations')}\n
\n \n \n \n
\n {t('alar_reactivation_duration_after_reset')}\n
\n \n
\n
\n
\n {t('siren_interval')}\n
\n \n \n \n
\n {t('alarm_setup_counter_durations')}\n
\n \n \n
\n
\n \n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {AlarmEditScreen} from './AlarmEditScreen';\n\nexport const AlarmSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/alarm',\n component: AlarmEditScreen,\n },\n];\n","import './index.scss';\n\nimport React, {memo, useCallback, useMemo, useState, MouseEvent} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {useSelector} from 'react-redux';\nimport {HomepageItemModel, HomepageItemType} from '../../../../store/control/state';\nimport iconUpArrow from '../../../../assets/images/icons/scenario/up-arrow.png';\nimport iconDownArrow from '../../../../assets/images/icons/scenario/down-arrow.png';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport const TYPE_NAME_MAP: Record = {\n control: 'CONTROL',\n scenario: 'SCENARIO',\n sensor: 'SENSOR',\n media: 'MEDIA',\n};\n\nconst keyExtractor = (item: HomepageItemModel) => item.id;\n\ntype UpDownProps = {\n index: number;\n onUpClick?: (index: number) => void;\n onDownClick?: (index: number) => void;\n};\n\nconst UpDown = memo(function UpDown({onUpClick: onUpClickProp, onDownClick: onDownClickProp, index}: UpDownProps) {\n const onUpClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onUpClickProp(index);\n }, [onUpClickProp, index]);\n\n const onDownClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onDownClickProp(index);\n }, [onDownClickProp, index]);\n\n return (\n
\n {\n renderIf(onUpClickProp)(() =>\n
\n \n
,\n () =>
,\n )\n }\n {\n renderIf(onDownClickProp)(() =>\n
\n \n
,\n )\n }\n
\n );\n});\n\nexport const HomepageListScreen = memo(function HomepageListScreen() {\n const {t} = useLocalization();\n const [rpc] = useRPC();\n\n const homepageItemModelList = useSelector(state => state.control.homepageItemList);\n const homepageItemModelListSorted = useMemo(() =>\n homepageItemModelList.sort((a, b) => a.order - b.order),\n [homepageItemModelList]);\n const controlSet = useSetSelector(state => state.control.controlList);\n const scenarioSet = useSetSelector(state => state.control.scenarioList);\n const inputSet = useSetSelector(state => state.control.inputList);\n const mediaSet = useSetSelector(state => state.control.mediaList);\n\n const [selectedHomepageItem, setSelectedHomepageItem] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/homepage/edit/${selectedHomepageItem ? selectedHomepageItem.id : ''}`,\n className: 'orange',\n hidden: !(selectedHomepageItem),\n },\n {\n text: t('add'),\n url: '/settings/homepage/edit',\n className: 'green',\n },\n ], [t, selectedHomepageItem]);\n\n const swapItemOrders = useCallback((itemA: HomepageItemModel, itemB: HomepageItemModel) => {\n Promise.all([\n rpc.updateHomepageItem({...itemA, order: itemB.order}),\n rpc.updateHomepageItem({...itemB, order: itemA.order}),\n ]).then(() => setSelectedHomepageItem(null));\n }, [rpc]);\n\n const onUpClick = useCallback((index: number) => {\n swapItemOrders(homepageItemModelList[index - 1], homepageItemModelList[index]);\n }, [homepageItemModelList, swapItemOrders]);\n\n const onDownClick = useCallback((index: number) => {\n swapItemOrders(homepageItemModelList[index + 1], homepageItemModelList[index]);\n }, [homepageItemModelList, swapItemOrders]);\n\n const displayNameExtractor = useCallback((item: HomepageItemModel, column: ColumnModel, index?: number) => {\n if (column.key === 'name') {\n switch (item.type) {\n case 'control':\n return controlSet[item.relational_id]?.name || '-';\n case 'sensor':\n return inputSet[item.relational_id]?.name || '-';\n case 'scenario':\n return scenarioSet[item.relational_id]?.name || '-';\n case 'media':\n return mediaSet[item.relational_id]?.name || '-';\n default:\n return '-';\n }\n } else if (column.key === 'type') {\n return t(TYPE_NAME_MAP[item.type]) || '-';\n } else if (column.key === 'order') {\n return ;\n }\n\n return item[column.key] || '-';\n }, [t, controlSet, inputSet, scenarioSet, mediaSet, onUpClick, homepageItemModelListSorted.length, onDownClick]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('type'),\n key: 'type',\n },\n {\n length: 3,\n name: t('order'),\n key: 'order',\n },\n ], [t]);\n\n return (\n <>\n \n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {SelectItem} from '../../../../components/Select';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {ControlModel, InputModel, MediaModel} from '../../../../types/control';\nimport {HomepageItemModel, HomepageItemType, ScenarioModel} from '../../../../store/control/state';\nimport {TYPE_NAME_MAP} from '../HomepageListScreen';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useMap} from '../../../../hooks/map';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/homepage';\n\nexport const HomepageEditScreen = memo(function HomepageEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const homepageItemList = useSelector(state => state.control.homepageItemList);\n const inputTypeSet = useSetSelector(state => state.control.inputTypeList);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const controlOptionList = useMap(useFilterSelector(\n state => state.control.controlList,\n control => controlTypeSet[control.type_id].show_on_homepage,\n [controlTypeSet],\n ),\n control => ({value: control, label: control.name}),\n [],\n );\n const scenarioOptionList = useMapSelector(\n state => state.control.scenarioList,\n scenario => ({value: scenario, label: scenario.name}),\n [],\n );\n const sensorOptionList = useMap(\n useFilterSelector(\n state => state.control.inputList,\n input => inputTypeSet[input.type_id]?.primitive_name === 'sensor',\n ),\n sensor => ({value: sensor, label: sensor.name}),\n );\n const mediaOptionList = useMapSelector(\n state => state.control.mediaList,\n media => ({value: media, label: media.name}),\n [],\n );\n\n const [selectedHomepageItem, setSelectedHomepageItem] = useState(null);\n const [selectedType, setSelectedType] = useState>(null);\n const [selectedControlOption, setSelectedControlOption] = useState>(null);\n const [selectedScenarioOption, setSelectedScenarioOption] = useState>(null);\n const [selectedSensorOption, setSelectedSensorOption] = useState>(null);\n const [selectedMediaOption, setSelectedMediaOption] = useState>(null);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_you_want_to_delete'), () => {\n return rpc.deleteHomepageItem(selectedHomepageItem.id)\n .then(() => {\n success(t('successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\n t,\n failure,\n onBackPressed,\n question,\n rpc,\n selectedHomepageItem?.id,\n success,\n ]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (selectedType == null) {\n failure(t('pls_select_a_valid_type'));\n\n return false;\n }\n\n if (selectedType.value === 'control' && selectedControlOption == null) {\n failure(t('pls_select_a_valid_control'));\n\n return false;\n }\n\n if (selectedType.value === 'scenario' && selectedScenarioOption == null) {\n failure(t('pls_select_a_valid_scenario'));\n\n return false;\n }\n\n if (selectedType.value === 'sensor' && selectedSensorOption == null) {\n failure(t('pls_select_a_valid_sensor'));\n\n return false;\n }\n\n if (selectedType.value === 'media' && selectedMediaOption == null) {\n failure(t('pls_select_a_valid_remote'));\n\n return false;\n }\n\n return true;\n }, [\n t,\n failure,\n selectedType,\n selectedControlOption,\n selectedScenarioOption,\n selectedSensorOption,\n selectedMediaOption,\n ]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const order = homepageItemList.length === 0 ? 0 :\n homepageItemList.sort((a, b) => b.order - a.order)[0].order + 1;\n\n const homepageItemModel: HomepageItemModel = {\n id: selectedHomepageItem?.id || null,\n relational_id: selectedType.value === 'control' ? selectedControlOption.value.id :\n selectedType.value === 'scenario' ? selectedScenarioOption.value.id :\n selectedType.value === 'sensor' ? selectedSensorOption.value.id :\n selectedType.value === 'media' ? selectedMediaOption.value.id :\n null,\n type: selectedType.value,\n order,\n };\n\n return rpc.updateHomepageItem(homepageItemModel)\n .then(() => {\n success(t(homepageItemModel.id ? 'successfully_edited' : 'successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n homepageItemList,\n failure,\n isFieldsValid,\n onBackPressed,\n rpc,\n selectedControlOption?.value?.id,\n selectedHomepageItem?.id,\n selectedSensorOption?.value?.id,\n selectedScenarioOption?.value?.id,\n selectedMediaOption?.value?.id,\n selectedType?.value,\n success,\n ]);\n\n const buttons = useMemo(() => [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selectedHomepageItem),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed, onDeletePressed, selectedHomepageItem]);\n\n const TYPE_OPTION_LIST = useMemo[]>(() =>\n (Object.entries(TYPE_NAME_MAP) as [HomepageItemType, string][])\n .map(([type, name]) => ({label: t(name), value: type})), [t]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const item = homepageItemList.find(homepageItem => homepageItem.id === params['id']);\n if (item == null) {\n return;\n }\n\n setSelectedHomepageItem(item);\n setSelectedType(TYPE_OPTION_LIST.find(typeOption => typeOption.value === item.type));\n const selectedControl = item.type === 'control' &&\n controlOptionList.find(controlOption => controlOption.value.id === item.relational_id);\n setSelectedControlOption(selectedControl || controlOptionList[0] || null);\n const selectedScenario = item.type === 'scenario' &&\n scenarioOptionList.find(scenarioOption => scenarioOption.value.id === item.relational_id);\n setSelectedScenarioOption(selectedScenario || scenarioOptionList[0] || null);\n const selectedSensor = item.type === 'sensor' &&\n sensorOptionList.find(sensorOption => sensorOption.value.id === item.relational_id);\n setSelectedSensorOption(selectedSensor || sensorOptionList[0] || null);\n const selectedMedia = item.type === 'media' &&\n mediaOptionList.find(mediaOption => mediaOption.value.id === item.relational_id);\n setSelectedMediaOption(selectedMedia);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setSelectedType(TYPE_OPTION_LIST[0]);\n setSelectedControlOption(controlOptionList[0] || null);\n setSelectedScenarioOption(scenarioOptionList[0] || null);\n setSelectedSensorOption(sensorOptionList[0] || null);\n setSelectedMediaOption(mediaOptionList[0] || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n {\n renderIf(selectedType?.value === 'control')(() =>\n ,\n )\n }\n {\n renderIf(selectedType?.value === 'scenario')(() =>\n ,\n )\n }\n {\n renderIf(selectedType?.value === 'sensor')(() =>\n ,\n )\n }\n {\n renderIf(selectedType?.value === 'media')(() =>\n ,\n )\n }\n
\n
\n\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {HomepageListScreen} from './HomepageListScreen';\nimport {HomepageEditScreen} from './HomepageEditScreen';\n\nexport const HomepageSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/homepage',\n component: HomepageListScreen,\n },\n {\n routerLink: '/settings/homepage/edit/:id',\n component: HomepageEditScreen,\n },\n {\n routerLink: '/settings/homepage/edit',\n component: HomepageEditScreen,\n },\n];\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {SettingsPageContainer} from '../../../../../components/Settings/SettingsPageContainer';\nimport {PasswordContainer} from '../../../../../components/PasswordContainer';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {WifiNetworkModel} from '../../../../../types/wifi-network';\nimport {ColumnModel, SettingsList} from '../../../../../components/Settings/SettingsList';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useParams} from 'react-router-dom';\nimport iconSignal0 from '../../../../../assets/images/icons/settings/signal0.png';\nimport iconSignal1 from '../../../../../assets/images/icons/settings/signal1.png';\nimport iconSignal2 from '../../../../../assets/images/icons/settings/signal2.png';\nimport iconSignal3 from '../../../../../assets/images/icons/settings/signal3.png';\nimport {useSelector} from 'react-redux';\nimport {SettingReadOnlyRowComponent} from '../../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {useLocalization} from \"../../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/gateway';\n\nconst keyExtractor = (item: WifiNetworkModel) => item.name;\n\nexport const WiFiListScreen = memo(function WiFiListScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n\n const [wifiNetworkList, setWiFiNetworkList] = useState([]);\n const [selectedWiFiNetwork, setSelectedWiFiNetwork] = useState(null);\n\n const currentGatewayId = params.id;\n const selectedGateway = useSelector(state => state.control.gatewayList.find(g => g.id === currentGatewayId));\n const hasWifi = !(selectedGateway?.settings.home_network.is_ethernet && selectedGateway?.settings.remote_network.is_ethernet);\n\n const gatewayName = selectedGateway?.name;\n\n const refreshNetworkList = useCallback(() => {\n if (rpc == null) {\n // prevent exception if page is refreshed\n return;\n }\n\n // setWiFiNetworkList([{name:'sa', signal: 50, channel: '1', security:'1'}]);\n rpc.getWifiNetworkList(currentGatewayId)\n .then(networkList => {\n setWiFiNetworkList(networkList);\n })\n .catch(failure);\n }, [rpc, currentGatewayId, failure]);\n\n const onScanClick = useCallback(() => {\n setSelectedWiFiNetwork(null);\n setWiFiNetworkList([]);\n refreshNetworkList();\n }, [refreshNetworkList]);\n\n const onDisconnectPress = useCallback(() => {\n rpc.disconnectWifiNetwork(currentGatewayId)\n .then(() => {\n success(t('disconnected'));\n }).catch(failure);\n }, [t, failure, rpc, success, currentGatewayId]);\n\n const buttons = useMemo(() => [\n {\n text: t('disconnect'),\n className: 'red',\n onClick: onDisconnectPress,\n hidden: !(selectedGateway?.settings?.wifi_settings?.ssid !== '') || !hasWifi,\n },\n {\n text: t('connect'),\n url: `/settings/gateway/${currentGatewayId != null ? currentGatewayId : ''}/wifi/${selectedWiFiNetwork != null ? selectedWiFiNetwork.name : ''}`,\n className: 'blue',\n hidden: !(selectedWiFiNetwork) || !hasWifi,\n },\n {\n text: t('manual_connect'),\n url: `/settings/gateway/${currentGatewayId != null ? currentGatewayId : ''}/wifi/connect-manuel`,\n className: 'blue',\n hidden: !hasWifi,\n },\n {\n text: t('scan'),\n onClick: onScanClick,\n className: 'green',\n hidden: !hasWifi,\n },\n ], [t, currentGatewayId, selectedWiFiNetwork, onScanClick, selectedGateway, onDisconnectPress, hasWifi]);\n\n const displayNameExtractor = useCallback((item: WifiNetworkModel, column: ColumnModel) => {\n if (column.key === 'signal') {\n const icon = item.signal > 66 ? iconSignal3 :\n item.signal > 33 ? iconSignal2 :\n item.signal > 0 ? iconSignal1 :\n iconSignal0;\n return \"\"/;\n }\n\n return item[column.key] || '-';\n }, []);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('wifi_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('channel'),\n key: 'channel',\n },\n {\n length: 2,\n name: t('signal_power'),\n key: 'signal',\n },\n {\n length: 3,\n name: t('security'),\n key: 'security',\n },\n ], [t]);\n\n useEffect(() => {\n if (currentGatewayId == null) {\n return;\n }\n\n refreshNetworkList();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n {\n renderIf(hasWifi)(() => (\n \n ), () => (\n
\n
\n \n
\n
\n ))\n }\n \n
\n );\n});\n","import {RouteDefinition} from '../../../../routes';\nimport {WiFiListScreen} from './WifiListScreen';\nimport {WiFiConnectScreen} from './WiFiConnectScreen';\n\nexport const WiFiSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/gateway/:id/wifi',\n component: WiFiListScreen,\n },\n {\n routerLink: '/settings/gateway/:gatewayId/wifi/:id',\n component: WiFiConnectScreen,\n },\n];\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useKeyboard} from '../../../../../hooks/keyboard';\nimport {SettingInputComponent} from '../../../../../components/Settings/SettingInputComponent';\nimport {SettingReadOnlyRowComponent} from '../../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {useSetSelector} from '../../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../../hooks/localization\";\n\nexport const WiFiConnectScreen = memo(function WiFiConnectScreen() {\n const {t} = useLocalization();\n const params = useParams<{ gatewayId: string; id: string; }>();\n const {success, failure} = useMessage();\n const history = useHistory();\n const [rpc] = useRPC();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n\n const [password, setPassword] = useState('');\n const [wifiNetworkName, setWiFiNetworkName] = useState('');\n const [isManuel, setManuel] = useState(false);\n const [gatewayId, setGatewayId] = useState(null);\n\n const gatewaySet = useSetSelector(state => state.control.gatewayList);\n const gatewayName = useMemo(() => gatewayId == null ? null : gatewaySet[gatewayId].name,\n [gatewayId, gatewaySet]);\n\n const BACK_URL = useMemo(() => {\n return `/settings/gateway/${params.gatewayId != null ? params.gatewayId : ''}/wifi`;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [BACK_URL, history]);\n\n\n const isConnectFieldsValid = useCallback(() => {\n if (wifiNetworkName == null || wifiNetworkName.length === 0) {\n failure(t('pls_enter_a_valid_network_name'));\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure(t('pls_enter_a_valid_password'));\n\n return false;\n }\n\n return true;\n }, [t, failure, wifiNetworkName, password]);\n\n const onConnectPress = useCallback(() => {\n if (!isConnectFieldsValid()) {\n return;\n }\n\n rpc.connectWifiNetwork(gatewayId, wifiNetworkName, password)\n .then(() => {\n success(t('connected'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, gatewayId, isConnectFieldsValid, onBackPressed, password, rpc, success, wifiNetworkName]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const buttons = useMemo(() => [\n {\n text: t('connect'),\n className: 'green',\n onClick: onConnectPress,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, BACK_URL, onConnectPress]);\n\n useEffect(() => {\n setGatewayId(params.gatewayId);\n\n if (params.id !== 'connect-manuel') {\n setWiFiNetworkName(params.id);\n } else {\n setManuel(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n {\n renderIf(isManuel)(() =>\n\n ,\n () =>\n\n ,\n )\n }\n \n
\n
\n\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {useCallback, useEffect, useRef} from 'react';\n\nexport function useDebounce any>(fn: T, delay: number): (...args: Parameters) => void {\n const ref = useRef();\n const fnRef = useRef();\n\n useEffect(() => {\n fnRef.current = fn;\n });\n\n return useCallback((...args) => {\n if (ref.current) {\n clearTimeout(ref.current);\n }\n\n ref.current = setTimeout(() => {\n fnRef.current(...args);\n ref.current = null;\n }, delay);\n }, [delay]);\n}\n","import React, {CSSProperties, memo, ReactNode} from 'react';\nimport './index.scss';\n\ntype Props = {\n children?: ReactNode;\n style?: CSSProperties;\n};\n\nexport const Widget = memo(function Widget({children, style}: Props) {\n return (\n
\n
\n {children}\n
\n
\n );\n});\n","import React, {FormEvent, memo, ReactNode} from 'react';\nimport './index.scss';\nimport {Column, ColumnProps} from '../../Column';\nimport {Widget} from '../../Widget';\nimport {onClickHandler} from '../../../utils/onclick';\n\ntype Props = {\n name: string;\n click: () => void;\n onChange: (e: FormEvent) => void;\n value: number;\n children?: ReactNode;\n activeImage: string;\n passiveImage: string;\n columnProps?: Partial;\n};\n\nexport const RangeRawComponent = memo(function RangeRawComponent({name, children, click, value, onChange, activeImage, passiveImage, columnProps}: Props) {\n return (\n \n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n {name}\n
\n
\n \n {value}%\n \n
\n
\n \n
\n
\n
\n {children}\n
\n
\n
\n );\n});\n","import React, {FormEvent, memo, ReactNode, useCallback, useEffect, useRef, useState} from 'react';\nimport {useDebounce} from '../../../hooks/debounce';\nimport {RangeRawComponent} from '../RangeRawComponent';\nimport {ColumnProps} from '../../Column';\n\ntype Props = {\n name: string;\n value: number;\n onChange: (value: number) => void;\n activeImage: string;\n passiveImage: string;\n columnProps?: Partial;\n children?: ReactNode;\n};\n\nexport const RangeComponent = memo(function RangeComponent(props: Props) {\n const {name,columnProps , value: valueProp, onChange: onChangeProp, children, activeImage, passiveImage} = props;\n\n const [tempValue, setTempValue] = useState(0);\n const [value, setValue] = useState(valueProp);\n const timeoutRef = useRef();\n\n const onChangeCallback = useDebounce(onChangeProp, 200);\n\n const click = useCallback(() => {\n let newValue;\n if (value > 0) {\n setTempValue(value);\n newValue = 0;\n } else if (tempValue > 0) {\n newValue = tempValue;\n } else {\n newValue = 100;\n }\n\n setValue(newValue);\n onChangeCallback(newValue);\n }, [tempValue, value, onChangeCallback]);\n\n const onChange = useCallback((e: FormEvent) => {\n // @ts-ignore\n const newValue = e.target.valueAsNumber;\n if (newValue !== value) {\n setValue(newValue);\n onChangeCallback(newValue);\n }\n }, [onChangeCallback, value]);\n\n useEffect(() => {\n setValue(valueProp);\n }, [valueProp]);\n\n useEffect(() => {\n timeoutRef.current = setTimeout(() => {\n if (value !== valueProp) {\n setValue(valueProp);\n }\n }, 2000);\n\n return () => clearTimeout(timeoutRef.current);\n }, [value, valueProp]);\n\n return (\n \n {children}\n \n );\n});\n","import React, {memo, useCallback} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {RangeComponent} from '../../../../components/Range/RangeComponent';\nimport iconSound from '../../../../assets/images/icons/settings/sound.png';\nimport iconSoundOff from '../../../../assets/images/icons/settings/soundoff.png';\nimport microphoneOn from '../../../../assets/images/icons/settings/microphoneon.png';\nimport microphoneOff from '../../../../assets/images/icons/settings/microphoneoff.png';\n\nimport './index.scss';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {SoundState} from '../../../../store/control/state';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {setSoundStateAction} from '../../../../store/control/actions';\nimport {useMessage} from '../../../../hooks/message';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport const SoundEditScreen = memo(function SoundEditScreen() {\n const {t} = useLocalization();\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n const {failure} = useMessage();\n const sound = useSelector(state => state.control.sound);\n\n const onChange = useCallback((newSound: SoundState) => {\n rpc.updateSoundState(newSound)\n .then(() => dispatch(setSoundStateAction(newSound)))\n .catch(failure);\n }, [dispatch, failure, rpc]);\n\n const onIntercomChange = useCallback((value: number) => {\n onChange({...sound, intercom_level: value});\n }, [onChange, sound]);\n\n const onAlarmChange = useCallback((value: number) => {\n onChange({...sound, alarm_level: value});\n }, [onChange, sound]);\n\n const onIncomingCallFlatFrontChange = useCallback((value: number) => {\n onChange({...sound, incoming_call_flat_front_level: value});\n }, [onChange, sound]);\n\n const onIncomingCallOutsidePanelChange = useCallback((value: number) => {\n onChange({...sound, incoming_call_outside_panel_level: value});\n }, [onChange, sound]);\n\n const onMicrophoneLevelChange = useCallback((value: number) => {\n onChange({...sound, microphone_level: value});\n }, [onChange, sound]);\n\n return (\n \n \n
\n
\n \n \n \n
\n
\n \n \n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {SoundEditScreen} from './SoundEditScreen';\n\nexport const SoundSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/sound',\n component: SoundEditScreen,\n },\n];\n","import {RouteDefinition} from '../../../routes';\nimport {LanguageListScreen} from \"./LanguageListScreen\";\n\nexport const LanguageSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/language',\n component: LanguageListScreen,\n },\n];\n","import {SettingsPageContainer} from \"../../../../components/Settings/SettingsPageContainer\";\nimport {PasswordContainer} from \"../../../../components/PasswordContainer\";\nimport React, {memo} from \"react\";\nimport './index.scss'\nimport {useLocalization} from \"../../../../hooks/localization\";\nimport {useSelector} from \"react-redux\";\n\nexport const LanguageListScreen = memo(function LanguageListScreen() {\n const languageList = useSelector(state => state.control.languageList);\n\n const {changeLanguage, t} = useLocalization();\n\n return (\n \n \n
\n
\n {\n languageList.map(language => (\n \n ))\n }\n
\n
\n \n
\n );\n})\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useMap} from '../../../../hooks/map';\nimport {useFilter} from '../../../../hooks/filter';\nimport {SelectItem} from '../../../../components/Select';\nimport {LocationModel} from '../../../../types/location';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useMessage} from '../../../../hooks/message';\nimport {useHistory} from 'react-router-dom';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings';\n\nexport const LocationEditScreen = memo(function LocationEditScreen() {\n const {t} = useLocalization();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const config = useSelector(state => state.control.config);\n const locationList = useSelector(state => state.control.locationList);\n\n const cityList: SelectItem[] = useMap(\n useFilter(\n locationList,\n location => location.type === 'city',\n [],\n ), location => ({\n value: location,\n label: location.name,\n }), []);\n const [city, setCity] = useState>(\n cityList.find(c => c.value.id === (config.location.type === 'city' ? config.location.id : config.location.parent_id)) || null,\n );\n\n const townList: SelectItem[] = useMap(\n useFilter(\n locationList,\n location => location.type === 'town' && location.parent_id === city?.value?.id,\n [city?.value?.id],\n ), location => ({\n value: location,\n label: location.name,\n }), []);\n const [town, setTown] = useState>(\n config.location.type === 'city' ? null :\n (townList.find(t => t.value.id === config.location.id) || null),\n );\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (city?.value == null) {\n failure(t('pls_select_a_city'));\n\n return;\n }\n\n return true;\n }, [t, city?.value, failure]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const location = town?.value || city?.value;\n return rpc.updateConfigs({...config, location})\n .then(() => {\n success(t('successfully_saved'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, city?.value, config, failure, isFieldsValid, onBackPressed, rpc, success, town?.value]);\n\n const buttons = useMemo(() => [\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onSavePressed]);\n\n useEffect(() => {\n setTown(townList.find(t => t.value.id === town?.value?.id) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [townList]);\n\n return (\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {LocationEditScreen} from './LocationEditScreen';\n\nexport const TimeSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/time',\n component: LocationEditScreen,\n },\n];\n","export const downloadStringAsFile = (function () {\n const a = document.createElement('a');\n document.body.appendChild(a);\n // @ts-ignore\n // noinspection JSConstantReassignment\n a.style = 'display: none';\n\n return function (data, fileName) {\n const url = `data:application/octet-stream;base64,${data}`;\n fetch(url)\n .then(r => r.blob())\n .then(blob => {\n const url = window.URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n a.click();\n window.URL.revokeObjectURL(url);\n });\n };\n}());\n","import {RouteDefinition} from '../../../routes';\nimport {DatabaseScreen} from './DatabaseScreen';\n\nexport const DatabaseSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/db',\n component: DatabaseScreen,\n },\n];\n","import React, {memo, useCallback, useRef, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useMessage} from '../../../../hooks/message';\nimport {downloadStringAsFile} from '../../../../utils/download';\n\nimport './index.scss';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useTranslation} from \"react-i18next\";\n\nexport const DatabaseScreen = memo(function TestScreen() {\n const {t} = useTranslation();\n const [rpc] = useRPC();\n const {success, failure} = useMessage();\n const ask = useQuestion();\n\n const [downloading, setDownloading] = useState(false);\n const [uploading, setUploading] = useState(false);\n const [fileNameToUpload, setFileNameToUpload] = useState('');\n\n const downloadInputRef = useRef();\n\n const downloadDBClick = useCallback(() => {\n if (downloading) {\n return;\n }\n\n setDownloading(true);\n rpc.downloadDB()\n .then(response => {\n downloadStringAsFile(response, 'db.zip');\n })\n .catch(failure)\n .finally(() => setDownloading(false));\n }, [rpc, failure, downloading]);\n\n const resetDBClick = useCallback(() => {\n ask(t('database_will_be_reset_to_factory_settings__are_you_sure'), () => {\n rpc.resetDB()\n .then(() => {\n success('');\n })\n .catch(failure);\n });\n }, [t, rpc, success, failure, ask]);\n\n const uploadDBClick = useCallback(() => {\n if (uploading) {\n return;\n }\n\n // @ts-ignore\n downloadInputRef?.current?.click();\n }, [uploading]);\n\n const uploadDBFile = useCallback((file: File) => {\n setUploading(true);\n const fileReader = new FileReader();\n // @ts-ignore\n fileReader.onload = () => {\n rpc.uploadDB(fileReader.result)\n .catch(failure)\n .finally(() => setUploading(false));\n };\n fileReader.readAsDataURL(file);\n }, [rpc, failure]);\n\n const onInputFileChange = useCallback(event => {\n const target = event.target;\n const file = target.files[0];\n setFileNameToUpload(file.name);\n uploadDBFile(file);\n event.target.value = null;\n }, [uploadDBFile]);\n\n return (\n \n \n
\n
\n
\n
\n {downloading ? t('downloading') : t('download_database')}\n
\n
\n {uploading ? t('filename_uploading', {fileName: fileNameToUpload}) : t('upload_database')}\n \n
\n
\n
\n
\n
\n
\n {t('reset_database')}\n
\n
\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {SystemInfoScreen} from './SystemInfoScreen';\n\nexport const SystemInfoSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/system-info',\n component: SystemInfoScreen,\n },\n];\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {SystemInfo} from '../../../../types/system-info';\nimport {useMessage} from '../../../../hooks/message';\nimport {useLocalization} from '../../../../hooks/localization';\n\nconst BACK_URL = '/settings';\n\nexport const SystemInfoScreen = memo(function SystemInfoScreen() {\n const [rpc] = useRPC();\n const {failure} = useMessage();\n const {t} = useLocalization();\n\n const [systemInfo, setSystemInfo] = useState(null);\n\n const loadInfo = useCallback(() => {\n rpc.getSystemInfo()\n .then(setSystemInfo)\n .catch(failure);\n // eslint-disable-next-line\n }, []);\n\n const onRefreshPressed = useCallback(() => {\n loadInfo();\n }, [loadInfo]);\n\n const buttons = useMemo(() => [\n {\n text: t('refresh'),\n className: 'green',\n onClick: onRefreshPressed,\n },\n ], [t, onRefreshPressed]);\n\n useEffect(() => {\n loadInfo();\n }, [loadInfo]);\n\n return (\n \n \n
\n
\n {\n renderIf(systemInfo)(() =>\n <>\n \n \n \n \n \n ,\n )\n }\n
\n
\n {\n renderIf(systemInfo)(() =>\n <>\n \n \n \n ,\n )\n }\n
\n
\n \n
\n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {VirtualControlModel} from '../../../../store/control/state';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useSortBySelector} from '../../../../hooks/sort-by-selector';\nimport {useHistory} from 'react-router-dom';\nimport {useFilter} from '../../../../hooks/filter';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: VirtualControlModel) => item.id;\n\nexport const VirtualControlListScreen = memo(function VirtualControlListScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n\n const virtualControlList = useFilter(useSortBySelector(state => state.control.virtualControlList, control => control.bridge_device_id), c => c.registered_by_system !== true);\n const idBridgeDeviceMap = useSetSelector(state => state.control.bridgeDeviceList);\n const idControlMap = useSetSelector(state => state.control.controlList);\n\n const [selectedVirtualControl, setSelectedVirtualControl] = useState(null);\n\n const onCopyClick = useCallback(() => {\n history.push({pathname: '/settings/virtual-control/edit', state: {...selectedVirtualControl, id: null}});\n }, [history, selectedVirtualControl]);\n\n const buttons = useMemo(() => [\n {\n text: t('copy'),\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedVirtualControl),\n },\n {\n text: t('edit'),\n url: `/settings/virtual-control/edit/${selectedVirtualControl ? selectedVirtualControl.id : ''}`,\n className: 'orange',\n hidden: !(selectedVirtualControl),\n },\n {\n text: t('create_virtual_control'),\n url: '/settings/virtual-control/edit',\n className: 'green',\n },\n ], [t, onCopyClick, selectedVirtualControl]);\n\n const displayNameExtractor = useCallback((item: VirtualControlModel, column: ColumnModel) => {\n if (column.key === 'bridge_device_name') {\n return idBridgeDeviceMap[item.bridge_device_id]?.name ?? '-';\n } else if (column.key === 'control_name') {\n return idControlMap[item.control_id]?.name ?? '-';\n }\n\n return item[column.key] ?? '-';\n }, [idBridgeDeviceMap, idControlMap]);\n\n const columns = useMemo(() => [\n {\n length: 2,\n name: t('slot'),\n key: 'slot',\n },\n {\n length: 3,\n name: t('device_name'),\n key: 'bridge_device_name',\n },\n {\n length: 3,\n name: t('control_name'),\n key: 'control_name',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useLocation, useParams} from 'react-router-dom';\nimport {useMessage} from '../../../../hooks/message';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {VirtualControlModel} from '../../../../store/control/state';\nimport {SelectItem} from '../../../../components/Select';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {BRIDGE_DEVICE_TYPE_ID_STS_PLUS, CONTROL_TYPE_ID_THERMOSTAT, ControlModel} from '../../../../types/control';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {useMap} from '../../../../hooks/map';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useGlassControl} from '../../../../hooks/glass-control';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/virtual-control';\n\nexport const VirtualControlEditScreen = memo(function VirtualControlEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const {success, failure} = useMessage();\n const question = useQuestion();\n const [rpc] = useRPC();\n const history = useHistory();\n const location = useLocation();\n\n const controlSet = useSetSelector(state => state.control.controlList);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const virtualControlSet = useSetSelector(state => state.control.virtualControlList);\n const bridgeDeviceOptionList: SelectItem[] = useMapSelector(\n state => state.control.bridgeDeviceList,\n bridgeDevice => ({\n value: bridgeDevice,\n label: bridgeDevice.name,\n }));\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => location.state || virtualControlSet[params?.id] || null, []);\n const slot = !location.state ? ((selected?.slot?.toString()) || null) : null;\n const [bridgeDevice, setBridgeDevice] = useState>(\n (selected == null ? null :\n bridgeDeviceOptionList.find(option => option.value.id === selected.bridge_device_id) || null),\n );\n\n const controlBridgeDeviceOptionList: SelectItem[] = useMap(useFilterSelector(\n state => state.control.bridgeDeviceList,\n bridgeDeviceItem => bridgeDeviceItem.gateway_id === bridgeDevice?.value?.gateway_id && bridgeDeviceItem.id !== bridgeDevice?.value?.id,\n [bridgeDevice?.value?.id],\n ), bridgeDevice => ({value: bridgeDevice, label: bridgeDevice.name}));\n const [controlBridgeDevice, setControlBridgeDevice] = useState>(\n (selected == null ? null :\n controlBridgeDeviceOptionList.find(option => option.value.id === controlSet[selected.control_id]?.bridge_device_id)\n || null),\n );\n\n const controlOptionList = useMap(useFilterSelector(\n state => state.control.controlList,\n control => control.type_id !== CONTROL_TYPE_ID_THERMOSTAT &&\n controlBridgeDevice?.value?.id === control.bridge_device_id &&\n controlTypeSet[control.type_id].allowed_bridge_device_type_id_list.indexOf(bridgeDevice?.value?.type_id) !== -1,\n [selected?.bridge_device_id, controlBridgeDevice?.value?.id, controlTypeSet],\n ), control => ({\n value: control,\n label: control.name,\n }));\n\n const [control, setControl] = useState>(\n (selected == null ? null :\n controlOptionList.find(option => option.value.id === selected.control_id) || null),\n );\n const [navigateToSTPEditor, setNavigateToSTPEditor] = useState();\n\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const bridgeDeviceType = useMemo(() => bridgeDevice == null ? null : bridgeDeviceTypeSet[bridgeDevice.value.type_id],\n [bridgeDevice, bridgeDeviceTypeSet]);\n\n const {buttonNumber, buttonNumberOptionList, setButtonNumber} =\n useGlassControl(selected, bridgeDevice?.value?.id || null, bridgeDeviceType, control?.value?.type_id);\n\n const setNavigateStpEditorCheckbox = useCallback(() => {\n setNavigateToSTPEditor(!navigateToSTPEditor);\n }, [navigateToSTPEditor]);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const goToStpEditorWithState = useCallback((state: unknown) => {\n history.push({pathname: `/settings/stp-editor/${bridgeDevice.value.id}/content/`, state});\n }, [bridgeDevice, history]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_virtual_control'), () => {\n return rpc.deleteVirtualControl(selected.id)\n .then(() => {\n success(t('virtual_control_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, success, failure, onBackPressed, question, rpc, selected]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (bridgeDevice == null) {\n failure(t('pls_select_a_valid_device'));\n\n return false;\n }\n\n if (control == null) {\n failure(t('pls_select_a_valid_control'));\n\n return false;\n }\n\n if (bridgeDeviceType?.button_count > 0) {\n if (buttonNumber?.value == null) {\n failure(t('pls_select_button_number'));\n\n return false;\n }\n }\n\n return true;\n }, [t, bridgeDevice, control, failure, bridgeDeviceType, buttonNumber]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const virtualControl: VirtualControlModel = {\n id: selected?.id || null,\n slot: location.state ? -1 : (selected ? selected?.slot : -1),\n bridge_device_id: bridgeDevice.value.id,\n control_id: control.value.id,\n parameters: bridgeDeviceType.is_io_device ? null : {\n button_number: buttonNumber?.value,\n },\n };\n\n return rpc.updateVirtualControl(virtualControl)\n .then(id => {\n if (navigateToSTPEditor) {\n goToStpEditorWithState({\n controlId: id,\n bridgeDeviceId: bridgeDevice.value.id,\n });\n } else {\n success(t(selected != null ? 'virtual_control_successfully_edited' : 'virtual_control_successfully_saved'));\n onBackPressed();\n }\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n location.state,\n selected,\n rpc,\n bridgeDevice,\n control,\n success,\n failure,\n onBackPressed,\n buttonNumber,\n bridgeDeviceType?.is_io_device,\n navigateToSTPEditor,\n goToStpEditorWithState,\n ]);\n\n const buttons = useMemo(() => [\n {\n text: t('delete_virtual_control'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected) || location.state,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed, onDeletePressed, selected, location.state]);\n\n useEffect(() => {\n setControlBridgeDevice(controlBridgeDeviceOptionList.find(option => option.value.id === controlBridgeDevice?.value?.id) || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlBridgeDeviceOptionList]);\n\n useEffect(() => {\n setControl(controlOptionList.find(option => option.value.id === control?.value?.id) || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlOptionList]);\n\n return (\n \n \n
\n
\n {\n renderIf(slot)(() =>\n <>\n \n ,\n )\n }\n \n \n \n
\n
\n {\n renderIf(bridgeDeviceType?.button_count > 0)(() =>\n ,\n )\n }\n {\n renderIf(selected?.id == null &&\n bridgeDeviceType?.page_count > 0)(() =>\n ,\n )\n }\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {VirtualControlListScreen} from './VirtualControlListScreen';\nimport {VirtualControlEditScreen} from './VirtualControlEditScreen';\n\nexport const VirtualControlSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/virtual-control',\n component: VirtualControlListScreen,\n },\n {\n routerLink: '/settings/virtual-control/edit',\n component: VirtualControlEditScreen,\n },\n {\n routerLink: '/settings/virtual-control/edit/:id',\n component: VirtualControlEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {DoorBrandModel} from '../../../../types/door-brand';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useSelector} from 'react-redux';\nimport {DEVELOPER_URL} from '../../index';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: DoorBrandModel) => item.id;\n\nexport const DoorBrandListScreen = memo(function DoorBrandListScreen() {\n const {t} = useLocalization();\n const doorBrandList = useSelector(state => state.control.doorBrandList);\n\n const [selectedDoorBrand, setSelectedDoorBrand] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/developer/door-brand/edit/${selectedDoorBrand?.id || ''}`,\n className: 'orange',\n hidden: !(selectedDoorBrand),\n },\n {\n text: t('create_door_brand'),\n url: '/developer/door-brand/edit',\n className: 'green',\n },\n ], [t, selectedDoorBrand]);\n\n const displayNameExtractor = useCallback((item: DoorBrandModel, column: ColumnModel) => {\n return item[column.key] || '-';\n }, []);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('door_brand_name'),\n key: 'name',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSelector} from 'react-redux';\nimport {DoorBrandModel} from '../../../../types/door-brand';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/developer/door-brand';\n\nexport const DoorBrandEditScreen = memo(function DoorBrandEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const doorList = useSelector(state => state.control.doorList);\n const doorBrandList = useSelector(state => state.control.doorBrandList);\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [openCommandSuffix, setOpenCommandSuffix] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_camera_name'));\n\n return false;\n }\n\n return true;\n }, [t, name, failure]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const doorBrandModel: DoorBrandModel = {\n id: selected?.id || null,\n name,\n door_open_command_suffix: openCommandSuffix,\n };\n\n return rpc.updateDoorBrand(doorBrandModel)\n .then(() => {\n success(t(doorBrandModel.id ? 'door_brand_successfully_edited' : 'door_brand_successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n selected?.id,\n name,\n openCommandSuffix,\n rpc,\n failure,\n success,\n onBackPressed,\n ]);\n\n const onDeletePressed = useCallback(() => {\n const filteredDoorList = doorList.filter(door => door.door_brand_id === selected.id);\n if (filteredDoorList.length !== 0) {\n if (filteredDoorList.length === 1) {\n failure(t('named_door_uses_this_brand__pls_update_the_door_then_try_again',{name:filteredDoorList[0].name}));\n } else {\n failure(t('named_door_and_others_uses_this_brand__pls_update_these_doors_then_try_again',{name:filteredDoorList[0].name, count:(filteredDoorList.length - 1)}));\n }\n\n return;\n }\n\n question(t('are_you_sure_you_want_to_delete'), () => {\n return rpc.deleteDoorBrand(selected.id)\n .then(() => {\n success(t('door_brand_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, doorList, failure, onBackPressed, question, rpc, selected?.id, success]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, selected, onSavePressed, onDeletePressed],\n );\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const doorBrand = doorBrandList.find(doorBrandItem => doorBrandItem.id === params['id']);\n if (doorBrand == null) {\n return;\n }\n\n setSelected(doorBrand);\n setName(doorBrand.name);\n setOpenCommandSuffix(doorBrand.door_open_command_suffix);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {DoorBrandListScreen} from './DoorBrandListScreen';\nimport {DoorBrandEditScreen} from './DoorBrandEditScreen';\n\nexport const DoorBrandSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/developer/door-brand',\n component: DoorBrandListScreen,\n },\n {\n routerLink: '/developer/door-brand/edit/:id',\n component: DoorBrandEditScreen,\n },\n {\n routerLink: '/developer/door-brand/edit',\n component: DoorBrandEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {InputModel} from '../../../../types/control';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useSelector} from 'react-redux';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useHistory} from 'react-router-dom';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: InputModel) => item.id;\n\nexport const InputListScreen = memo(function InputListScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n\n const bridgeDeviceSet = useSetSelector(state => state.control.bridgeDeviceList);\n const inputList = useSelector(state => state.control.inputList);\n const inputTypeSet = useSetSelector(state => state.control.inputTypeList);\n\n const [selectedInput, setSelectedInput] = useState(null);\n\n const onCopyClick = useCallback(() => {\n history.push({pathname: '/settings/input/edit', state: {input: {...selectedInput, id: null}}});\n }, [history, selectedInput]);\n\n const buttons = useMemo(() => [\n {\n text: t('copy'),\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedInput),\n },\n {\n text: t('edit'),\n url: `/settings/input/edit/${selectedInput ? selectedInput.id : ''}`,\n className: 'orange',\n hidden: !(selectedInput),\n },\n {\n text: t('create_input'),\n url: '/settings/input/edit',\n className: 'green',\n },\n ], [t, onCopyClick, selectedInput]);\n\n const displayNameExtractor = useCallback((item: InputModel, column: ColumnModel) => {\n if (column.key === 'bridge_device_id') {\n return bridgeDeviceSet[item.bridge_device_id].name;\n }\n\n if (column.key === 'type_id') {\n return inputTypeSet[item.type_id].name;\n }\n\n return item[column.key]?.toString() || '-';\n }, [bridgeDeviceSet, inputTypeSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('input_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('device'),\n key: 'bridge_device_id',\n },\n {\n length: 2,\n name: t('type'),\n key: 'type_id',\n },\n {\n length: 1,\n name: t('input'),\n key: 'input_number',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useLocation, useParams} from 'react-router-dom';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useSelector} from 'react-redux';\nimport {\n CONTROL_TYPE_ID_ALARM,\n CONTROL_TYPE_ID_SIREN,\n CONTROL_TYPE_ID_THERMOSTAT,\n INPUT_TYPE_ID_SCENARIO,\n INPUT_TYPE_ID_SENSOR,\n InputModel,\n InputTypeModel, SensorTypeModel,\n} from '../../../../types/control';\nimport {SelectItem} from '../../../../components/Select';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {useMap} from '../../../../hooks/map';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/input';\n\ntype CONTROL_VALUE = {\n id: string;\n isVirtual: boolean;\n};\n\nexport const InputEditScreen = memo(function InputEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n const location = useLocation<{ controlId: string; bridgeDeviceId: string; inputTypeId: string; input: InputModel; }>();\n const previousLocationSelectedControl = useSelector(state => state.control.controlList.find(c => c.id === location?.state?.controlId));\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n\n const inputList = useSelector(state => state.control.inputList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const bridgeDeviceOptionList: SelectItem[] =\n useMemo(() => bridgeDeviceList\n .filter(bridgeDevice => (bridgeDeviceTypeSet[bridgeDevice.type_id]?.input_count || 0) > 0)\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\n .map(bridgeDevice => ({\n value: bridgeDevice,\n label: bridgeDevice.name,\n })), [bridgeDeviceList, bridgeDeviceTypeSet]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => location.state?.input || inputList.find(control => control.id === params?.id) || null, []);\n const [bridgeDevice, setBridgeDevice] = useState>(\n (selected == null ? (location?.state?.bridgeDeviceId == null ? null :\n bridgeDeviceOptionList.find(bridgeDeviceOption => bridgeDeviceOption.value.id === location?.state?.bridgeDeviceId) || null) :\n bridgeDeviceOptionList.find(bridgeDeviceOption => bridgeDeviceOption.value.id === selected.bridge_device_id)\n || null),\n );\n const bridgeDeviceType = useMemo(() => bridgeDevice == null ? null : bridgeDeviceTypeSet[bridgeDevice.value.type_id],\n [bridgeDevice, bridgeDeviceTypeSet]);\n const controlSet = useSetSelector(state => state.control.controlList);\n const inputTypeList = useSelector(state => state.control.inputTypeList);\n const inputTypeOptionList: SelectItem[] =\n useMemo(() => inputTypeList\n .map(inputType => ({\n value: inputType,\n label: inputType.name,\n })), [inputTypeList]);\n const [inputType, setInputType] = useState>(\n (selected == null ? (location?.state?.inputTypeId == null ? null :\n inputTypeOptionList.find(inputTypeOption => inputTypeOption.value.id === location.state.inputTypeId)\n || null) : inputTypeOptionList.find(inputTypeOption => inputTypeOption.value.id === selected.type_id)\n || null),\n );\n const sensorTypeOptionList: SelectItem[] = useMapSelector(\n state => state.control.sensorTypeList,\n sensorType => ({value: sensorType, label: sensorType.name}),\n []);\n const [sensorTypeOption, setSensorTypeOption] = useState>(\n (selected == null || selected.type_id !== INPUT_TYPE_ID_SENSOR ? null : (\n sensorTypeOptionList.find(sensorTypeOption => sensorTypeOption.value.id === selected.sensor_settings?.sensor_type_id)\n || null)\n ),\n );\n const isInputTypeSensor = useMemo(() => inputType?.value?.id === INPUT_TYPE_ID_SENSOR || false, [inputType]);\n const bridgeDeviceFilteredControlOptionList: SelectItem[] = useMap(\n useFilterSelector(\n state => state.control.controlList,\n control => control.bridge_device_id === bridgeDevice?.value.id &&\n control.type_id !== CONTROL_TYPE_ID_THERMOSTAT && (\n isInputTypeSensor ?\n control.type_id === CONTROL_TYPE_ID_ALARM :\n (control.type_id !== CONTROL_TYPE_ID_ALARM && control.type_id !== CONTROL_TYPE_ID_SIREN)\n ),\n [isInputTypeSensor, bridgeDevice?.value],\n ),\n controlModel => ({label: controlModel.name, value: {isVirtual: false, id: controlModel.id}}),\n []);\n const bridgeDeviceFilteredVirtualControlOptionList: SelectItem[] = useMap(\n useFilterSelector(\n state => state.control.virtualControlList,\n virtualControl => virtualControl.bridge_device_id === bridgeDevice?.value.id && (\n isInputTypeSensor ?\n controlSet[virtualControl.control_id]?.type_id === CONTROL_TYPE_ID_ALARM :\n (controlSet[virtualControl.control_id]?.type_id !== CONTROL_TYPE_ID_ALARM &&\n controlSet[virtualControl.control_id]?.type_id !== CONTROL_TYPE_ID_SIREN)\n ),\n [isInputTypeSensor, bridgeDevice?.value],\n ),\n virtualControl => ({\n label: controlSet[virtualControl.control_id]?.name || '',\n value: {isVirtual: true, id: virtualControl.id},\n }),\n [controlSet]);\n const controlOptionList: SelectItem[] = useMemo(() => [\n ...bridgeDeviceFilteredControlOptionList,\n ...bridgeDeviceFilteredVirtualControlOptionList,\n ], [bridgeDeviceFilteredControlOptionList, bridgeDeviceFilteredVirtualControlOptionList]);\n const inputNumberOptionList: SelectItem[] = useMemo(() => {\n const inputCount = bridgeDeviceType?.input_count || 0;\n if (inputCount === 0) {\n return [];\n }\n\n const list = [];\n for (let i = 0; i < inputCount; i++) {\n list.push({value: i, label: t('entrance') + ' ' + i.toString()});\n }\n\n return list;\n }, [t, bridgeDeviceType]);\n\n const [name, setName] = useState((selected?.id != null && selected?.name) || '');\n const [controlOption, setControlOption] = useState>(\n selected == null ? null : (\n selected?.is_virtual_control ?\n bridgeDeviceFilteredVirtualControlOptionList.find(option => option.value.id === selected?.relational_id) :\n bridgeDeviceFilteredControlOptionList.find(option => option.value.id === selected?.relational_id)\n ) || null,\n );\n const [inputNumber, setInputNumber] = useState>(\n (selected == null ? null : inputNumberOptionList.find(option => option.value === selected.input_number)\n || null),\n );\n const DIRECTION_OPTION_LIST = useMemo[]>(() => [\n {\n value: 0,\n label: t('close_stop'),\n },\n {\n value: 1,\n label: t('open_up'),\n },\n {\n value: 2,\n label: t('down'),\n },\n {\n value: 3,\n label: t('open_close'),\n },\n ], [t]);\n const [direction, setDirection] = useState>(\n (selected == null ? DIRECTION_OPTION_LIST[0] : DIRECTION_OPTION_LIST.find(option => option.value === selected.direction)\n || null),\n );\n const [outputReverse, setOutputReverse] = useState(selected?.should_output_reverse || false);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_input'), () => {\n return rpc.deleteInput(selected.id)\n .then(() => {\n success(t('input_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\n t,\n failure,\n onBackPressed,\n question,\n rpc,\n selected?.id,\n success,\n ]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_name'));\n\n return false;\n }\n\n if (bridgeDevice?.value == null) {\n failure(t('pls_select_device'));\n\n return false;\n }\n\n if (inputType?.value == null) {\n failure(t('pls_select_a_input_type'));\n\n return false;\n }\n\n if (inputNumber?.value == null) {\n failure(t('pls_select_a_input'));\n\n return false;\n }\n\n if (inputType.value.id !== INPUT_TYPE_ID_SCENARIO) {\n if (direction?.value == null) {\n failure(t('pls_select_a_direction'));\n\n return false;\n }\n\n if (controlOption?.value == null) {\n failure(t('pls_select_control'));\n\n return false;\n }\n\n if (inputType.value.id === INPUT_TYPE_ID_SENSOR) {\n if (sensorTypeOption?.value == null) {\n failure(t('pls_select_a_sensor_type'));\n\n return false;\n }\n }\n }\n\n return true;\n }, [\n t,\n failure,\n name,\n bridgeDevice,\n inputType,\n inputNumber,\n direction,\n controlOption,\n sensorTypeOption,\n ]);\n\n const onGoBackPressed = useCallback(() => {\n if (previousLocationSelectedControl?.id != null) {\n success(t('control_successfully_saved'));\n }\n\n onBackPressed();\n }, [t, previousLocationSelectedControl?.id, success, onBackPressed]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const input: InputModel = {\n id: selected?.id || null,\n is_active: true,\n name,\n bridge_device_id: bridgeDevice.value.id,\n type_id: inputType.value.id,\n direction: (inputType.value.id === INPUT_TYPE_ID_SCENARIO || inputType.value.id === INPUT_TYPE_ID_SENSOR) ? 1 : direction.value,\n is_virtual_control: controlOption?.value.isVirtual || false,\n relational_id: inputType.value.id === INPUT_TYPE_ID_SCENARIO ? null : controlOption?.value.id,\n should_output_reverse: outputReverse,\n input_number: inputNumber.value,\n sensor_settings: inputType.value.id !== INPUT_TYPE_ID_SENSOR ? null : {\n sensor_type_id: sensorTypeOption?.value?.id,\n },\n };\n\n return rpc.updateInput(input)\n .then(() => {\n const message = selected?.id != null ?\n t('input_successfully_edited') :\n previousLocationSelectedControl?.id == null ?\n t('input_successfully_saved') :\n t('control_and_input_successfully_saved');\n success(message);\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n rpc,\n success,\n failure,\n selected,\n previousLocationSelectedControl?.id,\n onBackPressed,\n name,\n bridgeDevice,\n inputType,\n direction,\n outputReverse,\n inputNumber,\n controlOption,\n sensorTypeOption,\n ]);\n\n const buttons = useMemo(() => [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected?.id),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n onClick: onGoBackPressed,\n },\n ], [\n t,\n onCreatePressed,\n onDeletePressed,\n selected,\n onGoBackPressed,\n ]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const setOutputReverseCheckbox = useCallback(() => {\n setOutputReverse(!outputReverse);\n }, [outputReverse]);\n\n useEffect(() => {\n setControlOption(controlOptionList.find(controlOptionItem => controlOptionItem.value === controlOption?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlOptionList]);\n\n useEffect(() => {\n setInputNumber(inputNumberOptionList.find(option => option.value === inputNumber?.value) || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputNumberOptionList]);\n\n useEffect(() => {\n if (previousLocationSelectedControl?.id != null) {\n setControlOption(controlOptionList.find(controlOption =>\n controlOption.value.id === previousLocationSelectedControl.id) || null);\n\n const nameSuffix = previousLocationSelectedControl.type_id === CONTROL_TYPE_ID_ALARM ?\n t('its_sensor') :\n t('its_key');\n setName(previousLocationSelectedControl.name + nameSuffix);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [t, previousLocationSelectedControl?.id]);\n\n return (\n \n \n
\n
\n \n \n \n {\n renderIf(inputType?.value?.id === INPUT_TYPE_ID_SENSOR)(() =>\n )\n }\n {\n renderIf(inputType?.value != null)(() =>\n <>\n {\n renderIf(inputType.value.id !== INPUT_TYPE_ID_SCENARIO)(() =>\n <>\n \n {\n renderIf(inputType.value.id !== INPUT_TYPE_ID_SENSOR)(() =>\n ,\n )\n }\n ,\n )\n }\n \n ,\n )\n }\n
\n
\n ,\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {InputListScreen} from './InputListScreen';\nimport {InputEditScreen} from './InputEditScreen';\n\nexport const InputSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/input/edit',\n component: InputEditScreen,\n },\n {\n routerLink: '/settings/input/edit/:id',\n component: InputEditScreen,\n },\n {\n routerLink: '/settings/input',\n component: InputListScreen,\n },\n];\n","import {useSelector} from 'react-redux';\n\nexport function useCurrentGateway() {\n const gatewayId = useSelector(state => state.settings.panel.id);\n return useSelector(state => state.control.gatewayList.find(g => g.id === gatewayId));\n}\n","import React, {memo, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {useOrientation} from '../../../hooks/orientation';\nimport {useCurrentGateway} from '../../../hooks/current-gateway';\nimport {hasAuthority} from '../../../utils/role';\nimport {Container} from '../../../components/Container';\nimport {UserRole} from '../../../types/control';\nimport {Link} from 'react-router-dom';\n\nimport './index.scss';\nimport {useLocalization} from \"../../../hooks/localization\";\n\nexport type Page = {\n icon: string;\n title: string;\n requiredRole: UserRole;\n routerLink: string;\n};\n\ntype Props = {\n getPages: (gatewayId: string) => Page[];\n baseRoute?: string;\n};\n\nconst MyButton = memo(function MyButton({icon, title, routerLink}: { icon?: string, title?: string, routerLink: string }) {\n const {t} = useLocalization();\n return (\n \n
\n \"\"/\n {t(title)}\n
\n \n );\n});\n\nexport const BaseSettingsScreenBase = memo(function BaseSettingsScreenBase({getPages, baseRoute}: Props) {\n const role = useSelector(state => state.ui.role);\n const orientation = useOrientation();\n const currentGateway = useCurrentGateway();\n const pages = useMemo(() => getPages(currentGateway?.id)\n .filter(page => hasAuthority(role, page.requiredRole)),\n [getPages, role, currentGateway?.id]);\n\n return (\n \n
\n
\n {\n pages.map(page => (\n \n ))\n }\n
\n
\n
\n );\n});\n","import React, {memo} from 'react';\nimport {BaseSettingsScreenBase, Page} from '../BaseSettingsScreen';\n\nimport iconDevices from '../../../assets/images/icons/settings/devices.png';\n\nconst getPages = (gatewayId: string): Page[] => [\n {\n icon: iconDevices,\n title: 'uart',\n requiredRole: 'developer',\n routerLink: '/uart',\n },\n {\n icon: iconDevices,\n title: 'door_brands',\n requiredRole: 'developer',\n routerLink: '/door-brand',\n },\n {\n icon: iconDevices,\n title: 'control_types',\n requiredRole: 'developer',\n routerLink: '/control-type',\n },\n {\n icon: iconDevices,\n title: 'device_types',\n requiredRole: 'developer',\n routerLink: '/bridge-device-type',\n },\n {\n icon: iconDevices,\n title: 'input_types',\n requiredRole: 'developer',\n routerLink: '/input-type',\n },\n {\n icon: iconDevices,\n title: 'camera_brands',\n requiredRole: 'developer',\n routerLink: '/camera-brand',\n },\n {\n icon: iconDevices,\n title: 'push_token',\n requiredRole: 'developer',\n routerLink: '/users/edit-push-token',\n },\n {\n icon: iconDevices,\n title: 'test_2',\n requiredRole: 'developer',\n routerLink: '/test',\n },\n];\n\nexport const DeveloperSettingsScreen = memo(function DeveloperSettingsScreen() {\n return (\n \n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {useSelector} from 'react-redux';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ControlTypeModel} from '../../../../types/control';\nimport {DEVELOPER_URL} from '../../index';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: ControlTypeModel) => item.id;\n\nexport const ControlTypeListScreen = memo(function ControlTypeListScreen() {\n const {t} = useLocalization()\n const controlTypeList = useSelector(state => state.control.controlTypeList);\n\n const [selectedControlType, setSelectedControlType] = useState>(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/developer/control-type/edit/${selectedControlType ? selectedControlType.id : ''}`,\n className: 'orange',\n hidden: !(selectedControlType),\n },\n // {\n // text: 'Kontrol Tip OLUŞTUR',\n // url: '/developer/control-type/edit',\n // className: 'green',\n // },\n ], [t, selectedControlType]);\n\n const displayNameExtractor = useCallback((item: ControlTypeModel, column: ColumnModel) => {\n if (column.key === 'bridge_device_type_count') {\n return item.allowed_bridge_device_type_id_list.length.toString();\n }\n\n if (column.key === 'show_on_homepage') {\n return item.show_on_homepage ? t('yes') : t('no');\n }\n\n return item[column.key] || '-';\n }, [t]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('control_type_name'),\n key: 'name',\n },\n {\n length: 2,\n name: t('render_type'),\n key: 'render_type',\n },\n {\n length: 2,\n name: t('see_on_homepage'),\n key: 'show_on_homepage',\n },\n {\n length: 2,\n name: t('control_count'),\n key: 'bridge_device_type_count',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {ControlTypeModel} from '../../../../types/control';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {useTranslation} from \"react-i18next\";\n\nconst BACK_URL = '/developer/control-type';\n\nexport const ControlTypeEditScreen = memo(function ControlTypeEditScreen() {\n const {t} = useTranslation();\n const params = useParams<{ id: string }>();\n // const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const bridgeDeviceTypeOptionList: SelectItem[] = useMapSelector(\n state => state.control.bridgeDeviceTypeList,\n bridgeDeviceType => ({\n label: bridgeDeviceType.name + (bridgeDeviceType.is_io_device ? ' [I]' : ' [G]'),\n value: bridgeDeviceType.id,\n }),\n [],\n );\n//sendpacket-255-18-14-44-0-39-0-16-87-65-89-48-56-56-32-76-13-15\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => controlTypeSet[params?.id] || null, []);\n const GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST = useMemo[]>(() => [\n {\n label: t('no_icon'),\n value: -1,\n },\n {\n label: t('blinds'),\n value: 0,\n },\n {\n label: t('combi_boiler'),\n value: 1,\n },\n {\n label: t('dimmer'),\n value: 2,\n },\n {\n label: t('air_cond_energy'),\n value: 3,\n },\n {\n label: t('light'),\n value: 7,\n },\n {\n label: t('plug'),\n value: 8,\n },\n {\n label: t('irrigation'),\n value: 9,\n },\n {\n label: t('contactor'),\n value: 12,\n },\n {\n label: t('water_valve'),\n value: 13,\n },\n {\n label: t('gas_valve'),\n value: 32,\n },\n ], [t]);\n\n const [name, setName] = useState(selected?.name || '');\n const [showOnScenario, setShowOnScenario] = useState(selected?.show_on_scenario || false);\n const [showOnHomepage, setShowOnHomepage] = useState(selected?.show_on_homepage || false);\n const [askValueInInitialize, setAskValueInInitialize] = useState(selected?.ask_value_in_initialize || false);\n const [glassDeviceInternalIconId, setGlassDeviceInternalIconId] = useState>(\n (selected == null ? GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST[0] :\n GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST.find(option => option.value === selected.glass_device_internal_icon_id)\n || null),\n );\n const [allowedBridgeDeviceTypeIdList, setAllowedBridgeDeviceTypeIdList] = useState[]>(\n (selected == null ? [] : bridgeDeviceTypeOptionList.filter(option => selected.allowed_bridge_device_type_id_list.indexOf(option.value) !== -1)),\n );\n\n const setShowOnScenarioCheckbox = useCallback(() => {\n setShowOnScenario(showOnScenario => !showOnScenario);\n }, []);\n\n const setShowOnHomepageCheckbox = useCallback(() => {\n setShowOnHomepage(showOnHomepage => !showOnHomepage);\n }, []);\n\n const setAskValueInInitializeCheckbox = useCallback(() => {\n setAskValueInInitialize(askValueInInitialize => !askValueInInitialize);\n }, []);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n // const onDeletePressed = useCallback(() => {\n // question('Kontrol tipi silmek istediğinizden emin misiniz?', () => {\n // rpc.deleteControlType(selected.id)\n // .then(() => {\n // success('Kontrol tipi başarılı bir şekilde silindi.');\n // onBackPressed();\n // })\n // .catch(failure);\n // });\n // }, [question, failure, rpc, success, onBackPressed, selected?.id]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_name'));\n\n return false;\n }\n\n if (glassDeviceInternalIconId.value == null) {\n failure(t('pls_select_glass_device_icon'));\n\n return false;\n }\n\n return true;\n }, [\n t,\n failure,\n name,\n glassDeviceInternalIconId,\n ]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const controlTypeModel: ControlTypeModel = {\n ...selected,\n id: selected?.id || null,\n name,\n show_on_scenario: showOnScenario,\n show_on_homepage: showOnHomepage,\n ask_value_in_initialize: askValueInInitialize,\n glass_device_internal_icon_id: glassDeviceInternalIconId?.value,\n allowed_bridge_device_type_id_list: allowedBridgeDeviceTypeIdList.map(option => option.value),\n };\n\n return rpc.updateControlType(controlTypeModel)\n .then(() => {\n success(t(selected == null ? 'control_type_successfully_saved' : 'control_type_successfully_edited'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n rpc,\n success,\n failure,\n selected,\n onBackPressed,\n name,\n showOnScenario,\n showOnHomepage,\n askValueInInitialize,\n glassDeviceInternalIconId,\n allowedBridgeDeviceTypeIdList,\n ]);\n\n const buttons = useMemo(() => [\n // {\n // text: 'SİL',\n // className: 'mulberry-wood',\n // onClick: onDeletePressed,\n // hidden: !(selected?.id != null),\n // },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed /*onDeletePressed, selected*/]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n return (\n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {ControlTypeListScreen} from './ControlTypeListScreen';\nimport {ControlTypeEditScreen} from './ControlTypeEditScreen';\n\nexport const ControlTypeSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/developer/control-type',\n component: ControlTypeListScreen,\n },\n {\n routerLink: '/developer/control-type/edit',\n component: ControlTypeEditScreen,\n },\n {\n routerLink: '/developer/control-type/edit/:id',\n component: ControlTypeEditScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {DEVELOPER_URL} from '../../index';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {useSelector} from 'react-redux';\nimport {BridgeDeviceTypeModel} from '../../../../types/bridge-device-type';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: BridgeDeviceTypeModel) => item.id;\n\nexport const BridgeDeviceTypeListScreen = memo(function BridgeDeviceTypeListScreen() {\n const {t} = useLocalization();\n const bridgeDeviceTypeList = useSelector(state => state.control.bridgeDeviceTypeList);\n\n const [selectedControl, setSelectedControl] = useState(null);\n\n const displayNameExtractor = useCallback((item: BridgeDeviceTypeModel, column: ColumnModel) => {\n if (column.key === 'is_io') {\n return item.is_io_device ? 'IO' : 'Cam';\n }\n\n if (column.key === 'is_media') {\n return item.is_media_device ? t('yes') : t('no');\n }\n\n return item[column.key];\n }, [t]);\n\n const columns = useMemo(() => [\n {\n length: 2,\n name: t('device_type_name'),\n key: 'name',\n },\n {\n length: 1,\n name: t('is_media'),\n key: 'is_media',\n },\n {\n length: 1,\n name: t('io/cam'),\n key: 'is_io',\n },\n {\n length: 1,\n name: t('entry_count'),\n key: 'input_count',\n },\n {\n length: 1,\n name: t('output_count'),\n key: 'output_count',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {BridgeDeviceTypeListScreen} from './BridgeDeviceTypeListScreen';\n\nexport const BridgeDeviceTypeSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/developer/bridge-device-type',\n component: BridgeDeviceTypeListScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {DEVELOPER_URL} from '../../index';\nimport {SettingsList, ColumnModel} from '../../../../components/Settings/SettingsList';\nimport {CameraBrandModel} from '../../../../types/control';\nimport {useSelector} from 'react-redux';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: CameraBrandModel) => item.id;\n\nexport const CameraBrandListScreen = memo(function CameraBrandListScreen() {\n const {t} = useLocalization();\n const cameraBrandList = useSelector(state => state.control.cameraBrandList);\n\n const [selected, setSelected] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/developer/camera-brand/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: t('create_camera_brand'),\n url: '/developer/camera-brand/edit',\n className: 'green',\n },\n ], [t, selected]);\n\n const displayNameExtractor = useCallback((item: CameraBrandModel, column: ColumnModel) => {\n return item[column.key] || '-';\n }, []);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('camera_brand_name'),\n key: 'name',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {CameraBrandModel} from '../../../../types/control';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useSelector} from 'react-redux';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {SettingCheckBoxComponent} from '../../../../components/Settings/SettingCheckboxComponent';\nimport {isValidString} from '../../../../utils/validation';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/developer/camera-brand';\n\nexport const CameraBrandEditScreen = memo(function CameraBrandEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n // const question = useQuestion();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n\n const cameraBrandList = useSelector(state => state.control.cameraBrandList);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const selected = useMemo(() => cameraBrandList.find(cameraBrand => cameraBrand.id === params?.id) || null, []);\n\n const [name, setName] = useState(selected?.name || '');\n const [isUSB, setIsUSB] = useState(selected?.is_usb || false);\n const [authenticationRequired, setAuthenticationRequired] = useState(selected?.authentication_required || false);\n\n const setAuthenticationRequiredCheckbox = useCallback(() => {\n setAuthenticationRequired(required => !required);\n }, []);\n\n const [hasRTSP, setHasRTSP] = useState(selected?.rtsp != null);\n const [rtsp720p, setRTSP720p] = useState((selected?.rtsp?.stream?.q_720p) || '');\n const [rtsp360p, setRTSP360p] = useState((selected?.rtsp?.stream?.q_360p) || '');\n\n const setHasRTSPCheckbox = useCallback(() => {\n setHasRTSP(hasRTSP => !hasRTSP);\n }, []);\n\n const [hasVideoCGI, setHasVideoCGI] = useState(selected?.video_cgi != null);\n const [videoCGI720p, setVideoCGI720p] = useState((selected?.video_cgi?.stream?.q_720p) || '');\n const [videoCGI360p, setVideoCGI360p] = useState((selected?.video_cgi?.stream?.q_360p) || '');\n\n const setHasVideoCGICheckbox = useCallback(() => {\n setHasVideoCGI(hasVideoCGI => !hasVideoCGI);\n }, []);\n\n const [hasMJPEG, setHasMJPEG] = useState(selected?.mjpeg != null);\n const [mjpeg720p, setMJPEG720p] = useState((selected?.mjpeg?.stream?.q_720p) || '');\n const [mjpeg360p, setMJPEG360p] = useState((selected?.mjpeg?.stream?.q_360p) || '');\n const [mjpegDelayMS, setMJPEGDelayMS] = useState((selected?.mjpeg?.delay_ms?.toString()) || '250');\n\n const setHasMJPEGCheckbox = useCallback(() => {\n setHasMJPEG(hasMJPEG => !hasMJPEG);\n }, []);\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const setIsUSBCheckbox = useCallback(() => {\n setIsUSB(isUSB => !isUSB);\n }, []);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_name'));\n\n return false;\n }\n\n if (isUSB) {\n return true;\n }\n\n if (!hasRTSP && !hasVideoCGI && !hasMJPEG) {\n failure(t('pls_select_at_least_one_supported_type'));\n\n return false;\n }\n\n if (hasRTSP) {\n if (!isValidString(rtsp720p) && !isValidString(rtsp360p)) {\n failure(t('pls_enter_at_least_one_rtsp_stream'));\n\n return false;\n }\n }\n\n if (hasVideoCGI) {\n if (!isValidString(videoCGI720p) && !isValidString(videoCGI360p)) {\n failure(t('pls_enter_at_least_one_video_cqi_stream'));\n\n return false;\n }\n }\n\n if (hasMJPEG) {\n if (!isValidString(mjpeg720p) && !isValidString(mjpeg360p)) {\n failure(t('pls_enter_at_least_one_mjpeg_stream'));\n\n return false;\n }\n\n const delayMS = parseInt(mjpegDelayMS);\n if (delayMS < 100) {\n failure(t('delay_cannot_be_shorter_than_100ms'));\n\n return false;\n }\n }\n\n return true;\n }, [t, failure, hasMJPEG, hasRTSP, hasVideoCGI, isUSB, mjpeg360p, mjpeg720p, mjpegDelayMS, name, rtsp360p, rtsp720p, videoCGI360p, videoCGI720p]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const cameraBrandModel: CameraBrandModel = {\n id: selected?.id || null,\n name,\n is_usb: isUSB,\n authentication_required:authenticationRequired || false,\n };\n\n if (!isUSB) {\n if (hasRTSP) {\n cameraBrandModel.rtsp = {\n stream: {\n q_720p: rtsp720p || '',\n q_360p: rtsp360p || '',\n },\n };\n }\n\n if (hasVideoCGI) {\n cameraBrandModel.video_cgi = {\n stream: {\n q_720p: videoCGI720p || '',\n q_360p: videoCGI360p || '',\n },\n };\n }\n\n if (hasMJPEG) {\n cameraBrandModel.mjpeg = {\n stream: {\n q_720p: mjpeg720p || '',\n q_360p: mjpeg360p || '',\n },\n delay_ms: parseInt(mjpegDelayMS) || 250,\n };\n }\n }\n\n return rpc.updateCameraBrand(cameraBrandModel)\n .then(() => {\n success(t(selected?.id == null ? 'camera_brand_successfully_saved' : 'camera_brand_successfully_edited'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n isFieldsValid,\n selected?.id,\n name,\n isUSB,\n rpc,\n failure,\n hasRTSP,\n hasVideoCGI,\n hasMJPEG,\n authenticationRequired,\n rtsp720p,\n rtsp360p,\n videoCGI720p,\n videoCGI360p,\n mjpeg720p,\n mjpeg360p,\n mjpegDelayMS,\n success,\n onBackPressed,\n ]);\n\n const buttons = useMemo(() => [\n // {\n // text: 'SÄ°L',\n // className: 'mulberry-wood',\n // onClick: onDeletePressed,\n // hidden: !(selected?.id != null),\n // },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onCreatePressed/*, onDeletePressed, selected*/]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n return (\n \n \n
\n
\n \n \n \n {\n renderIf(!isUSB)(() => (\n <>\n
\n RTSP\n
\n \n {\n renderIf(hasRTSP)(() => (\n <>\n \n \n \n ))\n }\n \n ))\n }\n
\n
\n {\n renderIf(!isUSB)(() => (\n <>\n
\n VideoCGI\n
\n \n {\n renderIf(hasVideoCGI)(() => (\n <>\n \n \n \n ))\n }\n
\n MJPEG\n
\n \n {\n renderIf(hasMJPEG)(() => (\n <>\n \n \n \n \n ))\n }\n \n ))\n }\n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {CameraBrandListScreen} from './CameraBrandListScreen';\nimport {CameraBrandEditScreen} from './CameraBrandEditScreen';\n\nexport const CameraBrandSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/developer/camera-brand/edit',\n component: CameraBrandEditScreen,\n },\n {\n routerLink: '/developer/camera-brand/edit/:id',\n component: CameraBrandEditScreen,\n },\n {\n routerLink: '/developer/camera-brand',\n component: CameraBrandListScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {InputTypeModel} from '../../../../types/control';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {DEVELOPER_URL} from '../../index';\nimport {useSelector} from 'react-redux';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: InputTypeModel) => item.id;\n\nexport const InputTypeListScreen = memo(function InputType() {\n const {t} = useLocalization();\n const inputTypeList = useSelector(state => state.control.inputTypeList);\n\n const [selected, setSelected] = useState(null);\n\n const displayNameExtractor = useCallback((item: InputTypeModel, column: ColumnModel) => {\n return item[column.key] || '-';\n }, []);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('input_type_name'),\n key: 'name',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {InputTypeListScreen} from './InputTypeListScreen';\n\nexport const InputTypeSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/developer/input-type',\n component: InputTypeListScreen,\n },\n];\n","import React, {memo, useCallback} from 'react';\nimport {PasswordContainer} from '../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../components/Settings/SettingsPageContainer';\nimport {DEVELOPER_URL} from '../index';\nimport {onClickHandler} from '../../../utils/onclick';\nimport {useRPC} from '../../../hooks/rpc';\nimport {useMessage} from '../../../hooks/message';\n\nimport './index.scss';\n\nexport const TestScreen = memo(function TestScreen() {\n const [rpc] = useRPC();\n const {success, failure} = useMessage();\n\n const click = useCallback(() => {\n rpc.test()\n .then(() => {\n success('');\n })\n .catch(failure);\n }, [\n rpc,\n failure,\n success,\n ]);\n\n return (\n \n \n
\n
\n
\n CLICK ME!\n
\n
\n
\n\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {ServerSettingsScreen} from './ServerSettingsScreen';\n\nexport const ServerSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/server',\n component: ServerSettingsScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory} from 'react-router-dom';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useMessage} from '../../../../hooks/message';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {useSelector} from 'react-redux';\nimport {useLocalization} from '../../../../hooks/localization';\nimport {GatewayInfoModel} from '../../../../types/control';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\n\nconst BACK_URL = '/settings';\n\nexport const ServerSettingsScreen = memo(function ServerSettingsScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [gatewayList, setGatewayList] = useState(null);\n const [selectedGateway, setSelectedGateway] = useState>(null);\n\n const gatewaySelectOptionList = useMemo[]>(() => {\n let output;\n if (gatewayList == null) {\n output = [];\n } else {\n output = gatewayList.map(gateway => ({\n value: gateway,\n label: gateway.name,\n }));\n }\n\n output.push({\n value: {id: '', name: t('create_new_gateway')},\n label: t('create_new_gateway'),\n });\n\n return output;\n }, [gatewayList, t]);\n\n const connectionAddress = useSelector(state => state.settings.panel.supervisor_connection_address);\n const MACHINE_OPTIONS: SelectItem[] = useMemo(() => [\n {\n label: t('this_machine'),\n value: true,\n },\n {\n label: t('other_machine'),\n value: false,\n },\n ], [t]);\n const connectedItem = useMemo(() => {\n if (/localhost/.test(connectionAddress) || /127\\.0\\.0\\.1/.test(connectionAddress)) {\n return MACHINE_OPTIONS.find(a => a.value).label;\n } else {\n return connectionAddress;\n }\n }, [MACHINE_OPTIONS, connectionAddress]);\n\n const [connectToLocalhost, setConnectToLocalhost] = useState>(null);\n const [address, setAddress] = useState('');\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (connectToLocalhost == null) {\n failure(t('pls_select_device_to_connect'));\n\n return false;\n }\n\n if (!connectToLocalhost.value) {\n if (gatewayList != null && selectedGateway == null) {\n failure(t('pls_select_a_valid_gateway'));\n return false;\n }\n\n if (/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(address) !== true) {\n failure(t('pls_enter_a_valid_ip_address'));\n\n return false;\n }\n\n if (username == null || username.length === 0) {\n failure(t('pls_enter_username'));\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure(t('pls_enter_password'));\n\n return false;\n }\n }\n\n return true;\n }, [t, gatewayList, selectedGateway, address, failure, username, password, connectToLocalhost]);\n\n const onConnectClick = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n if (!connectToLocalhost.value) {\n if (gatewayList == null) {\n rpc.beforeConnectToMachine(address, username, password).then(data => setGatewayList(data.data));\n return;\n }\n }\n\n (connectToLocalhost.value ? rpc.connectToLocalMachine() : rpc.connectToMachine(address, username, password, selectedGateway.value.id))\n .then(() => {\n success(t('operation_is_in_progress'));\n })\n .catch(failure);\n }, [t, gatewayList, isFieldsValid, connectToLocalhost?.value, success, rpc, address, username, password, failure, selectedGateway]);\n\n const buttons = useMemo(() => [\n {\n text: t('cancel'),\n className: 'red',\n onClick: onBackPressed,\n },\n {\n text: t('connect'),\n onClick: onConnectClick,\n className: 'green',\n },\n ], [t, onConnectClick, onBackPressed]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n return (\n \n \n
\n
\n \n \n {\n renderIf(connectToLocalhost?.value === false)(() =>\n <>\n \n \n \n {\n renderIf(gatewayList != null)(() => (\n \n ))\n }\n ,\n )\n }\n
\n
\n\n
\n
\n \n {\n renderKeyboard()\n }\n \n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {SetDateTimeScreen} from './SetDateTimeScreen';\n\nexport const SetDateTimeRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/set-date-time',\n component: SetDateTimeScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useMessage} from '../../../../hooks/message';\nimport {useHistory} from 'react-router-dom';\n\nimport './index.scss';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings';\n\nexport const SetDateTimeScreen = memo(function SetDateTimeScreen() {\n const {t} = useLocalization();\n const [rpc] = useRPC();\n const {success, failure} = useMessage();\n const history = useHistory();\n\n const [pickedDateString, setPickedDateString] = useState('');\n const [pickedTimeString, setPickedTimeString] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onSavePressed = useCallback(() => {\n if (pickedDateString === '') {\n failure(t('pls_enter_a_valid_date'));\n\n return;\n }\n\n const pickedDate = new Date(pickedDateString);\n if (!(pickedDate instanceof Date) || isNaN(pickedDate as unknown as number)) {\n failure(t('pls_enter_a_valid_date'));\n\n return;\n }\n\n if (pickedTimeString === '') {\n failure(t('pls_enter_a_valid_time'));\n\n return;\n }\n\n const offset = -pickedDate.getTimezoneOffset();\n const dateUTC = pickedDate.getTime() / 1000 - (offset * 60);\n const [pickedHourString, pickedMinuteString] = pickedTimeString.split(':');\n const calculatedTime = Number(pickedHourString) * 60 * 60 + Number(pickedMinuteString) * 60;\n rpc.updateTimeAndWeather(dateUTC + calculatedTime, offset)\n .then(() => {\n success(t('successfully_saved'));\n onBackPressed();\n }).catch(failure);\n }, [t, pickedDateString, pickedTimeString, rpc, onBackPressed, failure, success]);\n\n const buttons = useMemo(() => [\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onSavePressed]);\n\n return (\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n );\n});\n","import {PasswordContainer} from '../../../../components/PasswordContainer';\nimport React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {MenuEntity} from '../../../../store/control/state';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSelector} from 'react-redux';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useMessage} from '../../../../hooks/message';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport temperatureIcon from '../../../../assets/images/icons/temperature.png';\nimport contactorIcon from '../../../../assets/images/icons/contactor.png';\nimport cameraIcon from '../../../../assets/images/icons/camera.png';\nimport airConditionerIcon from '../../../../assets/images/icons/airConditioner.png';\nimport plugIcon from '../../../../assets/images/icons/controls/plug-close-2.png';\nimport lampIcon from '../../../../assets/images/icons/lamp.png';\nimport curtainIcon from '../../../../assets/images/icons/curtain.png';\nimport sensorIcon from '../../../../assets/images/icons/sensor.png';\nimport alarmIcon from '../../../../assets/images/icons/alarm.png';\nimport conciergeIcon from '../../../../assets/images/icons/concierge.png';\nimport mediaIcon from '../../../../assets/images/icons/media.png';\nimport scenarioIcon from '../../../../assets/images/icons/scenario.png';\nimport intercomIcon from '../../../../assets/images/icons/intercom.png';\nimport settingsIcon from '../../../../assets/images/icons/settings.png';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst BACK_URL = '/settings/left-menu';\n\ntype Icon = {\n name: string;\n iconUrl: string;\n canSpecial?: boolean;\n}\n\nexport const leftMenuIconList = [\n {\n label: 'intercom',\n value: {\n name: 'intercom',\n iconUrl: intercomIcon,\n canSpecial: true,\n },\n },\n {\n label: 'scenario',\n value: {\n name: 'scenario',\n iconUrl: scenarioIcon,\n },\n },\n {\n label: 'media',\n value: {\n name: 'media',\n iconUrl: mediaIcon,\n },\n },\n {\n label: 'alarm',\n value: {\n name: 'alarm',\n iconUrl: alarmIcon,\n canSpecial: true,\n },\n },\n {\n label: 'concierge',\n value: {\n name: 'concierge',\n iconUrl: conciergeIcon,\n canSpecial: true,\n },\n },\n {\n label: 'sensor',\n value: {\n name: 'sensor',\n iconUrl: sensorIcon,\n },\n },\n {\n label: 'curtain',\n value: {\n name: 'curtain',\n iconUrl: curtainIcon,\n },\n },\n {\n label: 'lamp',\n value: {\n name: 'lamp',\n iconUrl: lampIcon,\n },\n },\n {\n label: 'plug',\n value: {\n name: 'plug',\n iconUrl: plugIcon,\n },\n },\n {\n label: 'air_conditioning',\n value: {\n name: 'airConditioner',\n iconUrl: airConditionerIcon,\n },\n },\n {\n label: 'camera',\n value: {\n name: 'camera',\n iconUrl: cameraIcon,\n canSpecial: true,\n },\n },\n {\n label: 'contactor',\n value: {\n name: 'contactor',\n iconUrl: contactorIcon,\n },\n },\n {\n label: 'heating',\n value: {\n name: 'temperature',\n iconUrl: temperatureIcon,\n },\n },\n {\n label: 'settings_2',\n value: {\n name: 'settings',\n iconUrl: settingsIcon,\n canSpecial: true,\n },\n },\n];\n\nexport const LeftMenuEditScreen = memo(function LeftMenuEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [rpc] = useRPC();\n const question = useQuestion();\n const {success, failure} = useMessage();\n const history = useHistory();\n\n const menuList = useSelector(state => state.control.menuList);\n const [selectedMenuItem, setSelectedMenuItem] = useState(null);\n\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [menuItemName, setMenuItemName] = useState('');\n const [menuIcon, setMenuIcon] = useState>(null);\n const order = menuList.length === 0 ? 0 : menuList.sort((a, b) => b.order - a.order)[0].order + 1;\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_menu'), () => {\n return rpc.deleteMenu(selectedMenuItem.id)\n .then(() => {\n success(t('menu_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, failure, onBackPressed, question, rpc, selectedMenuItem, success]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (menuItemName == null || menuItemName.length === 0 || menuItemName.length > 30) {\n failure(t('pls_enter_a_valid_name'));\n\n return false;\n }\n\n if (menuIcon == null) {\n failure(t('pls_select_a_icon'));\n\n return false;\n }\n\n return true;\n }, [t, failure, menuItemName, menuIcon]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const menuEntity: MenuEntity = {\n id: selectedMenuItem != null ? selectedMenuItem.id : null,\n icon: menuIcon.value.name,\n name: menuItemName,\n order: selectedMenuItem != null ? selectedMenuItem.order : order,\n content_list: selectedMenuItem?.content_list || [],\n is_special: selectedMenuItem?.is_special || false,\n };\n\n return rpc.updateMenu(menuEntity)\n .then(() => {\n success(t(menuEntity.id == null ? 'menu_successfully_created' : 'menu_successfully_edited'));\n onBackPressed();\n }).catch(failure);\n }, [t, isFieldsValid, menuIcon?.value?.name, selectedMenuItem, menuItemName, order, rpc, failure, success, onBackPressed]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selectedMenuItem) || selectedMenuItem.is_special,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n },\n ], [t, onDeletePressed, onSavePressed, selectedMenuItem],\n );\n\n const translatedLeftMenuIconList = useMemo(() => leftMenuIconList.map(icon => ({...icon, label: t(icon.label)})), [t]);\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const item = menuList.find((menuItem) => menuItem.id === params.id);\n\n if (item === null) {\n return;\n }\n\n const icon = translatedLeftMenuIconList.find((icon) => icon.value.name === item.icon);\n\n setSelectedMenuItem(item);\n setMenuItemName(item.name);\n setMenuIcon(icon || null);\n }, [menuList, params.id, translatedLeftMenuIconList]);\n\n return (\n \n \n
\n
\n \n {\n renderIf(!selectedMenuItem?.is_special)(() => (\n \n ))\n }\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n});\n","import React, {memo, MouseEvent, PropsWithChildren, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {MenuEntity} from '../../../../store/control/state';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport iconUpArrow from '../../../../assets/images/icons/scenario/up-arrow.png';\nimport iconDownArrow from '../../../../assets/images/icons/scenario/down-arrow.png';\nimport {useSortBySelector} from '../../../../hooks/sort-by-selector';\nimport './index.scss';\nimport {leftMenuIconList} from '../LeftMenuEditScreen';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: MenuEntity) => item.id;\n\ntype UpDownProps = {\n index: number;\n onUpClick?: (index: number) => void;\n onDownClick?: (index: number) => void;\n};\n\nconst UpDown = memo(function UpDown({onUpClick: onUpClickProp, onDownClick: onDownClickProp, index}: UpDownProps) {\n const onUpClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onUpClickProp(index);\n }, [onUpClickProp, index]);\n\n const onDownClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onDownClickProp(index);\n }, [onDownClickProp, index]);\n\n return (\n
\n {\n renderIf(onUpClickProp)(() =>\n
\n \n
,\n () =>
,\n )\n }\n {\n renderIf(onDownClickProp)(() =>\n
\n \n
,\n )\n }\n
\n );\n});\n\ntype MenuElementIconProps = {\n icon: string;\n}\n\nconst MenuElementIcon = memo(function MenuElementIcon({icon}: MenuElementIconProps) {\n return (\n
\n \n
\n );\n },\n);\n\nconst ColorfulText = memo(function (props: PropsWithChildren<{}>) {\n return (\n {props.children}\n );\n});\n\nexport const LeftMenuListScreen = memo(function HomepageListScreen() {\n const {t} = useLocalization();\n const menuItemList = useSortBySelector(state => state.control.menuList, a => a.order);\n const [rpc] = useRPC();\n\n const [selectedMenuItem, setSelectedMenuItem] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit_content'),\n url: `/settings/left-menu/${selectedMenuItem ? selectedMenuItem.id : ''}/contents/`,\n className: 'blue',\n hidden: !selectedMenuItem || selectedMenuItem.is_special,\n },\n {\n text: t('edit'),\n url: `/settings/left-menu/edit/${selectedMenuItem ? selectedMenuItem.id : ''}`,\n className: 'orange',\n hidden: !(selectedMenuItem),\n },\n {\n text: t('add'),\n url: '/settings/left-menu/edit/',\n className: 'green',\n },\n ], [t, selectedMenuItem]);\n\n const swapItemOrders = useCallback((itemA: MenuEntity, itemB: MenuEntity) => {\n Promise.all([\n rpc.updateMenu({...itemA, order: itemB.order}),\n rpc.updateMenu({...itemB, order: itemA.order}),\n ]).then(() => setSelectedMenuItem(null));\n }, [rpc]);\n\n const onUpClick = useCallback((index: number) => {\n swapItemOrders(menuItemList[index - 1], menuItemList[index]);\n }, [swapItemOrders, menuItemList]);\n\n const onDownClick = useCallback((index: number) => {\n swapItemOrders(menuItemList[index + 1], menuItemList[index]);\n }, [swapItemOrders, menuItemList]);\n\n const translatedLeftMenuIconList = useMemo(() => leftMenuIconList.map(icon => ({...icon, label: t(icon.label)})), [t]);\n\n const displayNameExtractor = useCallback((item: MenuEntity, column: ColumnModel, index?: number) => {\n if (column.key === 'order') {\n return ;\n }\n if (column.key === 'icon') {\n const icon = translatedLeftMenuIconList.find((i) => i.value.name === item.icon) || null;\n return icon ? : '-';\n }\n\n if (column.key === 'name') {\n if (item.is_special) {\n return (\n {item.name}\n );\n }\n }\n\n return item[column.key] || '-';\n }, [onUpClick, menuItemList.length, onDownClick, translatedLeftMenuIconList]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('name'),\n key: 'name',\n },\n {\n length: 1,\n name: t('icon'),\n key: 'icon',\n },\n {\n length: 3,\n name: t('order'),\n key: 'order',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, MouseEvent, useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {\n MenuContent,\n MenuEntity,\n} from '../../../../store/control/state';\nimport {useSelector} from 'react-redux';\nimport {useParams} from 'react-router-dom';\nimport {onClickHandler} from '../../../../utils/onclick';\nimport iconUpArrow from '../../../../assets/images/icons/scenario/up-arrow.png';\nimport iconDownArrow from '../../../../assets/images/icons/scenario/down-arrow.png';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: MenuContent) => item.type + (item.relational_id ? item.relational_id : '');\n\ntype UpDownProps = {\n index: number;\n onUpClick?: (index: number) => void;\n onDownClick?: (index: number) => void;\n};\n\nconst UpDown = memo(function UpDown({onUpClick: onUpClickProp, onDownClick: onDownClickProp, index}: UpDownProps) {\n const onUpClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onUpClickProp(index);\n }, [onUpClickProp, index]);\n\n const onDownClick = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n onDownClickProp(index);\n }, [onDownClickProp, index]);\n\n return (\n
\n {\n renderIf(onUpClickProp)(() =>\n
\n \n
,\n () =>
,\n )\n }\n {\n renderIf(onDownClickProp)(() =>\n
\n \n
,\n )\n }\n
\n );\n});\n\nexport const ContentListScreen = memo(function ContentListScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n\n const [rpc] = useRPC();\n\n const [selectedContent, setSelectedContent] = useState(null);\n const menuList = useSelector(state => state.control.menuList);\n const selectedMenuItem = useMemo(() => menuList.find((item) => item.id === params.id), [menuList, params.id]);\n const contentListSorted = useMemo(() => selectedMenuItem?.content_list?.sort((a, b) => a.order - b.order) || [], [selectedMenuItem?.content_list]);\n\n const controlTypes = useSelector(state => state.control.controlTypeList);\n const controlTypeOptionList =\n useMemo(() => controlTypes\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\n .map(controlType => ({\n value: controlType.id,\n label: controlType.name,\n })), [controlTypes]);\n\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/left-menu/${params.id}/contents/edit/${selectedContent ? selectedContent.type : ''}/${selectedContent ? selectedContent?.relational_id : ''}`,\n className: 'orange',\n hidden: !(selectedContent),\n },\n {\n text: t('add'),\n url: `/settings/left-menu/${params.id}/contents/edit/`,\n className: 'green',\n },\n ], [t, params.id, selectedContent]);\n\n const swapItemOrders = useCallback((itemA: MenuContent, itemB: MenuContent) => {\n const tempAOrder = itemA.order;\n const tempBOrder = itemB.order;\n const newContents: MenuContent[] = contentListSorted.map((item) => {\n if (itemA.type === item.type && (item.relational_id ? itemA.relational_id === item.relational_id : true)) {\n item.order = tempBOrder;\n }\n if (itemB.type === item.type && (item.relational_id ? itemB.relational_id === item.relational_id : true)) {\n item.order = tempAOrder;\n }\n return item;\n });\n\n const menuEntity: MenuEntity = {\n ...selectedMenuItem,\n content_list: newContents,\n };\n\n rpc.updateMenu(menuEntity).then(() => setSelectedContent(null));\n }, [contentListSorted, selectedMenuItem, rpc]);\n\n\n const onUpClick = useCallback((index: number) => {\n swapItemOrders(contentListSorted[index - 1], contentListSorted[index]);\n }, [swapItemOrders, contentListSorted]);\n\n const onDownClick = useCallback((index: number) => {\n swapItemOrders(contentListSorted[index + 1], contentListSorted[index]);\n }, [swapItemOrders, contentListSorted]);\n\n const mediaTypeOptionsList = useMemo(() => [{label: t('air_conditioning'), value: 'air'}, {label: t('other'), value: 'other'}], [t]) ;\n\n const displayNameExtractor = useCallback((item: MenuContent, column: ColumnModel, index?: number) => {\n if (column.key === 'type') {\n switch (item.type) {\n case 'control':\n return t('control');\n case 'media':\n return t('media');\n default:\n return '-';\n }\n } else if (column.key === 'relational_id') {\n return item.type === 'control' ? controlTypeOptionList.find(i => i.value === item.relational_id).label :\n item.type === 'media' ? mediaTypeOptionsList.find(i => i.value === item.relational_id).label : '-';\n } else if (column.key === 'order') {\n return ;\n }\n\n return item[column.key] || '-';\n }, [t, controlTypeOptionList, mediaTypeOptionsList, onUpClick, contentListSorted.length, onDownClick]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('content'),\n key: 'type',\n },\n {\n length: 2,\n name: t('type'),\n key: 'relational_id',\n },\n {\n length: 3,\n name: t('order'),\n key: 'order',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {\n MenuContent,\n MenuContentType,\n MenuEntity,\n} from '../../../../store/control/state';\nimport {useSelector} from 'react-redux';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {ControlTypeModel} from '../../../../types/control';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport const TYPE_NAME_MAP: Record = {\n control: 'CONTROL',\n media: 'MEDIA',\n};\n\nexport const ContentEditScreen = memo(function ContentEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ type: string; rel_id: string; menu_id: string; }>();\n const history = useHistory();\n const {success, failure} = useMessage();\n const question = useQuestion();\n const [rpc] = useRPC();\n\n const backUrl = useMemo(() => `/settings/left-menu/${params.menu_id}/contents/`, [params.menu_id]);\n\n const [selectedContent, setSelectedContent] = useState(null);\n const menuList = useSelector(state => state.control.menuList);\n const selectedMenu = useMemo(() => menuList.find((m) => m.id === params.menu_id), [menuList, params.menu_id]);\n const sortedContentList = useMemo(() => selectedMenu.content_list ?\n selectedMenu.content_list.sort((a, b) => a.order - b.order) : [], [selectedMenu.content_list]);\n\n const controlTypes = useSelector(state => state.control.controlTypeList);\n const controlTypeOptionList: SelectItem>[] =\n useMemo(() => controlTypes\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\n .map(controlType => ({\n value: controlType,\n label: controlType.name,\n })), [controlTypes]);\n\n const mediaTypeOptionsList = useMemo(() => [{label: t('air_conditioning'), value: 'air'}, {label: t('other'), value: 'other'}], [t]);\n\n const [selectedType, setSelectedType] = useState>(null);\n const [selectedControlOption, setSelectedControlOption] = useState>>(null);\n const [selectedMediaOption, setSelectedMediaOption] = useState>(null);\n\n const onBackPressed = useCallback(() => {\n history.push(backUrl);\n }, [history, backUrl]);\n\n\n const isFieldsValid = useCallback((): boolean => {\n if (selectedType == null) {\n failure(t('pls_select_a_valid_type'));\n\n return false;\n }\n\n if (selectedType.value === 'control') {\n if (selectedControlOption == null) {\n failure(t('pls_select_a_valid_control_type'));\n\n return false;\n }\n }\n\n if (selectedType.value === 'media') {\n if (selectedMediaOption == null) {\n failure(t('pls_select_a_valid_media_type'));\n\n return false;\n }\n }\n\n const relationalIdExists = selectedType.value === 'control' ? selectedControlOption.value.id :\n selectedType.value === 'media' ? selectedMediaOption.value : null;\n const contentExists = sortedContentList.find((c) => (c.type === selectedType.value && (relationalIdExists ? c?.relational_id === relationalIdExists : true)));\n\n if ((selectedContent !== contentExists) && contentExists) {\n failure(t('this_menu_content_is_pre_added'));\n\n return false;\n }\n\n return true;\n }, [t, selectedType, selectedControlOption, selectedMediaOption, sortedContentList, selectedContent, failure]);\n\n const returnPushedArray = useCallback((array, item) => {\n const tempArray = array;\n array.push(item);\n return tempArray;\n }, []);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_the_content'), () => {\n const newContentList = sortedContentList.filter(c => !(c.type === params.type && (params.rel_id ? c.relational_id === params.rel_id : true)));\n\n const menuEntity: MenuEntity = {\n ...selectedMenu,\n content_list: newContentList,\n };\n\n return rpc.updateMenu(menuEntity)\n .then(() => {\n success(t('content_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [t, failure, onBackPressed, params.rel_id, params.type, question, rpc, selectedMenu, sortedContentList, success]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const order = sortedContentList.length === 0 ? 0 :\n sortedContentList.sort((a, b) => b.order - a.order)[0].order + 1;\n\n const menuContent: MenuContent = {\n type: selectedType.value,\n relational_id: selectedType.value === 'control' ? selectedControlOption.value.id :\n selectedType.value === 'media' ? selectedMediaOption.value : null,\n order: selectedContent ? selectedContent.order : order,\n };\n\n const newContentList = params.type ? sortedContentList.map(c => {\n if (c.type === params.type && (params.rel_id ? c.relational_id === params.rel_id : true)) {\n c = menuContent;\n }\n return c;\n }) : returnPushedArray(sortedContentList, menuContent);\n\n const menuEntity: MenuEntity = {\n ...selectedMenu,\n content_list: newContentList,\n };\n\n rpc.updateMenu(menuEntity).then(() => {\n success(t(params?.type ? 'successfully_edited' : 'successfully_created'));\n onBackPressed();\n }).catch(failure);\n },\n [\n t,\n isFieldsValid,\n sortedContentList,\n selectedType?.value,\n selectedControlOption?.value,\n selectedMediaOption?.value,\n selectedMenu,\n rpc,\n failure,\n success,\n onBackPressed,\n params.rel_id,\n params.type,\n returnPushedArray,\n selectedContent,\n ]);\n\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(params.type),\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: backUrl,\n },\n ], [t, onDeletePressed, params.type, onCreatePressed, backUrl],\n );\n\n const TYPE_OPTION_LIST = useMemo[]>(() =>\n (Object.entries(TYPE_NAME_MAP) as [MenuContentType, string][])\n .map(([type, name]) => ({label: t(name), value: type})), [t]);\n\n useEffect(() => {\n if (params.type == null) {\n return;\n }\n\n const content = sortedContentList.find((c) => (c.type === params.type && (params.rel_id ? c?.relational_id === params?.rel_id : true)));\n\n if (content == null) {\n return;\n }\n\n setSelectedContent(content);\n setSelectedType(TYPE_OPTION_LIST.find(typeOption => typeOption.value === content.type));\n const selectedControl = content.type === 'control' &&\n controlTypeOptionList.find(controlOption => controlOption.value.id === content.relational_id);\n setSelectedControlOption(selectedControl || controlTypeOptionList[0] || null);\n const selectedMedia = content.type === 'media' &&\n mediaTypeOptionsList.find(mediaOption => mediaOption.value === content.relational_id);\n setSelectedMediaOption(selectedMedia || mediaTypeOptionsList[0] || null);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.type != null) {\n return;\n }\n\n setSelectedType(TYPE_OPTION_LIST[0]);\n setSelectedControlOption(controlTypeOptionList[0] || null);\n setSelectedMediaOption(mediaTypeOptionsList[0] || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n {\n renderIf(selectedType?.value === 'control')(() =>\n ,\n )\n }\n {\n renderIf(selectedType?.value === 'media')(() =>\n ,\n )\n }\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {LeftMenuListScreen} from './LeftMenuListScreen';\nimport {LeftMenuEditScreen} from './LeftMenuEditScreen';\nimport {ContentListScreen} from './ContentListScreen';\nimport {ContentEditScreen} from './ContentEditScreen';\n\nexport const LeftMenuSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/left-menu',\n component: LeftMenuListScreen,\n },\n {\n routerLink: '/settings/left-menu/edit/:id',\n component: LeftMenuEditScreen,\n },\n {\n routerLink: '/settings/left-menu/edit/',\n component: LeftMenuEditScreen,\n },\n {\n routerLink: '/settings/left-menu/:id/contents/',\n component: ContentListScreen,\n },\n {\n routerLink: '/settings/left-menu/:menu_id/contents/edit/',\n component: ContentEditScreen,\n },\n {\n routerLink: '/settings/left-menu/:menu_id/contents/edit/:type/:rel_id?',\n component: ContentEditScreen,\n },\n];\n","import {RouteDefinition} from '../../../../routes';\nimport {GatewayControlScreen} from './GatewayControlScreen';\n\nexport const GatewayControlRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/gateway-control/:id',\n component: GatewayControlScreen,\n },\n];\n","import React, {useCallback, useMemo} from 'react';\nimport {PasswordContainer} from '../../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../../components/Settings/SettingsPageContainer';\nimport {onClickHandler} from '../../../../../utils/onclick';\nimport './index.scss';\nimport {useSelector} from 'react-redux';\nimport {useParams} from 'react-router-dom';\nimport {GatewayCommand} from '../../../../../types/control';\nimport {useQuestion} from '../../../../../hooks/question';\nimport {useMessage} from '../../../../../hooks/message';\nimport {useRPC} from '../../../../../hooks/rpc';\nimport {useLocalization} from \"../../../../../hooks/localization\";\n\nexport function GatewayControlScreen() {\n const {t} = useLocalization();\n const {id} = useParams();\n const [rpc] = useRPC();\n const question = useQuestion();\n const {success} = useMessage();\n\n const gatewayList = useSelector(state => state.control.gatewayList);\n const selectedGateway = useMemo(() => gatewayList.find((g) => g.id === id), [gatewayList, id]);\n\n const onShutdownClick = useCallback(() => {\n question(t('the_gateway_will_be_closed__continue',{name:selectedGateway.name}), () => {\n success(t('closing'));\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Shutdown);\n });\n }, [\n t,\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n const onRestartClick = useCallback(() => {\n question(t('the_gateway_will_be_rebooted__continue',{name: selectedGateway.name}), () => {\n success(t('rebooting'));\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Reboot);\n });\n }, [\n t,\n rpc,\n question,\n selectedGateway,\n success,\n ]);\n\n const onSupervisorRestartClick = useCallback(() => {\n question(t('the_gateway_supervisor_will_be_rebooted__continue',{name:selectedGateway.name}), () => {\n success(t('supervisor_rebooting'));\n rpc.manageGateway(selectedGateway.id, GatewayCommand.RestartSupervisor);\n });\n }, [\n t,\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n const onWorkerRestartClick = useCallback(() => {\n question(t('the_gateway_worker_will_be_rebooted__continue',{name:selectedGateway.name}), () => {\n success(t('worker_rebooting'));\n rpc.manageGateway(selectedGateway.id, GatewayCommand.RestartWorker);\n });\n }, [\n t,\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n return (\n \n \n
\n
\n
\n
\n {t('close')}\n
\n
\n {t('reboot')}\n
\n
\n {t('supervisor_reboot')}\n
\n
\n {t('worker_reboot')}\n
\n
\n
\n
\n \n
\n );\n}\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {BridgeDeviceModel} from '../../../../types/bridge-device';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nconst keyExtractor = (item: BridgeDeviceModel) => item.id;\n\nexport function STPEditorListScreen() {\n const {t} = useLocalization();\n const stpDeviceList = useFilterSelector(state => state.control.bridgeDeviceList, (d) => d.type_id === '4' || d.type_id === '5' || d.type_id === '23');\n const deviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n\n const [selectedMenuItem, setSelectedMenuItem] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/stp-editor/${selectedMenuItem ? selectedMenuItem.id : ''}`,\n className: 'blue',\n hidden: !selectedMenuItem,\n },\n ], [t, selectedMenuItem]);\n\n const displayNameExtractor = useCallback((item: BridgeDeviceModel, column: ColumnModel) => {\n if (column.key === 'name') {\n return item.name || '-';\n }\n\n if (column.key === 'type') {\n return deviceTypeSet[item.type_id].name;\n }\n\n return item[column.key] || '-';\n }, [deviceTypeSet]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('device_name'),\n key: 'name',\n },\n {\n length: 3,\n name: t('device_type'),\n key: 'type',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n}\n","import {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport {useParams} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {useFilterSelector} from '../../../../hooks/filter-selector';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {STPUIEntity} from '../../../../store/control/state';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useControlSelector} from '../../../../hooks/control-selector';\nimport {useLocalization} from \"../../../../hooks/localization\";\nimport {TFunction} from \"i18next\";\n\nconst BACK_URL = '/settings/stp-editor';\n\nconst getColumns = (bridgeDeviceTypeId: string, t:TFunction): ColumnModel[] => [\n {\n length: 3,\n name: t('display_name'),\n key: 'display_name',\n },\n {\n length: 3,\n name: t('type'),\n key: 'type',\n },\n ...(bridgeDeviceTypeId === '23' ? [] :\n [{\n length: 1,\n name: t('page'),\n key: 'page_number',\n }]),\n {\n length: 1,\n name: bridgeDeviceTypeId === '23' ? t('button') : t('row'),\n key: 'row_number',\n },\n];\n\nconst keyExtractor = (item: STPUIEntity) => item.id;\n\nconst rowNumberToString = (n: number) => {\n if (typeof n !== 'number' || n <= 0) {\n return '-';\n }\n\n let str = '';\n for (let i = 1; i < n; i++) {\n str += i.toString() + ',';\n }\n str += n.toString();\n return str;\n};\n\nexport function STPEditorContentListScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n\n const devices = useSelector((state) => state.control.bridgeDeviceList);\n const deviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const selectedDevice = useMemo(() => devices.find((d) => d.id === params.id), [devices, params.id]);\n const selectedDeviceType = useMemo(() => deviceTypeSet[selectedDevice.type_id], [deviceTypeSet, selectedDevice]);\n const stpUIEntityList = useFilterSelector(state => state.control.stpUIList,\n (e) => e.bridge_device_id === selectedDevice.id);\n const sortedEntityList = useMemo(() => stpUIEntityList.sort((a, b) => (a.page_number * 10 + a.row_number) - (b.page_number * 10 + b.row_number)), [stpUIEntityList]);\n\n const [selectedUiEntity, setSelectedUiEntity] = useState();\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const controlList = useControlSelector();\n\n const buttons = useMemo(() => [\n {\n text: t('edit'),\n url: `/settings/stp-editor/${selectedDevice?.id}/content/${selectedUiEntity?.id}`,\n className: 'blue',\n hidden: !selectedUiEntity,\n },\n {\n text: t('add'),\n url: `/settings/stp-editor/${selectedDevice?.id}/content`,\n className: 'green',\n },\n ], [t, selectedDevice.id, selectedUiEntity]);\n\n const displayNameExtractor = useCallback((item: STPUIEntity, column: ColumnModel) => {\n if (column.key === 'type') {\n switch (item.type) {\n case 'group':\n return t('group_control');\n case 'weather':\n return t('weather_state_time');\n case 'scenario':\n return t('scenario');\n case 'media':\n return t('media');\n case 'air':\n return t('air_conditioning');\n case 'control':\n case 'virtualControl':\n const control = controlList.find((c) => c.id === item.relational_id);\n return controlTypeSet[control?.control.type_id]?.name || t('control');\n default:\n return '-';\n }\n }\n\n if (column.key === 'display_name') {\n return item.display_name || '-';\n }\n\n if (column.key === 'page_number') {\n return (item.page_number === 0 && selectedDeviceType.has_home_page) ? t('home_page') : item.page_number ?? '-';\n }\n\n if (column.key === 'row_number') {\n return (item.type === 'air' || item.type === 'media') ?\n rowNumberToString(selectedDeviceType.row_count) :\n item.row_number || '-';\n }\n\n return item[column.key] || '-';\n }, [t, controlList, controlTypeSet, selectedDeviceType.has_home_page, selectedDeviceType?.row_count]);\n\n return (\n \n \n \n \n \n );\n}\n","import {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {useHistory, useLocation, useParams} from 'react-router-dom';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {SelectItem} from '../../../../components/Select';\nimport {useGlassControl} from '../../../../hooks/glass-control';\nimport {useSelector} from 'react-redux';\nimport {SettingReadOnlyRowComponent} from '../../../../components/Settings/SettingReadOnlyRowComponent';\nimport {STPUIEntity, STPUIType} from '../../../../store/control/state';\nimport {useMessage} from '../../../../hooks/message';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {\n CONTROL_TYPE_ID_AIR_CONDITIONER,\n CONTROL_TYPE_ID_THERMOSTAT,\n CONTROL_TYPE_ID_CONTACTOR,\n CONTROL_TYPE_ID_CURTAIN,\n CONTROL_TYPE_ID_LIGHT,\n CONTROL_TYPE_ID_PLUG,\n CONTROL_TYPE_ID_VALVE,\n BRIDGE_DEVICE_TYPE_ID_STPM,\n} from '../../../../types/control';\nimport {useControlSelector} from '../../../../hooks/control-selector';\nimport {useQuestion} from '../../../../hooks/question';\nimport {useLocalization} from \"../../../../hooks/localization\";\n\nexport function STPEditorContentEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string; device_id: string; }>();\n const question = useQuestion();\n const location = useLocation<{ controlId: string; bridgeDeviceId: string; virtualControlId: string; }>();\n const {success, failure} = useMessage();\n const history = useHistory();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [rpc] = useRPC();\n const controlList = useControlSelector();\n\n const backUrl = useMemo(() => `/settings/stp-editor/${params?.device_id || location?.state?.bridgeDeviceId}`, [params, location]);\n\n const controlTypes = useSelector(state => state.control.controlTypeList);\n const stpUIEntityList = useSelector((state) => state.control.stpUIList);\n const currentSTPUIEntity = useMemo(() => {\n return stpUIEntityList.find((e) =>\n e.id === params.id ||\n e.relational_id === location?.state?.controlId) || null;\n }, [stpUIEntityList, params, location]);\n const currentControl = useMemo(() => {\n if (currentSTPUIEntity?.type !== 'control' && currentSTPUIEntity?.type !== 'virtualControl') {\n return null;\n }\n\n return controlList.find((c) =>\n c.id === currentSTPUIEntity?.relational_id ||\n c.id === location?.state?.controlId) || null;\n }, [location, controlList, currentSTPUIEntity]);\n const controlTypeName = useMemo(() => controlTypes.find((t) => t.id === currentControl?.control.type_id), [controlTypes, currentControl?.control.type_id])?.name || '';\n\n const [displayName, setDisplayName] = useState('');\n const [contentType, setContentType] = useState>(null);\n const [groupType, setGroupType] = useState>(null);\n\n const deviceList = useSelector(state => state.control.bridgeDeviceList);\n const bridgeDeviceTypeSet = useSetSelector(state => state.control.bridgeDeviceTypeList);\n const bridgeDevice = useMemo(() => deviceList.find((d) => d.id === params.device_id), [deviceList, params.device_id]);\n const bridgeDeviceType = useMemo(() => bridgeDeviceTypeSet[bridgeDevice.type_id], [bridgeDevice.type_id, bridgeDeviceTypeSet]);\n const CONTENT_TYPES = useMemo<{ label: string, value: STPUIType }[]>(() => [\n {label: t('weather_state_time'), value: 'weather'},\n {label: t('group_control'), value: 'group'},\n {label: t('scenario'), value: 'scenario'},\n {label: t('media'), value: 'media'},\n {label: t('air_conditioning'), value: 'air'},\n ], [t]);\n const contentTypeOptionList = useMemo(() =>\n bridgeDeviceType.has_home_page ? [...CONTENT_TYPES] : CONTENT_TYPES.filter(c => c.value !== 'group' && c.value !== 'weather' && c.value !== 'media' && c.value !== 'air'),\n [CONTENT_TYPES, bridgeDeviceType.has_home_page]);\n const {\n pageOptionList,\n pageNumber,\n setPageNumber,\n rowNumber,\n rowOptionList,\n setRowNumber,\n setOnlyEmptyPages,\n } = useGlassControl(currentSTPUIEntity, params?.device_id, bridgeDeviceType);\n\n const controlPageOptionsList = useMemo(() => {\n return pageOptionList.slice(1);\n }, [pageOptionList]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const onBackPressed = useCallback(() => {\n history.push(backUrl);\n }, [history, backUrl]);\n\n const onDeletePressed = useCallback(() => {\n question(t('are_you_sure_to_delete_ui_element'), () => {\n return rpc.deleteSTPUI(currentSTPUIEntity.id)\n .then(() => {\n success(t('ui_element_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\n t,\n failure,\n onBackPressed,\n question,\n rpc,\n currentSTPUIEntity?.id,\n success,\n ]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (!displayName) {\n failure(t('pls_enter_a_valid_display_name'));\n return false;\n }\n\n if (contentType?.value !== 'group' && pageNumber == null) {\n failure(t('pls_select_a_page'));\n return false;\n }\n\n if (contentType?.value !== 'media' && contentType?.value !== 'air' && rowNumber == null) {\n failure(t('pls_select_a_row'));\n return false;\n }\n\n if (contentType?.value === 'group' && groupType == null) {\n failure(t('pls_select_group_control_type'));\n return false;\n }\n\n return true;\n }, [t, contentType?.value, displayName, failure, groupType, pageNumber, rowNumber]);\n\n const onCreatePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const uiEntity: STPUIEntity = {\n id: currentSTPUIEntity?.id || undefined,\n display_name: displayName,\n type: currentSTPUIEntity == null ? contentType?.value : currentSTPUIEntity?.type,\n bridge_device_id: params?.device_id,\n relational_id: contentType?.value === 'group' ? groupType?.value : currentSTPUIEntity?.relational_id,\n page_number: pageNumber?.value,\n row_number: rowNumber?.value || 0,\n };\n\n rpc.updateSTPUI(uiEntity)\n .then(() => {\n success(t(currentSTPUIEntity ? 'ui_element_successfully_edited' : 'ui_element_successfully_created'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, groupType?.value, contentType?.value, currentSTPUIEntity, displayName, isFieldsValid, pageNumber?.value, params?.device_id, rowNumber?.value, success, onBackPressed, rpc, failure]);\n\n const buttons = useMemo(() =>\n [\n {\n text: t('delete'),\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: currentControl != null || currentSTPUIEntity == null,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: backUrl,\n },\n ], [t, onDeletePressed, currentSTPUIEntity, onCreatePressed, backUrl, currentControl],\n );\n\n const GROUP_CONTROL_TYPES = useMemo(() => [\n {label: t('lamp'), value: CONTROL_TYPE_ID_LIGHT},\n {label: t('curtain'), value: CONTROL_TYPE_ID_CURTAIN},\n {label: t('plug'), value: CONTROL_TYPE_ID_PLUG},\n {label: t('air_conditioning'), value: CONTROL_TYPE_ID_AIR_CONDITIONER},\n {label: t('water_valve'), value: CONTROL_TYPE_ID_VALVE},\n {label: t('contactor'), value: CONTROL_TYPE_ID_CONTACTOR},\n ], [t]);\n\n useEffect(() => {\n if (currentSTPUIEntity == null) {\n return;\n }\n\n setDisplayName(currentSTPUIEntity.display_name);\n setRowNumber(rowOptionList.find(o => currentSTPUIEntity.row_number === o.value) || null);\n setPageNumber(pageOptionList.find(o => currentSTPUIEntity.page_number === o.value) || null);\n if (currentSTPUIEntity.type !== 'control' && currentSTPUIEntity.type !== 'virtualControl') {\n setContentType(contentTypeOptionList.find((t) => t.value === currentSTPUIEntity.type));\n }\n if (currentSTPUIEntity.type === 'group') {\n setGroupType(GROUP_CONTROL_TYPES.find((t) => t.value === currentSTPUIEntity.relational_id));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (contentType?.value === 'group') {\n setPageNumber(pageOptionList[0]);\n } else if (bridgeDeviceType.id === '23') {\n setPageNumber({label: '', value: 0});\n }\n }, [contentType, setPageNumber, pageOptionList, bridgeDeviceType.id]);\n\n useEffect(() => {\n if (contentType?.value === 'media' || contentType?.value === 'air') {\n setOnlyEmptyPages(true);\n return;\n }\n\n if (bridgeDeviceType.id === BRIDGE_DEVICE_TYPE_ID_STPM) {\n const control = controlList.find(c => c.id === currentSTPUIEntity?.relational_id);\n if (control) {\n if (control.control.type_id === CONTROL_TYPE_ID_THERMOSTAT) {\n setOnlyEmptyPages(true);\n return;\n }\n }\n }\n\n setOnlyEmptyPages(false);\n }, [bridgeDeviceType, bridgeDeviceType?.id, contentType, controlList, currentSTPUIEntity?.relational_id, setOnlyEmptyPages]);\n\n return (\n \n \n
\n
\n \n \n {\n renderIf(currentControl != null)(() =>\n ,\n )\n }\n {\n renderIf(currentSTPUIEntity == null)(() =>\n ,\n (() =>\n \n ),\n )\n }\n {\n renderIf(contentType?.value === 'group')(() =>\n ,\n )\n }\n {\n renderIf(bridgeDeviceType.id !== '23')(() =>\n renderIf(contentType?.value !== 'group')(() =>\n ,\n () => (\n \n ),\n ),\n )\n }\n {\n renderIf(contentType?.value !== 'media' && contentType?.value !== 'air' && !(currentControl?.control.type_id === CONTROL_TYPE_ID_THERMOSTAT && bridgeDeviceType.id === '5'))(() =>\n ,\n )\n }\n
\n
\n \n {\n renderKeyboard()\n }\n
\n );\n}\n","import {RouteDefinition} from '../../../routes';\nimport {STPEditorListScreen} from './STPEditorListScreen';\nimport {STPEditorContentListScreen} from './STPEditorContentListScreen';\nimport {STPEditorContentEditScreen} from './STPEditorContentEditScreen';\n\nexport const STPEditorRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/stp-editor',\n component: STPEditorListScreen,\n },\n {\n routerLink: '/settings/stp-editor/:id',\n component: STPEditorContentListScreen,\n },\n {\n routerLink: '/settings/stp-editor/:device_id/content/',\n component: STPEditorContentEditScreen,\n },\n {\n routerLink: '/settings/stp-editor/:device_id/content/:id',\n component: STPEditorContentEditScreen,\n },\n];\n","import React, {memo, useEffect} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useHistory} from 'react-router-dom';\n\nexport const LoginContent = memo(function LoginContent() {\n const history = useHistory();\n\n useEffect(() => {\n history.push('/settings');\n });\n\n return <>;\n});\n\n\nexport function SettingsLoginScreen() {\n return (\n \n \n \n );\n}\n","import {RouteDefinition} from '../../../routes';\nimport {SettingsLoginScreen} from './SettingsLoginScreen';\n\nexport const SettingsLoginRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/login',\n component: SettingsLoginScreen,\n },\n];\n","import React, {memo, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {useSelector} from 'react-redux';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {ColumnModel, SettingsList} from '../../../../components/Settings/SettingsList';\nimport {useSetSelector} from '../../../../hooks/set-selector';\nimport {useLocalization} from '../../../../hooks/localization';\nimport {ConciergeModel} from '../../../../types/concierge';\nimport {useRPC} from '../../../../hooks/rpc';\n\nconst keyExtractor = (item: ConciergeModel) => item.id;\n\nexport const ConciergeListScreen = memo(function ConciergeListScreen() {\n const {t} = useLocalization();\n const [rpc] = useRPC();\n const conciergeList = useSelector(state => state.control.conciergeList);\n const conciergeTypeList = useSetSelector(state => state.control.conciergeTypeList);\n\n const [selectedConcierge, setSelectedConcierge] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: t('call_sip'),\n className: 'orange',\n hidden: !(selectedConcierge) || selectedConcierge.info.sip == null,\n onClick: () => {\n rpc.callIntercom(selectedConcierge.info.sip);\n },\n },\n {\n text: t('edit'),\n url: `/settings/concierge/edit/${selectedConcierge ? selectedConcierge.id : ''}`,\n className: 'orange',\n hidden: !(selectedConcierge),\n },\n {\n text: t('create_concierge'),\n url: '/settings/concierge/edit',\n className: 'green',\n },\n ], [rpc, t, selectedConcierge]);\n\n const displayNameExtractor = useCallback((item: ConciergeModel, column: ColumnModel) => {\n if (column.key === 'type_id') {\n return conciergeTypeList[item.type_id].name;\n }\n\n return item[column.key] || '-';\n }, [conciergeTypeList]);\n\n const columns = useMemo(() => [\n {\n length: 3,\n name: t('concierge_name'),\n key: 'name',\n },\n {\n length: 1,\n name: t('concierge_type'),\n key: 'type_id',\n },\n ], [t]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {PasswordContainer} from '../../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../../components/Settings/SettingsPageContainer';\nimport {useHistory, useParams} from 'react-router-dom';\nimport {useKeyboard} from '../../../../hooks/keyboard';\nimport {useMessage} from '../../../../hooks/message';\nimport {useRPC} from '../../../../hooks/rpc';\nimport {useSelector} from 'react-redux';\nimport {useMapSelector} from '../../../../hooks/map-selector';\nimport {SelectItem} from '../../../../components/Select';\nimport {SettingInputComponent} from '../../../../components/Settings/SettingInputComponent';\nimport {SettingSelectComponent} from '../../../../components/Settings/SettingSelectComponent';\nimport {isValidSIPNo} from '../../../../utils/validation';\nimport {SettingsDeleteButton} from '../../../../components/Settings/SettingsDeleteButton';\nimport {useLocalization} from '../../../../hooks/localization';\nimport {ConciergeModel} from '../../../../types/concierge';\nimport {ConciergeTypeModel} from '../../../../types/concierge-type';\n\nconst BACK_URL = '/settings/concierge';\n\nexport const ConciergeEditScreen = memo(function ConciergeEditScreen() {\n const {t} = useLocalization();\n const params = useParams<{ id: string }>();\n const [setActiveInput, renderKeyboard, currentInput] = useKeyboard();\n const [setActiveNumpadInput, renderNumpadKeyboard, currentNumpadInput] = useKeyboard('numpad', true);\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const history = useHistory();\n\n const conciergeList = useSelector(state => state.control.conciergeList);\n const conciergeTypeOptionList = useMapSelector(\n state => state.control.conciergeTypeList,\n type => ({value: type, label: type.name}),\n ) || [];\n\n const [selected, setSelected] = useState(null);\n const [name, setName] = useState('');\n const [conciergeTypeOption, setConciergeTypeOption] = useState>(null);\n const [conciergeURL, setConciergeURL] = useState('');\n const [sipNumber, setSipNumber] = useState('');\n\n const onBackPressed = useCallback(() => {\n history.push(BACK_URL);\n }, [history]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure(t('pls_enter_a_valid_concierge_name'));\n\n return false;\n }\n\n if (conciergeTypeOption == null) {\n failure(t('pls_select_a_valid_concierge_type'));\n\n return false;\n }\n\n if (conciergeTypeOption.value.types.includes('url')) {\n if (conciergeURL == null || conciergeURL.length === 0) {\n failure(t('pls_enter_a_valid_url'));\n\n return false;\n }\n }\n\n if (conciergeTypeOption.value.types.includes('sip')) {\n if (!isValidSIPNo(sipNumber)) {\n failure(t('pls_enter_a_valid_sip_no'));\n\n return false;\n }\n }\n\n return true;\n }, [t, conciergeTypeOption, conciergeURL, sipNumber, failure, name]);\n\n const onSavePressed = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n const conciergeModel: ConciergeModel = {\n id: selected?.id || null,\n name,\n type_id: conciergeTypeOption.value.id,\n info: {},\n };\n\n if (conciergeTypeOption.value.types.includes('url')) {\n let conciergeURLWithScheme = conciergeURL;\n\n if (conciergeURLWithScheme != null && conciergeURLWithScheme.indexOf('http://') !== 0) {\n conciergeURLWithScheme = 'http://' + conciergeURL;\n }\n\n conciergeModel.info.url = conciergeURLWithScheme;\n }\n\n if (conciergeTypeOption.value.types.includes('sip')) {\n conciergeModel.info.sip = sipNumber;\n }\n\n return rpc.updateConcierge(conciergeModel)\n .then(() => {\n success(t(conciergeModel.id ? 'concierge_successfully_edited' : 'concierge_successfully_created'));\n onBackPressed();\n }).catch(failure);\n }, [\n t,\n conciergeTypeOption?.value,\n conciergeURL,\n sipNumber,\n failure,\n isFieldsValid,\n name,\n onBackPressed,\n rpc,\n selected?.id,\n success,\n ]);\n\n const onDeletePressed = useCallback(() => {\n return rpc.deleteConcierge(selected.id)\n .then(() => {\n success(t('concierge_successfully_deleted'));\n onBackPressed();\n })\n .catch(failure);\n }, [t, failure, onBackPressed, rpc, selected, success]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n setActiveNumpadInput(null);\n }, [setActiveInput, setActiveNumpadInput]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n t('this_will_be_deleted_with_this_message__continue', {\n name: selected?.name,\n message,\n })}\n onPress={onDeletePressed}/>,\n },\n {\n text: t('save'),\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: t('cancel'),\n className: 'red',\n url: BACK_URL,\n }], [t, selected, onSavePressed, onDeletePressed],\n );\n\n useEffect(() => {\n if (params.id == null) {\n return;\n }\n\n const concierge = conciergeList.find(conciergeItem => conciergeItem.id === params['id']);\n if (concierge == null) {\n return;\n }\n\n setSelected(concierge);\n setName(concierge.name);\n setConciergeTypeOption(\n conciergeTypeOptionList.find(conciergeTypeOption => conciergeTypeOption.value.id === concierge.type_id) ||\n conciergeTypeOptionList[0] ||\n null);\n setConciergeURL(concierge.info.url);\n setSipNumber(concierge.info.sip);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (params.id != null) {\n return;\n }\n\n setConciergeTypeOption(conciergeTypeOptionList[0] || null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n \n
\n
\n \n \n {\n renderIf(conciergeTypeOption?.value?.types?.includes('sip'))(() => (\n \n ))\n }\n {\n renderIf(conciergeTypeOption?.value?.types?.includes('url'))(() => (\n \n ))\n }\n
\n
\n \n {\n renderKeyboard()\n }\n {\n renderNumpadKeyboard()\n }\n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {ConciergeListScreen} from './ConciergeListScreen';\nimport {ConciergeEditScreen} from './ConciergeEditScreen';\n\nexport const ConciergeSettingsRoutes: RouteDefinition[] = [\n {\n routerLink: '/settings/concierge',\n component: ConciergeListScreen,\n },\n {\n routerLink: '/settings/concierge/edit/:id',\n component: ConciergeEditScreen,\n },\n {\n routerLink: '/settings/concierge/edit',\n component: ConciergeEditScreen,\n },\n];\n","import {RouteDefinition} from '../../routes';\nimport {UserSettingsRoutes} from './User';\nimport settingsIcon from '../../assets/images/icons/settings.png';\nimport {UartSettingsRoutes} from './Uart';\nimport {CustomizationSettingsRoutes} from './Customization';\nimport {SensorSettingsRoutes} from './Sensor';\nimport {DeviceSettingsRoutes} from './Device';\nimport {GatewaySettingsRoutes} from './Gateway';\nimport {CameraSettingsRoutes} from './Camera';\nimport {ControlSettingsRoutes} from './Control';\nimport {IntercomSettingsRoutes} from './Intercom';\nimport {DoorSettingsRoutes} from './Door';\nimport {ProjectInformationSettingsRoutes} from './ProjectInformation';\nimport {SetupRoutes} from './Gateway/Setup';\nimport {MediaSettingsRoutes} from './Media';\nimport {AlarmSettingsRoutes} from './Alarm';\nimport {SIPSettingsRoutes} from './Gateway/SIP';\nimport {HomepageSettingsRoutes} from './Homepage';\nimport {WiFiSettingsRoutes} from './Gateway/WiFi';\nimport {SoundSettingsRoutes} from './Sound';\nimport {LanguageSettingsRoutes} from './Language';\nimport {TimeSettingsRoutes} from './Time';\nimport {DatabaseSettingsRoutes} from './Database';\nimport {SystemInfoSettingsRoutes} from './SystemInfo';\nimport {VirtualControlSettingsRoutes} from './VirtualControl';\nimport {DoorBrandSettingsRoutes} from './DoorBrand';\nimport {InputSettingsRoutes} from './Input';\nimport {DeveloperSettingsScreen} from '../SettingsScreen/DeveloperSettingsScreen';\nimport {ControlTypeSettingsRoutes} from './ControlType';\nimport {BridgeDeviceTypeSettingsRoutes} from './BridgeDeviceType';\nimport {CameraBrandSettingsRoutes} from './CameraBrand';\nimport {InputTypeSettingsRoutes} from './InputType';\nimport {TestScreen} from './TestScreen';\nimport {ServerSettingsRoutes} from './Server';\nimport {SetDateTimeRoutes} from './SetDateTime';\nimport {LeftMenuSettingsRoutes} from './LeftMenu';\nimport {GatewayControlRoutes} from './Gateway/GatewayControl';\nimport {STPEditorRoutes} from './STPEditor';\nimport {SettingsLoginRoutes} from './SettingsLogin';\nimport {ConciergeSettingsRoutes} from './Concierge';\n\nexport const DEVELOPER_URL = '/developer';\n\nexport const SettingsRoutes: RouteDefinition[] = [\n ...UserSettingsRoutes,\n ...ProjectInformationSettingsRoutes,\n ...GatewaySettingsRoutes,\n ...DeviceSettingsRoutes,\n ...SensorSettingsRoutes,\n ...MediaSettingsRoutes,\n ...IntercomSettingsRoutes,\n ...CameraSettingsRoutes,\n ...AlarmSettingsRoutes,\n ...HomepageSettingsRoutes,\n ...WiFiSettingsRoutes,\n ...SoundSettingsRoutes,\n ...LanguageSettingsRoutes,\n ...CustomizationSettingsRoutes,\n ...TimeSettingsRoutes,\n ...DatabaseSettingsRoutes,\n ...SetDateTimeRoutes,\n ...SystemInfoSettingsRoutes,\n ...ControlSettingsRoutes,\n ...VirtualControlSettingsRoutes,\n ...InputSettingsRoutes,\n ...DoorSettingsRoutes,\n ...ServerSettingsRoutes,\n ...LeftMenuSettingsRoutes,\n ...STPEditorRoutes,\n ...SettingsLoginRoutes,\n\n ...DoorBrandSettingsRoutes,\n ...ControlTypeSettingsRoutes,\n ...BridgeDeviceTypeSettingsRoutes,\n ...CameraBrandSettingsRoutes,\n ...InputTypeSettingsRoutes,\n ...UartSettingsRoutes,\n ...GatewayControlRoutes,\n ...ConciergeSettingsRoutes,\n\n {\n routerLink: DEVELOPER_URL,\n component: DeveloperSettingsScreen,\n },\n {\n routerLink: '/developer/test',\n component: TestScreen,\n },\n];\n","import React, {CSSProperties, memo, ReactNode} from 'react';\nimport './index.scss';\n\nexport const Row = memo(function Row({children, style}: { children: ReactNode; style?: CSSProperties }) {\n return (\n
\n {children}\n
\n );\n});\n","import React, {CSSProperties, memo, ReactNode} from 'react';\nimport {onClickHandler} from '../../utils/onclick';\nimport './index.scss';\nimport DisabledIcon from '../../assets/images/icons/disabled.png';\nimport {useLocalization} from \"../../hooks/localization\";\nimport {Image} from '../Image';\n\ntype Props = {\n icon: string;\n isBusy?: boolean;\n hasError?: boolean;\n title?: string;\n onClick?: () => void;\n children?: ReactNode;\n textStyle?: CSSProperties;\n disabled?: boolean;\n disablePrefix?:boolean;\n containerStyle?:CSSProperties;\n};\n\nexport const Button = memo(function Button({disablePrefix, onClick, icon, isBusy, hasError, title, children, textStyle, containerStyle, disabled = false}: Props) {\n const {t} = useLocalization();\n return (\n
\n \n disabled\n icon\n {\n renderIf(!!title)(() =>\n
\n {title}\n
,\n )\n }\n \n {\n renderIf(isBusy)(() =>\n
,\n )\n }\n {\n renderIf(hasError)(() =>\n
\n {t('DEVICE_NOT_REACHABLE')}\n
,\n )\n }\n {children}\n
\n );\n});\n","import {memo, ReactNode, useCallback, useEffect, useState} from 'react';\nimport React from 'react';\nimport {useRPC} from '../../hooks/rpc';\nimport {ControlModel, ControlTypeModel, IOControlParameters} from '../../types/control';\nimport {Button} from '../Button';\nimport {controlSendErrorAction, entityUpdatedAction} from '../../store/control/actions';\nimport {useDispatch} from 'react-redux';\nimport {useDebounce} from '../../hooks/debounce';\nimport {Column} from '../Column';\nimport {Widget} from '../Widget';\nimport {delay} from '../../utils/promise';\nimport {useTimer} from '../../hooks/timer';\n\ntype Props = {\n control: ControlModel;\n controlType: ControlTypeModel;\n children?: ReactNode;\n};\n\nexport const SimpleControl = memo(function SimpleControl({control, controlType, children}: Props) {\n const [rpc] = useRPC();\n const {start, end, isTimedOut} = useTimer(2000);\n\n const dispatch = useDispatch();\n const updateControl = useDebounce(() => {\n dispatch(entityUpdatedAction({...control, isUpdating: true}, 'control'));\n Promise.race(\n [\n rpc.updateControlValue(control.id, control.current_value === 1 ? 0 : 1),\n delay(2000).then(() => false),\n ],\n ).then(result => {\n if (!result) {\n // todo is necessary?\n dispatch(entityUpdatedAction({...control, isUpdating: false}, 'control'));\n }\n });\n\n start();\n }, 200);\n\n const onClick = useCallback(() => {\n if (controlType.render_type === 'pulse' && control.current_value !== (control.parameters as IOControlParameters)?.default_value) {\n return;\n }\n\n updateControl();\n }, [control, controlType, updateControl]);\n\n useEffect(() => {\n if (control.hasError) {\n const timeout = setTimeout(() => dispatch(controlSendErrorAction(control.id, false)), 3000);\n return () => clearTimeout(timeout);\n }\n }, [dispatch, control]);\n\n useEffect(() => {\n if (!control.isUpdating) {\n end();\n }\n\n }, [end, control.isUpdating]);\n\n useEffect(() => {\n if (isTimedOut && control.isUpdating) {\n dispatch(entityUpdatedAction({...control, isUpdating: false}, 'control'));\n }\n }, [control, dispatch, isTimedOut]);\n\n return (\n \n \n \n {children}\n \n \n \n );\n});\n","import React, {memo, ReactNode, useCallback} from 'react';\nimport {ControlModel, ControlTypeModel, ThreePhaseSet} from '../../types/control';\nimport {useRPC} from '../../hooks/rpc';\nimport {ThreePhaseControlComponent} from './component';\nimport {useDispatch} from 'react-redux';\nimport {useDebounce} from '../../hooks/debounce';\nimport {entityUpdatedAction} from '../../store/control/actions';\n\nexport enum PhaseStatus {\n Stop,\n Up,\n Down\n}\n\ntype Props = {\n control: ControlModel;\n controlType: ControlTypeModel;\n children?: ReactNode;\n};\n\nexport const ThreePhaseControl = memo(function CurtainControl(props: Props) {\n const {control, children, ...restProps} = props;\n\n const [rpc] = useRPC();\n const updateControl = useDebounce(rpc.updateControlValue, 200);\n\n const dispatch = useDispatch();\n const click = useCallback((status: PhaseStatus) => {\n dispatch(entityUpdatedAction({...control, isUpdating: true}, 'control'));\n updateControl(control.id, status);\n }, [control, updateControl, dispatch]);\n\n return (\n \n {children}\n \n );\n});\n","import {useCallback, useRef, useState} from 'react';\n\nexport function useTimer(interval: number) {\n const timeoutRef = useRef();\n const [isTimedOut, setIsTimedOut] = useState(false);\n\n const end = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n setIsTimedOut(false);\n }, []);\n\n const start = useCallback(() => {\n end();\n timeoutRef.current = setTimeout(() => setIsTimedOut(true), interval);\n }, [end, interval]);\n\n return {\n start,\n end,\n isTimedOut,\n };\n}\n","import React, {memo, ReactNode, useMemo} from 'react';\nimport {ControlModel, ControlTypeModel, ThreePhaseSet} from '../../types/control';\nimport upButton from '../../assets/images/icons/controls/up-button.png';\nimport equalButton from '../../assets/images/icons/controls/equal-button.png';\nimport downButton from '../../assets/images/icons/controls/down-button.png';\nimport {Column} from '../Column';\nimport {Widget} from '../Widget';\nimport './index.scss';\nimport {PhaseStatus} from './index';\nimport {onClickHandler} from '../../utils/onclick';\n\ntype Props = {\n control: ControlModel;\n click: (curtainStatus: PhaseStatus) => void;\n children?: ReactNode;\n controlType: ControlTypeModel;\n};\n\nexport const ThreePhaseControlComponent = memo(function ThreePhaseControlComponent(props: Props) {\n const {control, children, click, controlType} = props;\n\n const isTwoPhase = controlType.render_type === 'two_phase';\n\n const curtainStatus = control.current_value as PhaseStatus;\n\n const icon = useMemo(() => {\n if (curtainStatus === PhaseStatus.Up) {\n return controlType.image_set.up;\n }\n if (curtainStatus === PhaseStatus.Down) {\n return controlType.image_set.down;\n }\n if (curtainStatus === PhaseStatus.Stop) {\n return controlType.image_set.stop;\n }\n\n return null;\n }, [controlType, curtainStatus]);\n\n return (\n \n \n
\n
\n \"curtain\"/\n
\n {control.name}\n
\n
\n
\n \n
\n {\n renderIf(!isTwoPhase)(() => (\n
\n \n
\n ))\n }\n
\n \n
\n
\n
\n {children}\n
\n
\n
\n );\n});\n","import React, {memo, ReactNode, useCallback} from 'react';\nimport {ControlModel, ControlTypeModel} from '../../../types/control';\nimport {useRPC} from '../../../hooks/rpc';\nimport {RangeComponent} from '../../Range/RangeComponent';\n\ntype Props = {\n control: ControlModel\n controlType: ControlTypeModel;\n children?: ReactNode;\n};\n\nexport const DimmerControl = memo(function DimmerControl(props: Props) {\n const {control, children, controlType} = props;\n\n const [rpc] = useRPC();\n\n const onChange = useCallback((value: number) => {\n rpc.updateControlValue(control.id, value);\n }, [rpc, control.id]);\n\n return (\n \n {children}\n \n );\n});\n","import React, {memo} from 'react';\nimport {ControlModel} from '../../../types/control';\nimport {Column} from '../../Column';\nimport {Widget} from '../../Widget';\nimport './index.scss';\nimport minusIcon from '../../../assets/images/icons/controls/minus.png';\nimport plusIcon from '../../../assets/images/icons/controls/plus.png';\nimport {onClickHandler} from '../../../utils/onclick';\n\ntype Props = {\n icon: string;\n control: ControlModel;\n homeValueTemperature: string;\n valueTemperature: string;\n click: () => void;\n temperatureClick: (isPlus: boolean) => void;\n};\n\nexport const TemperatureControlComponent = memo(function TemperatureControlComponent({icon, control, valueTemperature, homeValueTemperature, click, temperatureClick}: Props) {\n return (\n \n \n
\n img\n {control.name}\n
\n \n {homeValueTemperature}°\n \n \n {valueTemperature}°\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n );\n});\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {CONTROL_TYPE_ID_THERMOSTAT, ControlModel, ControlTypeModel, ThermostatImageSet} from '../../../types/control';\nimport {useRPC} from '../../../hooks/rpc';\nimport {TemperatureControlComponent} from './component';\nimport {useSelector} from 'react-redux';\nimport {useDebounce} from '../../../hooks/debounce';\nimport {useFilterSelector} from '../../../hooks/filter-selector';\n\ntype Props = {\n control: ControlModel;\n};\n\nexport const TemperatureControl = memo(function TemperatureControl({control}: Props) {\n const thermostatControlTypeList = useFilterSelector(\n state => state.control.controlTypeList,\n controlType => controlType.id === CONTROL_TYPE_ID_THERMOSTAT,\n []);\n const bridgeDeviceList = useSelector(state => state.control.bridgeDeviceList);\n const [rpc] = useRPC();\n const updateTemperature = useDebounce(rpc.updateTemperature, 200);\n const [whole, setWhole] = useState(control.temperature_settings.whole || 14);\n const [fraction, setFraction] = useState(whole === 14 ? 5 : control.temperature_settings.fraction || 0);\n const timeoutRef = useRef();\n const controlRef = useRef();\n controlRef.current = control;\n\n useEffect(() => {\n timeoutRef.current = setTimeout(() => {\n if (whole !== controlRef.current.temperature_settings.whole) {\n setWhole(controlRef.current.temperature_settings.whole);\n }\n if (fraction !== controlRef.current.temperature_settings.fraction) {\n setFraction(controlRef.current.temperature_settings.fraction);\n }\n timeoutRef.current = null;\n }, 2000);\n\n return () => clearTimeout(timeoutRef.current);\n // eslint-disable-next-line\n }, [fraction, whole]);\n\n useEffect(() => {\n if (timeoutRef.current == null) {\n setWhole(control.temperature_settings.whole);\n setFraction(control.temperature_settings.fraction);\n }\n }, [control]);\n\n const homeValueTemperature = useMemo(() => {\n for (const bridge_device of bridgeDeviceList) {\n if (bridge_device.id === control.temperature_settings.bridge_device_id) {\n return [bridge_device.room_temperature_whole, bridge_device.room_temperature_fraction];\n }\n }\n\n return [0, 0];\n }, [bridgeDeviceList, control]);\n\n const temperatureClick = useCallback((isPlus: boolean) => {\n let newWhole = whole;\n let newFraction = fraction;\n if (isPlus) {\n newFraction += 5;\n if (newFraction >= 10) {\n newFraction = 0;\n newWhole++;\n }\n } else {\n newFraction -= 5;\n if (newFraction < 0) {\n newFraction = 5;\n newWhole--;\n }\n }\n\n if (newWhole < 15) {\n newWhole = 14;\n newFraction = 5;\n } else if (newWhole > 32) {\n newWhole = 33;\n newFraction = 0;\n }\n\n setWhole(newWhole);\n setFraction(newFraction);\n updateTemperature(control.id, newWhole, newFraction);\n }, [control.id, fraction, updateTemperature, whole]);\n\n // const burning = useMemo(() => {\n // if (whole > homeValueTemperature[0]) {\n // return true;\n // }\n //\n // if (whole === homeValueTemperature[0]) {\n // return fraction > homeValueTemperature[1];\n // }\n //\n // return false;\n // }, [fraction, whole, homeValueTemperature]);\n\n const icon: string = useMemo(function () {\n if (thermostatControlTypeList.length === 0) {\n return null;\n }\n\n const controlType = thermostatControlTypeList[0];\n const imageSet = (controlType as ControlTypeModel).image_set;\n if (control.current_value === 1) {\n return control.temperature_settings.is_mode_heating ? imageSet.heat_on : imageSet.cold_on;\n } else {\n return control.temperature_settings.is_mode_heating ? imageSet.heat_off : imageSet.cold_off;\n }\n }, [control.current_value, control.temperature_settings.is_mode_heating, thermostatControlTypeList]);\n const click = useCallback(() => {\n if (control.temperature_settings.has_heating && control.temperature_settings.has_cooling) {\n rpc.changeHeatingMode(control.id);\n }\n }, [rpc, control]);\n\n return (\n \n );\n});\n","import React, {memo} from 'react';\nimport {\n CONTROL_TYPE_ID_DIMMER,\n CONTROL_TYPE_ID_THERMOSTAT,\n ControlModel,\n ControlTypeModel,\n ThreePhaseSet,\n} from '../../types/control';\nimport {useSelector} from 'react-redux';\nimport {SimpleControl} from '../SimpleControl';\nimport {ThreePhaseControl} from '../ThreePhaseControl';\nimport {DimmerControl} from '../Controls/DimmerControl';\nimport {TemperatureControl} from '../Controls/TemperatureControl';\n\nconst renderById = (control: ControlModel, controlType: ControlTypeModel) => {\n switch (control.type_id) {\n case CONTROL_TYPE_ID_DIMMER: {\n return (\n \n );\n }\n\n case CONTROL_TYPE_ID_THERMOSTAT: {\n return (\n \n );\n }\n }\n\n return null;\n};\n\nexport const Control = memo(function Item({control}: { control: ControlModel }) {\n const controlType = useSelector(\n state => state.control.controlTypeList.find(t => t.id === control?.type_id),\n );\n\n if (controlType == null) {\n return null;\n }\n\n if (controlType.render_type === 'simple' || controlType.render_type === 'pulse') {\n return (\n \n );\n }\n\n if (controlType.render_type === 'three_phase'||controlType.render_type === 'two_phase') {\n return (\n }\n control={control}\n />\n );\n }\n\n return renderById(control, controlType);\n});\n","import React, {memo, useCallback} from 'react';\nimport {ScenarioModel} from '../../store/control/state';\nimport {useDispatch} from 'react-redux';\nimport {toggleScenarioPopupScreenAction} from '../../store/ui/actions';\nimport {Column} from '../Column';\nimport {Widget} from '../Widget';\nimport {Button} from '../Button';\nimport scenarioIcon from '../../assets/images/icons/scenario/scenario.png';\nimport playingIcon from '../../assets/images/icons/scenario/scenario-playing.png';\nimport './scenario.scss';\n\nexport const Scenario = memo(function Scenario({scenario}: { scenario: ScenarioModel }) {\n const dispatch = useDispatch();\n const onClick = useCallback(() => {\n dispatch(toggleScenarioPopupScreenAction(scenario));\n }, [dispatch, scenario]);\n\n return (\n \n \n \n \n \n );\n});\n","import React, {memo} from 'react';\nimport {Column} from '../Column';\nimport {Widget} from '../Widget';\nimport {Button} from '../Button';\nimport {InputModel, SensorTypeModel} from '../../types/control';\nimport {useSelector} from 'react-redux';\n\nconst getImage = (sensor: InputModel, type: SensorTypeModel) => {\n if (!type) {\n return null;\n }\n\n if (sensor.sensor_settings.value) {\n return type.image_set.active;\n }\n\n return type.image_set.passive;\n};\n\nexport const Sensor = memo(\n function Sensor({sensor}: { sensor: InputModel }) {\n const type = useSelector(state => state.control.sensorTypeList.find(t => t.id === sensor.sensor_settings.sensor_type_id));\n return (\n \n \n \n \n \n );\n});\n\nexport function ScenarioPage() {\n const {t} = useLocalization();\n const dispatch = useDispatch();\n const scenarioList = useSelector(state => state.control.scenarioList);\n const scenarioTriggerList = useSelector(state => state.control.scenarioTriggerList);\n const scenarioTriggerControls = useFilterSelector(state => state.control.inputList, i => i.type_id === '3', []); // todo constant\n const scenarioStpUIList = useFilterSelector(state => state.control.stpUIList, (u) => u.type === 'scenario');\n\n const createScenario = useCallback(() => {\n dispatch(toggleScenarioScreenAction(null));\n }, [dispatch]);\n\n const createTrigger = useCallback(() => {\n dispatch(toggleScenarioTriggerScreenAction(null));\n }, [dispatch]);\n\n const openTrigger = useCallback((trigger: ScenarioTriggerModel) => {\n dispatch(toggleScenarioTriggerPopupScreenAction(trigger));\n }, [dispatch]);\n\n const openTriggerInput = useCallback((input: InputModel) => {\n dispatch(toggleScenarioTriggerInputScreenAction(input));\n }, [dispatch]);\n\n const openSTPUITrigger = useCallback((stpUIEntity: STPUIEntity) => {\n dispatch(toggleScenarioSTPUIInputScreenAction(stpUIEntity));\n }, [dispatch]);\n\n return (\n <>\n \n \n {\n scenarioList.map(scenario => (\n \n ))\n }\n \n \n \n {\n scenarioTriggerList.map(trigger => (\n openTrigger(trigger)}/>\n ))\n }\n {\n scenarioTriggerControls.map(input => (\n openTriggerInput(input)}/>\n ))\n }\n {\n scenarioStpUIList.map(stpUiEntity => (\n s.id === stpUiEntity.relational_id) != null ? scenarioIcon : triggerCreateIcon}\n title={stpUiEntity.display_name}\n onClick={() => openSTPUITrigger(stpUiEntity)}/>\n ))\n }\n \n \n );\n}\n","import {Container} from '../../components/Container';\nimport React, {memo} from 'react';\nimport {ScenarioPage} from '../../components/ScenarioPage';\n\nexport const ScenarioScreen = memo(function ScenarioScreen() {\n\n return (\n \n
\n \n
\n
\n );\n});\n","import {Row} from '../../components/Row';\nimport React, {memo, useCallback} from 'react';\nimport {Column} from '../../components/Column';\nimport {Widget} from '../../components/Widget';\nimport {Button} from '../../components/Button';\n\nimport warningIcon from '../../assets/images/icons/sensor/warning.png';\nimport {Container} from '../../components/Container';\nimport {useHistory} from 'react-router-dom';\nimport {Sensor} from '../../components/ItemList/sensor';\nimport {useSetSelector} from '../../hooks/set-selector';\nimport {useFilterSelector} from '../../hooks/filter-selector';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const SensorScreen = memo(function SensorScreen() {\n const {t} = useLocalization();\n const inputTypeSet = useSetSelector(state => state.control.inputTypeList);\n const sensorList = useFilterSelector(state => state.control.inputList, i => inputTypeSet[i.type_id]?.primitive_name === 'sensor', [inputTypeSet]);\n\n const history = useHistory();\n\n const goSettingsPage = useCallback(() => {\n history.push('/settings/sensors');\n }, [history]);\n\n return (\n \n
\n \n \n \n
\n
\n );\n});\n","import React, {memo} from 'react';\nimport {ControlModel, InputModel, MediaModel} from '../../types/control';\nimport {Control} from './control';\nimport {ScenarioModel} from '../../store/control/state';\nimport {Scenario} from './scenario';\nimport {Sensor} from './sensor';\nimport {Media} from '../Controls/AirConditionerControl';\n\nexport type ItemListProps = {\n controls?: ControlModel[];\n scenarios?: ScenarioModel[];\n sensors?: InputModel[];\n medias?: MediaModel[];\n};\n\nexport const ItemList = memo(function ItemList({controls, scenarios, sensors, medias}: ItemListProps) {\n return (\n <>\n {\n renderIf(medias)(() =>\n medias.map(media => (\n \n )),\n )\n }\n {\n renderIf(controls)(() =>\n controls.map(control => (\n \n )),\n )\n }\n {\n renderIf(scenarios)(() =>\n scenarios.map(scenario => (\n \n )),\n )\n }\n {\n renderIf(sensors)(() =>\n sensors.map(sensor => (\n \n )),\n )\n }\n \n );\n});\n","import React, {memo} from 'react';\nimport {useFilterSelector} from '../../hooks/filter-selector';\nimport {ItemList} from '../ItemList';\n\nexport const MediaRenderer = memo(function MediaRenderer(props: { type: string; }) {\n const mediaList = useFilterSelector(\n state => state.control.mediaList,\n m => (props.type === 'air' && m.type_id === '1') || (props.type !== 'air' && m.type_id !== '1'),\n );\n\n return (\n \n );\n});\n","import React, {memo} from 'react';\nimport {ItemList} from '../ItemList';\nimport {useFilterSelector} from '../../hooks/filter-selector';\n\nexport const ControlRenderer = memo(function ControlRenderer(props: { controlTypeId: string }) {\n const controls = useFilterSelector(\n state => state.control.controlList,\n c => c.type_id === props.controlTypeId,\n );\n\n return (\n \n );\n});\n","import {Container} from '../../components/Container';\nimport React, {memo} from 'react';\nimport {useParams} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {MediaRenderer} from '../../components/MediaRenderer';\nimport {ControlRenderer} from '../../components/ControlRenderer';\nimport {Row} from '../../components/Row';\n\nexport const PageScreen = memo(function PageScreen() {\n const params = useParams<{ id: string }>();\n const menuEntity = useSelector(state => state.control.menuList.find(i => i.id === params.id));\n\n return (\n \n
\n \n {\n menuEntity?.content_list?.map((content, i) => {\n if (content.type === 'control') {\n return (\n \n );\n } else if (content.type === 'media') {\n return (\n \n );\n }\n return null;\n })\n }\n \n
\n
\n );\n});\n","import {Container} from '../../components/Container';\nimport {Row} from '../../components/Row';\nimport React, {memo, ReactNode, useCallback} from 'react';\nimport {Button} from '../../components/Button';\nimport {Column} from '../../components/Column';\nimport {Widget} from '../../components/Widget';\nimport {\n setMediaScreenAction, setSTPUIMediaScreenAction,\n} from '../../store/ui/actions';\n\nimport mediaCreateIcon from '../../assets/images/icons/media/create-media.png';\nimport iconAirConditioner from '../../assets/images/icons/media/air-conditioner.png';\nimport iconMusicPlayer from '../../assets/images/icons/media/music-player.png';\nimport iconTV from '../../assets/images/icons/media/tv.png';\nimport iconSatellite from '../../assets/images/icons/media/satellite.png';\nimport iconProjection from '../../assets/images/icons/media/projection.png';\nimport iconOther from '../../assets/images/icons/media/other.png';\n\nimport {MediaModel} from '../../types/control';\nimport {useHistory} from 'react-router-dom';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useFilterSelector} from '../../hooks/filter-selector';\nimport {STPUIEntity} from '../../store/control/state';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const mediaIcons = {\n 'create': mediaCreateIcon,\n 'tv': iconTV,\n 'air-conditioner': iconAirConditioner,\n 'music-player': iconMusicPlayer,\n 'satellite': iconSatellite,\n 'projection': iconProjection,\n 'other': iconOther,\n};\n\nconst MyButton = memo(function MyButton({\n typeId,\n media,\n title,\n onClick,\n children,\n }: { media?: MediaModel | STPUIEntity, typeId: string, title: string, onClick: (media?: MediaModel | STPUIEntity) => void, children?: ReactNode }) {\n return (\n \n \n \n \n \n );\n});\n\nexport const MediaListScreen = memo(function MediaListScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n const mediaList = useSelector(state => state.control.mediaList);\n const stpUIMediaList = useFilterSelector(state => state.control.stpUIList, (u) => u.type === 'media' || u.type === 'air');\n const dispatch = useDispatch();\n\n const onCreatePress = useCallback(() => history.push('/media-remote/create'), [history]);\n const onControlPress = useCallback((media: MediaModel) => dispatch(setMediaScreenAction(media)), [dispatch]);\n const onSTPUIMediaPress = useCallback((media: STPUIEntity) => dispatch(setSTPUIMediaScreenAction(media)), [dispatch]);\n\n return (\n \n
\n \n \n {\n mediaList.map(media => (\n \n ))\n }\n \n \n {\n stpUIMediaList.map(stpUIMedia => (\n m.id === stpUIMedia.relational_id)?.icon || 'create'}\n title={stpUIMedia.display_name}\n onClick={onSTPUIMediaPress}/>\n ))\n }\n \n
\n
\n );\n});\n","import {Container} from '../../components/Container';\nimport React, {memo, useCallback, useMemo, useRef, useState} from 'react';\nimport {useLocalization} from '../../hooks/localization';\nimport {Row} from '../../components/Row';\nimport {Column} from '../../components/Column';\nimport {Widget} from '../../components/Widget';\nimport {Button} from '../../components/Button';\nimport intercomIcon from '../../assets/images/icons/intercom.png';\nimport {useRPC} from '../../hooks/rpc';\nimport './index.scss';\nimport {useKeyboard} from '../../hooks/keyboard';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useHistory} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {useSet} from '../../hooks/set';\nimport {useMessage} from '../../hooks/message';\nimport leftArrowIcon from '../../assets/images/icons/media/left.png';\n\ntype ConciergeItemType = {\n id: string;\n name: string;\n}\n\nexport const ConciergeMessageScreen = memo(\n function ConciergeMessageScreen({selected, back}: { selected: ConciergeItemType, back: () => void }) {\n const {t} = useLocalization();\n const {success, failure} = useMessage();\n const [rpc] = useRPC();\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const inputRef = useRef(null);\n const [message, setMessage] = useState('');\n\n const conciergeRequest = useCallback(() => {\n rpc.createConciergeRequest(selected.id, message).then(() => {\n success(t('concierge_request_success'));\n }).catch(failure);\n back();\n }, [rpc, selected?.id, message, failure, back, success, t]);\n\n const onFocus = useCallback(() => {\n setActiveInput([inputRef, message, setMessage]);\n }, [message, setActiveInput]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n return (\n <>\n
\n
\n \n {selected.name}\n
\n
\n setMessage(e.target.value)}\n onFocus={onFocus}\n onBlur={onBlur}\n value={message}\n ref={inputRef}\n />\n \n
\n
\n {\n renderKeyboard()\n }\n \n );\n },\n);\n\nexport const ConciergeScreen = memo(function ConciergeScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n const conciergeList = useSelector(state => state.control.conciergeList);\n\n const filteredConciergeList = useMemo(() => {\n return conciergeList?.filter(item => item.info?.url) || [];\n }, [conciergeList]);\n\n const conciergeTypeSet = useSet(useSelector(state => state.control.conciergeTypeList));\n\n const [selected, setSelected] = useState(null);\n\n const itemClicked = useCallback((item: ConciergeItemType) => {\n setSelected(item);\n }, []);\n\n const goToMeetingPage = useCallback(() => {\n history.push('/meeting');\n }, [history]);\n\n return (\n \n
\n {\n renderIf(!selected)(() => (\n \n \n \n \n \n \n {\n filteredConciergeList.map(item => (\n \n \n \n \n \n ))\n }\n \n ), () => (\n setSelected(null)}/>\n ))\n }\n
\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\n\nimport './index.scss';\nimport {onClickHandler} from '../../utils/onclick';\n\ntype Props = {\n hash: string;\n onKeyPress: (key: string) => void;\n specialKeys?: { [key: string]: ReactNode | string };\n};\n\nexport const NumpadExtended = memo(function NumpadExtended({hash, onKeyPress, specialKeys}: Props) {\n return (\n
\n
\n {hash}\n
\n onKeyPress('1'))}>1\n onKeyPress('2'))}>2\n onKeyPress('3'))}>3\n
\n
\n onKeyPress('4'))}>4\n onKeyPress('5'))}>5\n onKeyPress('6'))}>6\n
\n
\n onKeyPress('7'))}>7\n onKeyPress('8'))}>8\n onKeyPress('9'))}>9\n
\n
\n {\n renderIf(specialKeys?.['*'])(() => (\n onKeyPress('*'))}>{specialKeys['*']}\n ), () => (\n \n ))\n }\n onKeyPress('0'))}>0\n {\n renderIf(specialKeys?.['#'])(() => (\n onKeyPress('#'))}>{specialKeys['#']}\n ), () => (\n \n ))\n }\n
\n
\n
\n );\n});\n","import React, {ReactNode, useMemo, useState} from 'react';\nimport {NumpadExtended} from '../components/NumpadExtended';\n\ntype SpecialKeysType = { [key: string]: ReactNode | string };\n\nconst defaultSpecialKeys: SpecialKeysType = {\n \"*\": \"*\",\n \"#\": \"#\",\n};\n\nexport function useNumpadExtended(disabled: boolean, specialKeys: SpecialKeysType = {}, onKeyPressed?: (key: string, input: string) => void): [() => ReactNode, string, (name: string) => void] {\n const [input, setInput] = useState('');\n const getInput = useMemo(\n () => input ? input : '',\n [input],\n );\n\n const keyPad = (key: string) => {\n if (disabled) {\n if (input !== '') {\n setInput('');\n }\n return;\n }\n\n if (onKeyPressed) {\n onKeyPressed(key, input);\n }\n\n if (key === '#') {\n if (input.length === 0) {\n return;\n }\n setInput(input => input.substring(0, input.length - 1));\n } else if (key === \"*\") {\n return;\n } else {\n if (input.length >= 4) {\n return;\n }\n setInput(input => input + key);\n }\n };\n\n const renderNumpad = () => {\n return (\n \n );\n };\n\n return [renderNumpad, input, setInput];\n}\n","import React, {memo, useCallback, useMemo} from 'react';\nimport {useNumpadExtended} from '../../hooks/numpad-extended';\nimport startCallIcon from './../../assets/images/icons/call-screen/call_start.png';\nimport leftArrowIcon from './../../assets/images/icons/media/left.png';\nimport {Row} from '../../components/Row';\nimport {Column} from '../../components/Column';\nimport {ConciergeModel} from '../../types/concierge';\nimport {useRPC} from '../../hooks/rpc';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Container} from '../../components/Container';\nimport './index.scss';\nimport {ConciergeTypeModel} from '../../types/concierge-type';\nimport {useSet} from '../../hooks/set';\nimport {Image} from '../../components/Image';\nimport {useLocalization} from '../../hooks/localization';\nimport {useHistory} from 'react-router-dom';\nimport {setIntercomStatusAction} from \"../../store/control/actions\";\nimport {useUpdate} from \"../../hooks/update-effect\";\nimport {useMessage} from \"../../hooks/message\";\n\nconst ConciergeItemComponent = memo(function ConciergeItemComponent(props: { concierge: ConciergeModel, conciergeType: ConciergeTypeModel }) {\n const [rpc] = useRPC();\n const {concierge, conciergeType} = props;\n\n const onClick = useCallback(() => {\n rpc.callIntercom(concierge.info.sip);\n }, [rpc, concierge?.info?.sip]);\n\n return (\n
\n
\n {concierge.name}\n
\n {concierge.name}\n
\n );\n});\n\nconst specialKeys = {\n '*': \"call\"/,\n '#': \"delete\"/,\n};\n\nexport const MeetingScreen = memo(function MeetingScreen() {\n const {t} = useLocalization();\n const history = useHistory();\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n const conciergeList = useSelector(state => state.control.conciergeList);\n const conciergeTypeSet = useSet(useSelector(state => state.control.conciergeTypeList));\n const status = useSelector(state=>state.control.intercomState.status);\n const {failure} = useMessage();\n\n const filteredConciergeList = useMemo(() => {\n return conciergeList?.filter(item => item.info?.sip) || [];\n }, [conciergeList]);\n\n const onKeyPressed = useCallback((key: string, input: string) => {\n if (key === '*') {\n rpc.callIntercom(input)\n .then(() => {\n dispatch(setIntercomStatusAction('incoming', false, input, input));\n });\n }\n }, [rpc]);\n\n const [renderNumpad] = useNumpadExtended(false, specialKeys, onKeyPressed);\n\n const onBackClick = () => {\n history.push('/concierge');\n };\n\n useUpdate(()=>{\n if(status === 'ended'){\n failure(t(\"error_call\"), true)\n }\n },[status]);\n\n return (\n \n
\n
\n
\n \n {t('enter_flat_no_wish_to_call')}\n
\n
\n \n {\n filteredConciergeList.map(item => (\n \n \n \n ))\n }\n \n
\n
\n
\n {\n renderNumpad()\n }\n
\n
\n
\n );\n});\n","import {DependencyList, EffectCallback, useEffect, useRef} from 'react';\n\nexport function useUpdate(effect: EffectCallback, deps?: DependencyList, hook = useEffect) {\n const mountingRef = useRef(true);\n hook(() => {\n if (mountingRef.current) {\n mountingRef.current = false;\n } else {\n return effect();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n","const dayNames = [\n 'SUNDAY',\n 'MONDAY',\n 'TUESDAY',\n 'WEDNESDAY',\n 'THURSDAY',\n 'FRIDAY',\n 'SATURDAY',\n];\n\nexport function formatNumber(value: number, digitCount = 2): string {\n const output = value.toString();\n if (output.length < digitCount) {\n return Array(digitCount - output.length).fill(0).join('') + output;\n\n }\n return output;\n\n}\n\nexport function getFormattedDayName(date: Date) {\n return dayNames[date.getDay()];\n}\n\nexport function getFormattedDate(date: Date) {\n return `${formatNumber(date.getDate())}.${formatNumber(date.getMonth() + 1)}.${formatNumber(date.getFullYear())}`;\n}\n\nexport function getFormattedTime(date: Date) {\n return `${formatNumber(date.getHours())}:${formatNumber(date.getMinutes())}`;\n}\n","import React, {memo, useCallback, useMemo, useState} from 'react';\nimport './index.scss';\nimport {getFormattedDate, getFormattedDayName, getFormattedTime} from '../../utils/format';\nimport {useInterval} from '../../hooks/interval';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const DateTime = memo(function DateTime() {\n const [counter, setCounter] = useState(0);\n const {t} = useLocalization();\n\n useInterval(useCallback(() => setCounter(counter => counter + 1), []), 1000);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const dateTime = useMemo(() => new Date(), [counter]);\n const time = useMemo(() => getFormattedTime(dateTime), [dateTime]);\n const date = useMemo(() => getFormattedDate(dateTime), [dateTime]);\n const dayName = useMemo(() => getFormattedDayName(dateTime), [dateTime]);\n\n return (\n
\n {time}\n
\n {date}\n {t(dayName)}\n
\n
\n );\n});\n","import React, {memo, useCallback, useMemo} from 'react';\nimport {useHistory} from 'react-router-dom';\n\nimport './index.scss';\n\nimport weatherIcon0 from '../../assets/images/icons/header/0.png';\nimport weatherIcon1 from '../../assets/images/icons/header/1.png';\nimport weatherIcon2 from '../../assets/images/icons/header/2.png';\nimport weatherIcon3 from '../../assets/images/icons/header/3.png';\nimport weatherIcon4 from '../../assets/images/icons/header/4.png';\nimport weatherIcon5 from '../../assets/images/icons/header/5.png';\nimport weatherIcon6 from '../../assets/images/icons/header/6.png';\nimport weatherIcon7 from '../../assets/images/icons/header/7.png';\nimport weatherIcon8 from '../../assets/images/icons/header/8.png';\nimport weatherIcon9 from '../../assets/images/icons/header/9.png';\nimport weatherIcon10 from '../../assets/images/icons/header/10.png';\n\nimport {DateTime} from '../DateTime';\nimport {useSelector} from 'react-redux';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useRPC} from '../../hooks/rpc';\nimport {useMessage} from '../../hooks/message';\n\nconst weatherIcons = [\n weatherIcon0,\n weatherIcon1,\n weatherIcon2,\n weatherIcon3,\n weatherIcon4,\n weatherIcon5,\n weatherIcon6,\n weatherIcon7,\n weatherIcon8,\n weatherIcon9,\n weatherIcon10,\n];\n\nexport const Header = memo(function Header({locked}: { locked: boolean }) {\n const history = useHistory();\n const [rpc] = useRPC();\n const {success} = useMessage();\n // const location = useLocation();\n // const question = useQuestion();\n // const [rpc] = useRPC();\n // const dispatch = useDispatch();\n // const role = useSelector(state => state.ui.role);\n\n const {icon, temperature} = useSelector(state => state.temperature);\n\n const onClick = useCallback(() => {\n // if (role != null && role !== 'default') {\n // e.preventDefault();\n // if (location.pathname.includes('/settings')) {\n // question('Çıkış yapmak ister misiniz?', () => {\n // rpc.doLogout();\n // dispatch(clearUserAction());\n // removeSession();\n // history.push('/');\n // }, () => {\n // history.push('/');\n // }, {text: 'Evet', timed: false}, true);\n // return;\n // }\n // }\n\n history.push('/');\n }, [history]);\n\n const onDateTimeClick = useCallback(() => {\n rpc.broadcastTimeAndWeather();\n rpc.getRTC();\n success(\"\", true)\n }, [rpc]);\n\n return (\n
\n \n inohom\n \n
\n
\n \"weather\"/\n {temperature.toString()} °C\n
\n
\n
\n \n
\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\n\ntype Props = {\n locked: boolean;\n children?: ReactNode;\n};\n\nexport const Sidebar = memo(function Sidebar({locked, children}: Props) {\n return (\n \n
\n {children}\n
\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\nimport {NavLink} from 'react-router-dom';\nimport {onClickHandler} from '../../utils/onclick';\n\ntype Props = {\n routerLink?: string;\n onClick?: (e?: any) => void;\n title: string;\n iconUrl?: string;\n passiveIconUrl?: string;\n closedIconUrl?: string;\n exact: boolean;\n children?: ReactNode;\n};\n\nexport const MenuItem = memo(function MenuItem({routerLink, onClick, title, iconUrl, children, exact}: Props) {\n const content = (\n <>\n \n
\n {title}\n
\n \n );\n\n return (\n <>\n {\n renderIf(!!routerLink)(() =>\n \n {content}\n ,\n () =>\n ,\n )\n }\n {children}\n \n );\n});\n","import arrowLeftBlue from '../../assets/images/icons/footer/arrow-left-blue.png';\nimport infoButton from '../../assets/images/icons/footer/info-btn-icon-color.png';\nimport playIcon from '../../assets/images/icons/footer/play.png';\nimport scenarioIcon from '../../assets/images/icons/footer/scenario.png';\nimport sitemapActive from '../../assets/images/icons/footer/sitemap-open.png';\nimport wifiPassive from '../../assets/images/icons/footer/wifi-close.png';\nimport cloudPassive from '../../assets/images/icons/footer/cloud-close.png';\nimport knxPassive from '../../assets/images/icons/footer/knx-close.png';\nimport React, {memo, useCallback, useMemo} from 'react';\nimport {ScenarioModel} from '../../store/control/state';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useHistory} from 'react-router-dom';\nimport {useQuestion} from '../../hooks/question';\nimport {clearUserAction} from '../../store/user/action';\nimport {removeSession} from '../../utils/session-storage';\nimport {useRPC} from '../../hooks/rpc';\nimport {useLocalization} from \"../../hooks/localization\";\n\ntype Props = {\n locked: boolean;\n scenarioModelList: ScenarioModel[];\n onScenarioClick: (scenario: ScenarioModel) => void;\n};\nconst explode = () => {\n throw new Error('kaboom');\n};\n\nexport const FooterComponent = memo(function FooterComponent(props: Props) {\n const {t} = useLocalization();\n const history = useHistory();\n const question = useQuestion();\n const [rpc] = useRPC();\n const dispatch = useDispatch();\n\n const userList = useSelector(state => state.control.userList);\n const username = useSelector(state => state.user.username);\n const currentUser = useMemo(() => userList.find((u) => u.username === username), [userList, username]);\n const {locked, scenarioModelList, onScenarioClick} = props;\n const isBackButtonOpen = false;\n\n const onEditPress = useCallback(() => {\n history.push('/settings/users/edit/' + currentUser.id);\n }, [currentUser, history]);\n\n const onLoginPress = useCallback(() => {\n history.push('/settings/login');\n }, [history]);\n\n const onLogoutPress = useCallback(() => {\n question(t('DO_YOU_WANT_TO_LOG_OUT'), () => {\n rpc.doLogout();\n dispatch(clearUserAction());\n removeSession();\n });\n }, [t, dispatch, question, rpc]);\n\n return (\n
\n
\n \n \n {isBackButtonOpen ? '' : t('MESSAGES')}\n \n {\n scenarioModelList.map(scenarioModel => {\n return (\n onScenarioClick(scenarioModel))}>\n \n {scenarioModel.name}\n \n );\n })\n }\n
\n {\n renderIf(username !== 'default')(() =>\n <>\n
\n {t('WELCOME_NAME',{username})}\n
\n
\n {t('LOG_OUT')}\n
\n ,\n )\n }\n {\n renderIf(username === 'default' && (history.location.pathname === '/settings' || history.location.pathname === '/developer'))(() =>\n
\n {t('LOGIN')}\n
,\n )\n }\n
\n {\n renderIf(!(history.location.pathname === '/settings' || history.location.pathname === '/developer'))(() =>\n
\n \n \n \n \n
,\n )\n }\n
\n
\n );\n});\n","import React, {memo} from 'react';\nimport './index.scss';\n\nimport {FooterComponent} from './component';\n\nimport {toggleScenarioPopupScreenAction} from '../../store/ui/actions';\nimport {ScenarioModel} from '../../store/control/state';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n locked: boolean;\n};\n\nexport const Footer = memo(function Footer(props: Props) {\n const dispatch = useDispatch();\n const scenarioList = useSelector(state => state.control.scenarioList);\n const scenarioListFiltered = scenarioList\n .filter(scenario => scenario.show_on_footer)\n .slice(0, 4);\n\n return (\n dispatch(toggleScenarioPopupScreenAction(scenario))}/>\n );\n});\n","import React, {memo, useCallback, useState} from 'react';\nimport {useInterval} from '../../hooks/interval';\n\nexport const Timer = memo(function Timer() {\n const [second, setSecond] = useState(0);\n\n useInterval(useCallback(() => setSecond(second => second + 1), []), 1000);\n\n let minuteStr = Math.floor(second / 60).toString();\n let secondStr = (second % 60).toString();\n if (minuteStr.length < 2) {\n minuteStr = '0' + minuteStr;\n }\n\n if (secondStr.length < 2) {\n secondStr = '0' + secondStr;\n }\n\n const minuteAndSecondString = `${minuteStr}:${secondStr}`;\n\n return (\n \n {minuteAndSecondString}\n \n );\n});\n","import React, {memo, useCallback, useEffect, useRef, useState} from 'react';\nimport './index.scss';\nimport {setBellStatusAction, setIntercomStatusAction} from '../../store/control/actions';\nimport iconCallGreen from '../../assets/images/icons/call-screen/icon-call-green.png';\nimport iconCallEndRed from '../../assets/images/icons/call-screen/call-end-red.png';\nimport {useRPC} from '../../hooks/rpc';\nimport yellowDoorIcon from '../../assets/images/icons/intercom/door_open1_icon.png';\nimport blueDoorIcon from '../../assets/images/icons/intercom/door_open2_icon.png';\nimport pingDoorIcon from '../../assets/images/icons/intercom/door_open3_icon.png';\nimport limeDoorIcon from '../../assets/images/icons/intercom/door_open4_icon.png';\nimport {Timer} from '../../components/Timer';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {IntercomModel} from '../../types/intercom';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useOrientation} from '../../hooks/orientation';\nimport {useCurrentGateway} from '../../hooks/current-gateway';\nimport {CameraRenderer} from '../../components/CameraRenderer';\nimport {WindowUtil} from '../../utils/window';\nimport {useBackground} from '../../hooks/background-class';\nimport {useLocalization} from '../../hooks/localization';\n\nconst doors = [yellowDoorIcon, blueDoorIcon, pingDoorIcon, limeDoorIcon];\nconst colors = ['yellow', 'blue', 'pink', 'lime'];\n\nexport const CallScreen = memo(function CallScreen() {\n const [, , backgroundStyle] = useBackground();\n const {t} = useLocalization();\n const videoElement = useRef();\n const dispatch = useDispatch();\n const gateway = useCurrentGateway();\n const orientation = useOrientation();\n const [rpc] = useRPC();\n const intercomState = useSelector(state => state.control.intercomState);\n const bellStatus = useSelector(state => state.control.bellStatus);\n const doorList = useSelector(state => state.control.doorList);\n const intercomSoundLevelDB = useSelector(state => state.control.sound.intercom_level);\n const incomingCallSoundLevelDB = useSelector(state => state.control.sound.incoming_call_outside_panel_level);\n const hasUSBCamera = gateway?.settings.intercom.has_usb_camera;\n\n const {status, info, is_incoming_call, name: intercomName} = intercomState;\n const [cameraId, setCameraId] = useState(null);\n const [noImage, setNoImage] = useState(false);\n const [name, setName] = useState('');\n const [mediaPath, setMediaPath] = useState(null);\n const [isCallOpen, setIsCallOpen] = useState(false);\n const [isCallStarted, setIsCallStarted] = useState(false);\n const [isIndoorCall, setIsIndoorCall] = useState(false);\n const [intercomSoundLevel, setIntercomSoundLevel] = useState(0);\n const [disabledLookup, setDisabledLookup] = useState({});\n\n const answerCall = useCallback((responseMessage: string) => {\n rpc.answerIntercomRequest(responseMessage);\n }, [rpc]);\n\n const openDoor = useCallback((door_id: string) => {\n if (disabledLookup[door_id]) {\n return;\n }\n\n rpc.openDoor(door_id);\n\n setDisabledLookup(lookup => ({\n ...lookup,\n [door_id]: true,\n }));\n\n setTimeout(() => {\n setDisabledLookup(lookup => ({\n ...lookup,\n [door_id]: false,\n }));\n }, 3000);\n }, [disabledLookup, rpc]);\n\n const hangUp = useCallback(() => {\n if (isIndoorCall) {\n dispatch(setBellStatusAction(null));\n } else {\n if (status === 'special') {\n dispatch(setIntercomStatusAction('ended', true));\n } else {\n answerCall('hang-up');\n }\n }\n }, [answerCall, dispatch, isIndoorCall, status]);\n\n const setInfo = useCallback((info: IntercomModel) => {\n let name = intercomName;\n let cameraId: string = null;\n\n if (info) {\n if (info.camera_id) {\n cameraId = info.camera_id;\n }\n\n if (!name) {\n if (info.name) {\n name = info.name;\n } else if (info.sip_id) {\n name = info.sip_id + ' ' + t('NUMBER_NO');\n }\n }\n }\n\n if (cameraId) {\n setCameraId(cameraId);\n setNoImage(false);\n } else {\n setNoImage(true);\n }\n\n setName(name ?? t('UNKNOWN_NUMBER'));\n }, [t, intercomName]);\n\n const changeSound = useCallback((newLevel: number) => {\n if (newLevel < 0) {\n changeSound(0);\n } else if (newLevel > 100) {\n changeSound(100);\n } else {\n rpc.updateSoundLevel(newLevel)\n .then(() => {\n setIntercomSoundLevel(newLevel);\n });\n }\n }, [rpc]);\n\n const increaseSound = useCallback(() => {\n changeSound(intercomSoundLevel + 10);\n }, [changeSound, intercomSoundLevel]);\n\n const decreaseSound = useCallback(() => {\n changeSound(intercomSoundLevel - 10);\n }, [changeSound, intercomSoundLevel]);\n\n useEffect(() => {\n if (isCallStarted) {\n setIntercomSoundLevel(intercomSoundLevelDB);\n } else {\n setIntercomSoundLevel(incomingCallSoundLevelDB);\n }\n }, [isCallStarted, intercomSoundLevelDB, incomingCallSoundLevelDB]);\n\n useEffect(() => {\n if (isCallOpen && videoElement.current) {\n videoElement.current.srcObject = mediaPath;\n }\n\n return () => {\n if (mediaPath) {\n mediaPath.getTracks()[0].stop();\n }\n };\n // eslint-disable-next-line\n }, [mediaPath, isCallOpen]);\n\n useEffect(\n () => {\n switch (status) {\n case 'special':\n setInfo(info);\n setIsCallOpen(true);\n setIsCallStarted(true);\n break;\n case 'incoming':\n setInfo(info);\n setIsCallOpen(true);\n setIsCallStarted(false);\n break;\n case 'timeout':\n case 'rejected':\n case 'ended':\n case 'failed':\n case 'cancelled':\n if (!isIndoorCall) {\n setIsCallOpen(false);\n setIsCallStarted(false);\n }\n break;\n case 'in_call':\n setIsCallStarted(true);\n break;\n }\n },\n [status, isCallStarted, isCallOpen, isIndoorCall, cameraId, info, setInfo],\n );\n\n useEffect(\n () => {\n if (bellStatus === 'incoming') {\n if (isCallOpen) {\n return;\n }\n\n if (hasUSBCamera) {\n setName(t('DOORBELL'));\n navigator.mediaDevices.getUserMedia({video: true})\n .then(stream => {\n if (mediaPath !== stream) {\n setMediaPath(stream);\n setNoImage(false);\n }\n })\n .finally(() => {\n setIsCallOpen(true);\n setIsCallStarted(true);\n setIsIndoorCall(true);\n });\n } else {\n setName(t('DOORBELL'));\n setNoImage(true);\n setIsCallOpen(true);\n setIsCallStarted(true);\n setIsIndoorCall(true);\n }\n } else {\n if (isIndoorCall) {\n setIsIndoorCall(false);\n setIsCallStarted(false);\n setIsCallOpen(false);\n }\n }\n },\n // eslint-disable-next-line\n [bellStatus, isCallOpen, isIndoorCall, mediaPath],\n );\n\n useEffect(() => {\n let timeout;\n if (isCallOpen) {\n timeout = setTimeout(() => {\n hangUp();\n }, 60 * 1000);\n }\n\n return () => {\n clearTimeout(timeout);\n };\n\n // eslint-disable-next-line\n }, [isCallOpen]);\n\n useEffect(() => {\n if (isCallOpen) {\n WindowUtil.cancel();\n } else {\n WindowUtil.stop();\n }\n }, [isCallOpen]);\n\n if (!isCallOpen) {\n return null;\n }\n\n return (\n
\n {\n renderIf(!isIndoorCall && !noImage)(() =>\n ,\n () =>\n
\n );\n});\n","import {useCallback, useEffect, useRef} from 'react';\n\nconst isTouchable = 'ontouchstart' in document.documentElement;\n\nexport function useOutsideDetector(enabled: boolean, callback: () => void) {\n const callbackRef = useRef<() => void>();\n const ref = useRef(null);\n\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n const handleClickOutside = useCallback((e: Event) => {\n if (!enabled) {\n return;\n }\n\n if (ref.current && !ref.current.contains(e.target)) {\n callbackRef.current();\n }\n }, [enabled]);\n\n useEffect(() => {\n document.body.addEventListener(isTouchable ? 'touchstart' : 'mousedown', handleClickOutside);\n return () => {\n document.body.removeEventListener(isTouchable ? 'touchstart' : 'mousedown', handleClickOutside);\n };\n }, [handleClickOutside]);\n return ref;\n}\n","import React, {memo, useCallback, useState} from 'react';\nimport './index.scss';\n\nimport iconInfo from '../../assets/images/icons/pop-up/media.png';\nimport iconFailure from '../../assets/images/icons/pop-up/cancel.png';\nimport iconSuccess from '../../assets/images/icons/pop-up/ok.png';\nimport {closePopupScreenAction} from '../../store/ui/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useOutsideDetector} from '../../hooks/outside-detector';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useOrientation} from '../../hooks/orientation';\nimport {useInterval} from '../../hooks/interval';\nimport {useLocalization} from \"../../hooks/localization\";\n\n\nexport const PopupScreen = memo(function PopupScreen() {\n const {t} = useLocalization();\n const popupState = useSelector(state => state.ui.popupState);\n const dispatch = useDispatch();\n const orientation = useOrientation();\n let {type, icon, message, callback, positive_button, showCancel} = popupState;\n\n const centerAreaRef = useOutsideDetector(type !== 'question' && popupState.closable, () => {\n dispatch(closePopupScreenAction());\n });\n\n const [remainingTime, setRemainingTime] = useState(positive_button.timed ? 3000 : 0);\n\n const clearInt = useInterval(() => {\n setRemainingTime(r => r - 1000);\n if (remainingTime <= 0) {\n clearInt();\n }\n }, 1000);\n\n if (icon == null) {\n if (type === 'info') {\n icon = iconInfo;\n } else if (type === 'failure') {\n icon = iconFailure;\n } else if (type === 'success') {\n icon = iconSuccess;\n }\n }\n\n const answer = useCallback((isApproved: boolean) => {\n dispatch(closePopupScreenAction());\n if (callback) {\n callback(isApproved);\n }\n }, [dispatch, callback]);\n\n const onPositiveButtonClick = useCallback(() => {\n if (remainingTime > 0) {\n return;\n }\n\n answer(true);\n }, [remainingTime, answer]);\n\n const onCancelClick = useCallback(() => {\n dispatch(closePopupScreenAction());\n }, [dispatch]);\n\n return (\n
\n {\n renderIf(type !== 'question')(\n () =>\n
\n \"\"/\n {message}\n
,\n () =>\n
\n {message}\n
\n
answer(false))}>\n \"\"/\n {t('NO')}\n
\n \n {\n renderIf(remainingTime <= 0)(() =>\n \"\"/, () =>\n {`${Math.ceil(remainingTime / 1000).toString()}`})\n }\n {positive_button.text}\n
\n {\n renderIf(showCancel === true)(() => // todo iptal et icon\n
\n \"\"/\n {t('CANCEL_2')}\n
,\n )\n }\n
\n
,\n )\n }\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\nimport {Container} from '../Container';\nimport {useLocalization} from \"../../hooks/localization\";\n\ntype Props = {\n isConnected: boolean;\n retryCount: number;\n children?: ReactNode;\n};\n\nconst ConnectionIndicator = memo(function ConnectionIndicator({retryCount}: { retryCount: number }) {\n const {t} = useLocalization();\n return (\n \n
\n {t('TRYING_TO_CONNECT')}\n {renderIf(retryCount > 4)(() =>\n <>\n
\n {t('NUMBER_OF_ATTEMPTS', {retryCount:retryCount.toString()})}\n ,\n )}\n
\n
\n );\n});\n\nexport const Viewport = memo(function Viewport({children, isConnected, retryCount}: Props) {\n return (\n <>\n {\n renderIf(isConnected)(() => children, () => )\n }\n \n );\n});\n","import React, {useEffect, useState, Fragment, useRef, memo, useCallback} from 'react';\nimport {\n ALARM_VALUE_HOME, ALARM_VALUE_OUTSIDE,\n CONTROL_TYPE_ID_ALARM,\n CONTROL_TYPE_ID_DIMMER, CONTROL_TYPE_ID_ELEVATOR,\n CONTROL_TYPE_ID_THERMOSTAT,\n ControlModel,\n ControlTypeModel, MEDIA_TYPE_ID_AIR_CONDITIONER, MediaModel,\n} from '../../types/control';\nimport {useForceUpdate} from '../../hooks/force-update';\nimport {toggleScenarioScreenAction} from '../../store/ui/actions';\n\nimport './index.scss';\n\nimport iconMinus from '../../assets/images/icons/controls/minus.png';\nimport iconPlus from '../../assets/images/icons/controls/plus.png';\nimport iconUpButton from '../../assets/images/icons/controls/up-button.png';\nimport iconEqualButton from '../../assets/images/icons/controls/equal-button.png';\nimport iconDownButton from '../../assets/images/icons/controls/down-button.png';\nimport iconCancel from '../../assets/images/icons/scenario/cancel.png';\nimport iconSave from '../../assets/images/icons/scenario/save.png';\nimport iconUpArrow from '../../assets/images/icons/scenario/up-arrow.png';\nimport iconDownArrow from '../../assets/images/icons/scenario/down-arrow.png';\nimport iconClear from '../../assets/images/icons/scenario/clear.png';\n\nimport {useKeyboard} from '../../hooks/keyboard';\nimport {ScenarioModel} from '../../store/control/state';\nimport {useRPC} from '../../hooks/rpc';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {usePrevious} from '../../hooks/previous';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useSetSelector} from '../../hooks/set-selector';\nimport {useMessage} from '../../hooks/message';\nimport {mediaIcons} from '../MediaListScreen';\nimport {useLocalization} from \"../../hooks/localization\";\n\ntype DeviceInfo = {\n control: ControlModel;\n controlType: ControlTypeModel;\n media: MediaModel;\n value: number;\n};\n\ntype OperationInfo = {\n info: DeviceInfo;\n delay: number;\n}\n\n// const options = ['Hepsi', 'Oda', 'Kat', 'Tip', 'A-Z'];\nconst options = ['ALL', 'AREA', 'TYPE', 'A-Z'];\n\nconst checkSelected = (info: DeviceInfo, value: number) => info.value === value ? 'selected' : '';\n\nconst getNumber = (divider: number, delay: number) => {\n const value = Math.floor((delay / divider) % 60);\n if (value === 0) {\n return '';\n }\n\n let number = value.toFixed(0);\n if (number.length < 1) {\n number = '00';\n } else if (number.length < 2) {\n number = '0' + number;\n }\n\n return number;\n};\n\nconst getDelay = (delay: number, t: (text:string) => string = null) => {\n\n const sec = getNumber(1, delay);\n const min = getNumber(60, delay);\n\n let output = '';\n\n if (min !== '') {\n output += `${min} ${t ? t('minute') : 'dk'} `;\n }\n\n if (sec === '') {\n output += `00 ${t ? t('second') : 'sn'}`;\n } else {\n output += `${sec} ${t ? t('second') : 'sn'}`;\n }\n\n return output;\n};\nconst getImage = (info: DeviceInfo): string => {\n // if (info.controlType.id === '6') {\n // return info.controlType.image_set[`default_` + (info.control.settings as MediaDeviceSettings).media_control_icon.replace('-', '_')] ||\n // info.controlType.image_set.default;\n // } // todo media scenario\n return info.controlType.image_set.default;\n};\ntype DeviceProps = { info: DeviceInfo; setSelected: (info: DeviceInfo, value: number) => void; increase: (info: DeviceInfo, min: number, max: number) => void; };\n\nconst SimpleDevice = memo(function SimpleDevice({\n info,\n setSelected,\n isPulse,\n }: Partial & { isPulse?: boolean }) {\n const {t} = useLocalization();\n const setZero = useCallback(() => {\n setSelected(info, 0);\n }, [info, setSelected]);\n const setOne = useCallback(() => {\n setSelected(info, 1);\n }, [info, setSelected]);\n\n return (\n
\n {\n renderIf(!isPulse)(() => (\n
\n {info.controlType.render_type === 'pulse' ? t('CALL') : 'I'}\n
\n ))\n }\n {\n renderIf(info.controlType.render_type !== 'pulse' || isPulse)(() => (\n
\n 0\n
\n ))\n }\n
\n );\n});\n\nconst ThreePhaseDevice = memo(function ThreePhaseDevice({info, setSelected}: Partial) {\n return (\n
\n
setSelected(info, 1))}>\n \"\"/\n
\n {\n renderIf(info.controlType.render_type === 'three_phase')(() => (\n
setSelected(info, 0))}>\n \"\"/\n
\n ))\n }\n
setSelected(info, 2))}>\n \"\"/\n
\n
\n );\n});\n\nconst Device = memo(function Device({info, setSelected, increase}: DeviceProps) {\n const {t} = useLocalization();\n if (info.media != null) {\n if (info.media.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER) {\n return (\n
\n
setSelected(info, 1))}>\n I\n
\n
setSelected(info, 0))}>\n 0\n
\n
\n );\n } else {\n return (\n
\n
\n I/0\n
\n
\n );\n }\n }\n\n if (info.controlType.render_type === 'simple' || info.controlType.render_type === 'pulse') {\n return (\n \n );\n }\n\n if (info.controlType.render_type === 'three_phase' || info.controlType.render_type === 'two_phase') {\n return (\n \n );\n }\n\n switch (info.controlType.id) {\n case CONTROL_TYPE_ID_DIMMER:\n return (\n
\n
increase(info, -10, 0))}>\n \"\"/\n
\n
\n {info.value}\n
\n
increase(info, 10, 100))}>\n \"\"/\n
\n
\n );\n case CONTROL_TYPE_ID_ALARM:\n return (\n
\n
setSelected(info, ALARM_VALUE_HOME))}>\n {t('HOME')}\n
\n
setSelected(info, ALARM_VALUE_OUTSIDE))}>\n {t('OUT')}\n
\n
\n );\n // case '6':\n // return (\n // \n // ); // todo media scenario\n case CONTROL_TYPE_ID_THERMOSTAT:\n return (\n
\n
increase(info, -5, 155))}>\n \"\"/\n
\n
\n {(info.value / 10).toFixed(1)}\n
\n
increase(info, 5, 320))}>\n \"\"/\n
\n
\n );\n }\n\n return (\n
\n\n
\n );\n});\n\nconst SimpleScenario = memo(function SimpleScenario({\n scenario,\n isPulse,\n }: { scenario: OperationInfo; isPulse?: boolean }) {\n const {t} = useLocalization();\n return (\n
\n {\n renderIf(!isPulse)(() => (\n
\n {scenario.info.controlType.render_type === 'pulse' ? t('CALL') : 'I'}\n
\n ))\n }\n {\n renderIf(scenario.info.controlType.render_type !== 'pulse' || isPulse)(() => (\n
\n 0\n
\n ))\n }\n
\n );\n});\n\nconst ThreePhaseScenario = memo(function SimpleScenario({scenario}: { scenario: OperationInfo }) {\n return (\n
\n
\n \"\"/\n
\n {\n renderIf(scenario.info.controlType.render_type === 'three_phase')(() => (\n
\n \"\"/\n
\n ))\n }\n
\n \"\"/\n
\n
\n );\n});\n\nconst Scenario = memo(function Scenario({scenario}: { scenario: OperationInfo }) {\n const {t} = useLocalization();\n if (scenario.info.media != null) {\n if (scenario.info.media.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER) {\n return (\n
\n
\n I\n
\n
\n 0\n
\n
\n );\n } else {\n return (\n
\n
\n I/0\n
\n
\n );\n }\n }\n\n if (scenario.info.controlType.render_type === 'simple' || scenario.info.controlType.render_type === 'pulse') {\n return (\n \n );\n }\n\n if (scenario.info.controlType.render_type === 'three_phase' || scenario.info.controlType.render_type === 'two_phase') {\n return (\n \n );\n }\n\n switch (scenario.info.controlType.id) {\n case CONTROL_TYPE_ID_DIMMER:\n return (\n
\n
\n {scenario.info.value}\n
\n
\n );\n case CONTROL_TYPE_ID_ALARM:\n return (\n
\n
\n {t('HOME')}\n
\n
\n {t('OUT')}\n
\n
\n );\n // case '6':\n // return (\n // \n // ); // todo scenario media\n case CONTROL_TYPE_ID_THERMOSTAT:\n return (\n
\n
\n {(scenario.info.value / 10).toFixed(1)}\n
\n
\n );\n }\n\n return (\n
\n\n
\n );\n});\n\nexport const ScenarioCreateScreen = memo(function ScenarioCreateScreen() {\n const [rpc] = useRPC();\n\n const {t} = useLocalization();\n const inputRef = useRef();\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const [scenarioName, setScenarioName] = useState('');\n const [scenarioId, setScenarioId] = useState('');\n const {success, failure} = useMessage();\n const dispatch = useDispatch();\n\n const mediaList = useSelector(state => state.control.mediaList);\n const controlList = useSelector(state => state.control.controlList);\n const controlTypeSet = useSetSelector(state => state.control.controlTypeList);\n const selectedScenario = useSelector(state => state.ui.scenarioScreen.selectedScenario);\n const [selectedOrderOption, setSelectedOrderOption] = useState(0);\n\n const previousSelectedOrderOption = usePrevious(selectedOrderOption);\n const [devices, setDevices] = useState([{\n control: null,\n controlType: controlTypeSet[CONTROL_TYPE_ID_ALARM],\n media: null,\n value: null,\n }]);\n\n const [operations, setOperations] = useState([]);\n\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n let newDevices = [...devices];\n let changed = false;\n for (const control of controlList) {\n if (!(controlTypeSet[control.type_id] && controlTypeSet[control.type_id].show_on_scenario)) {\n continue;\n }\n\n const hasDevice = newDevices.some(d => d.media == null && d.control != null && d.control.id === control.id);\n if (!hasDevice) {\n let value = null;\n\n if (control.type_id === CONTROL_TYPE_ID_DIMMER) {\n value = 50;\n } else if (control.type_id === CONTROL_TYPE_ID_THERMOSTAT) {\n value = 250;\n } else if (control.type_id === CONTROL_TYPE_ID_ELEVATOR) {\n value = 1;\n // } else if (control.type_id === '6') {\n // if ((control.settings as MediaDeviceSettings).media_control_type_id !== '1') {\n // value = 0;\n // } // todo media scenario\n }\n\n newDevices.push({\n control: control,\n controlType: controlTypeSet[control.type_id],\n media: null,\n value,\n });\n changed = true;\n }\n }\n for (const media of mediaList) {\n const hasDevice = newDevices.some(d => d.media?.id === media.id);\n if (!hasDevice) {\n newDevices.push({\n control: null,\n controlType: null,\n media,\n value: media.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER ? null : 0,\n });\n changed = true;\n }\n\n }\n if (changed || previousSelectedOrderOption !== selectedOrderOption) {\n newDevices = newDevices.sort((a, b) => {\n if (selectedOrderOption === 1) { // Alan\n if (a.media != null && b.media != null) {\n return 0;\n } else if (a.media != null) {\n return 1;\n } else if (b.media != null) {\n return -1;\n }\n\n if (a.control == null) {\n return -1;\n }\n\n if (b.control == null) {\n return 1;\n }\n\n return a.control.area_id.localeCompare(b.control.area_id);\n }\n\n if (selectedOrderOption === 2) { // Tip\n if (a.media != null && b.media != null) {\n return 0;\n } else if (a.media != null) {\n return 1;\n } else if (b.media != null) {\n return -1;\n }\n\n if (a.control == null) {\n return -1;\n }\n\n if (b.control == null) {\n return 1;\n }\n\n return a.control.type_id.localeCompare(b.control.type_id);\n }\n\n if (selectedOrderOption === 3) { // A-Z\n\n\n if (a.media == null && a.control == null) {\n return -1;\n }\n\n if (b.media == null && b.control == null) {\n return 1;\n }\n\n const aName = a.control?.name || a.media?.name || '';\n const bName = b.control?.name || b.media?.name || '';\n return aName.localeCompare(bName);\n }\n\n if (a.media != null && b.media != null) {\n return 0;\n } else if (a.media != null) {\n return 1;\n } else if (b.media != null) {\n return -1;\n }\n\n if (a.media == null && a.control == null) {\n return -1;\n }\n\n if (b.media == null && b.control == null) {\n return 1;\n }\n\n return a.control.id.localeCompare(b.control.id); // todo temporary\n });\n changed = true;\n }\n\n if (changed) {\n setDevices(newDevices);\n }\n }, [devices, controlList, selectedOrderOption, previousSelectedOrderOption, controlTypeSet, mediaList]);\n\n useEffect(() => {\n if (selectedScenario == null) {\n return;\n }\n\n if (operations.length === selectedScenario.operation_list.length) {\n // Scenario was already loaded, so return\n return;\n }\n\n setScenarioName(selectedScenario.name);\n setScenarioId(selectedScenario.id);\n\n if (devices && devices.length) {\n const operationList = [];\n for (const operation of selectedScenario.operation_list) {\n const deviceInfo = devices.find(device => device.control?.id === operation.relational_id || device.media?.id === operation.relational_id || operation.relational_id === 'alarm' || false);\n if (deviceInfo == null) {\n // todo should show error?\n continue;\n }\n\n const operationInfo: OperationInfo = {\n delay: operation.delay_seconds,\n info: {\n control: deviceInfo.control,\n controlType: deviceInfo.controlType,\n media: deviceInfo.media,\n value: operation.value,\n },\n };\n\n operationList.push(operationInfo);\n }\n\n setOperations(operationList);\n }\n // eslint-disable-next-line\n }, [selectedScenario, devices]);\n\n const setSelected = useCallback((info: DeviceInfo, value: number) => {\n info.value = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const increase = useCallback((info: DeviceInfo, diff: number, limit: number) => {\n let value: number = info.value;\n value += diff;\n\n if (diff > 0) {\n if (value > limit) {\n value = limit;\n }\n } else {\n if (value < limit) {\n value = limit;\n }\n }\n\n info.value = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const add = useCallback((info: DeviceInfo) => {\n if (info.value == null) {\n return;\n }\n\n setOperations(operations => ([...operations, {info: {...info}, delay: 0}]));\n }, []);\n\n const move = useCallback((info: OperationInfo, diff: number) => {\n const index = operations.indexOf(info);\n if (index === 0 && diff < 0) {\n return;\n } else if (index === (operations.length - 1) && diff > 0) {\n return;\n }\n\n const newScenarios = [...operations];\n newScenarios.splice(index, 1);\n newScenarios.splice(index + diff, 0, info);\n\n setOperations(newScenarios);\n }, [operations]);\n\n const remove = useCallback((info: OperationInfo) => {\n setOperations(operations.filter(i => i !== info));\n }, [operations]);\n\n const onFocus = useCallback(() => {\n setActiveInput([inputRef, scenarioName, setScenarioName]);\n }, [scenarioName, setActiveInput]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const close = useCallback(() => dispatch(toggleScenarioScreenAction(null)), [dispatch]);\n\n const save = useCallback(() => {\n if (!scenarioName || !scenarioName.trim()) {\n failure(t('PLS_ENTER_SCENARIO_NAME'));\n\n return;\n }\n\n if (!operations || !operations.length) {\n failure(t('ACTION_LIST_CANNOT_BE_EMPTY'));\n\n return;\n }\n\n const scenario: ScenarioModel = {\n id: scenarioId,\n name: scenarioName,\n operation_list: operations.map(s => ({\n type: s.info.media != null ? 'media' : 'control',\n relational_id: s.info.media != null ? s.info.media.id : (s.info.control != null ? s.info.control.id : 'alarm'),\n value: s.info.value,\n delay_seconds: s.delay,\n })),\n };\n\n rpc.updateScenario(scenario)\n .then(isSucceeded => {\n if (isSucceeded) {\n success(t(scenarioId.length === 0 ? 'SCENARIO_SUCCESSFULLY_SAVED' : 'SCENARIO_SUCCESSFULLY_EDITED'));\n close();\n } else {\n return Promise.reject();\n }\n })\n .catch(failure);\n }, [t, close, operations, rpc, scenarioId, scenarioName, success, failure]);\n\n const addDelay = useCallback((operation: OperationInfo, delay: number) => {\n let newDelay = operation.delay + delay;\n if (newDelay < 0) {\n newDelay = 0;\n }\n\n if (newDelay > 300) {\n newDelay = 300;\n }\n\n operation.delay = newDelay;\n forceUpdate();\n }, [forceUpdate]);\n\n return (\n <>\n
\n
\n
\n
\n
\n setScenarioName(e.target.value)}\n onFocus={onFocus} onBlur={onBlur}\n value={scenarioName}/>\n
\n
\n \"\"/\n {t('CANCEL')}\n
\n
\n \"\"/\n {t('SAVE')}\n
\n
\n
\n
\n {\n options.map((option, index) => (\n
setSelectedOrderOption(index))}>\n {t(option)}\n
\n {\n renderIf(selectedOrderOption === index)(() =>\n
,\n )\n }\n
\n
\n ))\n }\n
\n
\n
\n {\n devices.map(info => (\n
\n
\n {info.control?.name || info.media?.name || 'Alarm'}\n
\n \n \n
add(info))}>\n {t('ADD')}\n
\n
\n ))\n }\n
\n
\n
\n {\n operations.map((scenario, index) => (\n \n
\n
\n {t('DELAY_DURATION')}\n
\n
addDelay(scenario, -10))}>\n -10\n
\n
addDelay(scenario, -1))}>\n -1\n
\n
\n {getDelay(scenario.delay, t)}\n
\n
addDelay(scenario, 1))}>\n +1\n
\n
addDelay(scenario, 10))}>\n +10\n
\n
\n
\n
\n {(scenario.info.control == null && scenario.info.media == null) ? 'Alarm' : (scenario.info.control?.name || scenario.info.media?.name || '')}\n
\n \n \n
\n
move(scenario, -1))}>\n \"\"/\n
\n
move(scenario, 1))}>\n \"\"/\n
\n
remove(scenario))}>\n \"\"/\n
\n
\n
\n
\n ))\n }\n
\n
\n
\n {\n renderKeyboard()\n }\n \n );\n});\n","import {useEffect, useRef} from 'react';\n\nexport function usePrevious(value: T): T {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n","import {useState} from 'react';\n\nexport function useForceUpdate() {\n const [, setValue] = useState(0);\n return () => setValue(value => value + 1);\n}\n","import React, {memo, useCallback, useState} from 'react';\nimport './index.scss';\nimport iconStart from '../../assets/images/icons/scenario/play.png';\nimport iconStop from '../../assets/images/icons/scenario/pause.png';\nimport iconEdit from '../../assets/images/icons/scenario/scenario-edit.png';\nimport iconDelete from '../../assets/images/icons/scenario/clear-2.png';\n\nimport {toggleScenarioPopupScreenAction, toggleScenarioScreenAction} from '../../store/ui/actions';\nimport {useRPC} from '../../hooks/rpc';\nimport {useOutsideDetector} from '../../hooks/outside-detector';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useQuestion} from '../../hooks/question';\nimport {useRelations} from '../../hooks/relations';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const ScenarioPopupScreen = memo(function ScenarioPopupScreen() {\n const {t} = useLocalization();\n const dispatch = useDispatch();\n const visible = useSelector(state => state.ui.scenarioPopupScreen.visible);\n const selectedScenario = useSelector(state => state.ui.scenarioPopupScreen.selectedScenario);\n\n const question = useQuestion();\n const getRelations = useRelations();\n const [isDeleting, setDeleting] = useState(false);\n const [rpc] = useRPC();\n const centerAreaRef = useOutsideDetector(!isDeleting, () => {\n dispatch(toggleScenarioPopupScreenAction(null));\n });\n\n const play = useCallback(() => {\n if (selectedScenario.is_playing) {\n rpc.stopScenario();\n } else {\n rpc.playScenario(selectedScenario.id);\n }\n dispatch(toggleScenarioPopupScreenAction(null));\n }, [selectedScenario, rpc, dispatch]);\n\n const edit = useCallback(() => {\n dispatch(toggleScenarioScreenAction(selectedScenario));\n dispatch(toggleScenarioPopupScreenAction(null));\n }, [selectedScenario, dispatch]);\n\n const deleteSelected = useCallback(() => {\n return rpc.deleteScenario(selectedScenario.id)\n .finally(() => {\n dispatch(toggleScenarioPopupScreenAction(null));\n });\n }, [selectedScenario, rpc, dispatch]);\n\n const deletePressed = useCallback(() => {\n setDeleting(true);\n getRelations(selectedScenario.id, 'scenario')\n .then(([message, positiveButton]) => {\n const questionMessage = message == null ?\n t('SCENARIO_WILL_BE_DELETED__CONFIRM',{name:selectedScenario.name.toUpperCase()}) :\n t('SCENARIO_WILL_BE_DELETED_WITH_MESSAGE__CONFIRM',{name:selectedScenario.name.toUpperCase(), message:message.toUpperCase()});\n question(questionMessage, () => {\n return deleteSelected().finally(() => setDeleting(false));\n }, () => setDeleting(false), positiveButton);\n });\n }, [t, deleteSelected, question, selectedScenario, getRelations]);\n\n if (!visible) {\n return null;\n }\n\n return (\n
\n
\n {selectedScenario.name}\n
\n
\n \n {selectedScenario.is_playing ? t('STOP_2') : t('START')}\n
\n
\n \n {t('EDIT')}\n
\n
\n \n {t('DELETE')}\n
\n
\n
\n
\n );\n});\n","import React, {memo, ReactNode, useCallback, useMemo, useState} from 'react';\n\nimport './index.scss';\nimport iconRemove from '../../assets/images/icons/media/remove.png';\nimport iconCancel from '../../assets/images/icons/media/cancel.png';\nimport iconSave from '../../assets/images/icons/media/done.png';\n\nimport iconAirConditioner from '../../assets/images/icons/media/air-conditioner.png';\nimport iconEdit from '../../assets/images/icons/media/edit.png';\nimport iconOff from '../../assets/images/icons/media/off.png';\nimport iconOn from '../../assets/images/icons/media/on.png';\nimport iconOnOff from '../../assets/images/icons/media/on-off.png';\nimport iconF from '../../assets/images/icons/media/f1.png';\nimport iconAuto from '../../assets/images/icons/controls/air-conditioner-auto.png';\nimport iconFan from '../../assets/images/icons/controls/air-conditioner-fan.png';\nimport iconDry from '../../assets/images/icons/controls/air-conditioner-dry.png';\nimport iconCold from '../../assets/images/icons/controls/air-conditioner-cold.png';\nimport iconHot from '../../assets/images/icons/controls/air-conditioner-hot.png';\n\nimport iconFan0 from '../../assets/images/icons/controls/fan-0.png';\nimport iconFan1 from '../../assets/images/icons/controls/fan-1.png';\nimport iconFan2 from '../../assets/images/icons/controls/fan-2.png';\nimport iconFan3 from '../../assets/images/icons/controls/fan-3.png';\nimport iconFan4 from '../../assets/images/icons/controls/fan-4.png';\n\nimport iconFlap0 from '../../assets/images/icons/controls/air-flap-0.png';\nimport iconFlap1 from '../../assets/images/icons/controls/air-flap-1.png';\nimport iconFlap2 from '../../assets/images/icons/controls/air-flap-2.png';\nimport iconFlap3 from '../../assets/images/icons/controls/air-flap-3.png';\nimport iconFlap4 from '../../assets/images/icons/controls/air-flap-4.png';\n\nimport iconPlus from '../../assets/images/icons/media/plus.png';\nimport iconMinus from '../../assets/images/icons/media/minus.png';\nimport iconProgram from '../../assets/images/icons/media/program.png';\nimport iconVolume from '../../assets/images/icons/media/volume.png';\nimport iconMute from '../../assets/images/icons/media/mute.png';\nimport iconList from '../../assets/images/icons/media/list.png';\nimport iconMenu from '../../assets/images/icons/media/menu.png';\n\n\nimport iconPlay from '../../assets/images/icons/media/play.png';\nimport iconPause from '../../assets/images/icons/media/pause.png';\nimport iconNext from '../../assets/images/icons/media/next.png';\nimport iconRewind from '../../assets/images/icons/media/rewind.png';\nimport iconF1 from '../../assets/images/icons/media/f1.png';\nimport iconF2 from '../../assets/images/icons/media/f2.png';\n\nimport iconSettings from '../../assets/images/icons/media/settings.png';\nimport iconLeft from '../../assets/images/icons/media/left.png';\nimport iconBack from '../../assets/images/icons/media/back.png';\nimport iconUp from '../../assets/images/icons/media/up.png';\nimport iconOk from '../../assets/images/icons/media/ok.png';\nimport iconDown from '../../assets/images/icons/media/down.png';\nimport iconInput from '../../assets/images/icons/media/input.png';\nimport iconRight from '../../assets/images/icons/media/right.png';\nimport iconExit from '../../assets/images/icons/media/exit.png';\n\nimport {setMediaScreenAction} from '../../store/ui/actions';\nimport {useRPC} from '../../hooks/rpc';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useMessage} from '../../hooks/message';\nimport {useQuestion} from '../../hooks/question';\nimport {onClickHandler} from '../../utils/onclick';\nimport {MEDIA_TYPE_ID_AIR_CONDITIONER} from '../../types/control';\nimport {useRelations} from '../../hooks/relations';\nimport {mediaIcons} from '../MediaListScreen';\nimport {useLocalization} from \"../../hooks/localization\";\n\ntype MyButtonProps = {\n editMode: boolean;\n onClick?: () => void;\n slot?: number;\n children?: ReactNode;\n};\n\nconst MyButton = memo(function MyButton(props: MyButtonProps) {\n const {t} = useLocalization();\n const selectedMedia = useSelector(state => state.ui.mediaScreen.selectedMedia);\n const [rpc] = useRPC();\n const question = useQuestion();\n\n const mediaButtonLookup = useMemo(() => {\n const lookup = {};\n if (selectedMedia) {\n for (const button of selectedMedia.button_list) {\n lookup[button.slot] = button;\n }\n }\n return lookup;\n }, [selectedMedia]);\n\n let {onClick} = props;\n\n let isRegistered = false;\n if (props.slot != null) {\n const button = mediaButtonLookup[props.slot];\n if (button) {\n isRegistered = button.registered;\n }\n }\n\n const click = useCallback(() => {\n let isRegistered = false;\n const button = mediaButtonLookup[props.slot];\n if (button) {\n isRegistered = button.registered;\n }\n if (props.editMode) {\n if (isRegistered) {\n question(t('DO_YOU_WANT_TO_DELETE_THE_SAVED_REGISTERED_KEY_INFORMATION'), () => {\n rpc.mediaButtonPressed(selectedMedia.id, props.slot, {deletion: true});\n });\n } else {\n rpc.mediaButtonPressed(selectedMedia.id, props.slot, {registration: true});\n }\n } else {\n if (isRegistered) {\n rpc.mediaButtonPressed(selectedMedia.id, props.slot);\n }\n }\n }, [t, mediaButtonLookup, props.slot, props.editMode, question, rpc, selectedMedia.id]);\n\n if (props.slot != null) {\n onClick = click;\n }\n\n return (\n
\n {props.children}\n
\n );\n});\n\nconst MyIconButton = memo(function MyIconButton({icon, slot, editMode}: { icon: string; slot?: number; editMode: boolean; }) {\n return (\n \n \"\"/\n \n );\n});\n\nconst MyTemperatureButton = memo(function MyTemperatureButton({text, slot, editMode}: { text: string; slot: number; editMode: boolean; }) {\n return (\n \n
\n {text}°\n
\n
\n );\n});\n\nconst MyTextButton = memo(function MyTextButton({text, slot, editMode}: { text: string; slot: number; editMode: boolean; }) {\n return (\n \n {text}\n \n );\n});\n\nconst LeftAirConditionerParent = memo(function LeftAirConditionerParent({editMode}: { editMode: boolean }) {\n const selectedMedia = useSelector(state => state.ui.mediaScreen.selectedMedia);\n return (\n
\n
\n
\n
\n icon\n
\n {selectedMedia.name}\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\nconst RightAirConditionerParent = memo(function RightAirConditionerParent({editMode}: { editMode: boolean }) {\n return (\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\nconst LeftTvParent = memo(function LeftTvParent({editMode}: { editMode: boolean }) {\n const selectedMedia = useSelector(state => state.ui.mediaScreen.selectedMedia);\n return (\n
\n
\n
\n
\n icon\n
\n {selectedMedia.name}\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 \n \n
\n
\n
\n
\n );\n});\n\nconst RightTvParent = memo(function RightTvParent({editMode}: { editMode: boolean }) {\n const {t} = useLocalization();\n return (\n
\n
\n {t('DIAL_CHANNEL')}\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\nexport const MediaScreen = memo(function MediaScreen() {\n const {t} = useLocalization();\n const selectedMedia = useSelector(state => state.ui.mediaScreen.selectedMedia);\n const defaultEditMode = useSelector(state => state.ui.mediaScreen.editMode);\n\n const dispatch = useDispatch();\n const question = useQuestion();\n const getRelations = useRelations();\n const {success} = useMessage();\n\n const [editMode, setEditMode] = useState(defaultEditMode || false);\n const [rpc] = useRPC();\n\n const close = useCallback(() => {\n dispatch(setMediaScreenAction(null));\n }, [dispatch]);\n\n const edit = useCallback(() => setEditMode(mode => !mode), []);\n\n const remove = useCallback(() => {\n getRelations(selectedMedia.id, 'media')\n .then(([message, positiveButton]) => {\n const questionMessage = message == null ?\n t('DO_YOU_WANT_TO_DELETE_THE_CORRESPONDING_REMOTE') :\n t('THIS_WILL_BE_DELETED_WITH_THIS_MESSAGE__CONTINUE',{name:selectedMedia.name, message});\n question(questionMessage, () => {\n return rpc.deleteMedia(selectedMedia.id).then(() => {\n close();\n success(t('REMOTE_SUCCESSFULLY_DELETED'));\n });\n }, undefined, positiveButton);\n });\n }, [t, question, close, rpc, selectedMedia, success, getRelations]);\n\n if (!selectedMedia) {\n return null;\n }\n\n return (\n <>\n
\n
\n
\n
\n
\n \n {t('CLOSE')}\n
\n {\n renderIf(editMode)(() =>\n
\n \n {t('DELETE')}\n
,\n )\n }\n
\n \n {editMode ? t('OK') : t('EDIT')}\n
\n
\n {\n renderIf(selectedMedia.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER)(\n () => ,\n () => ,\n )\n }\n
\n
\n {\n renderIf(selectedMedia.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER)(\n () => ,\n () => ,\n )\n }\n
\n
\n
\n \n );\n});\n","import React, {ChangeEvent, memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport './index.scss';\n\nimport iconCancel from '../../assets/images/icons/scenario/cancel.png';\nimport iconSave from '../../assets/images/icons/scenario/save.png';\nimport iconTime from '../../assets/images/icons/scenario/time.png';\nimport iconSunrise from '../../assets/images/icons/scenario/sunrise.png';\nimport iconSunset from '../../assets/images/icons/scenario/sunset.png';\nimport iconScenario from '../../assets/images/icons/scenario/scenario.png';\nimport {useKeyboard} from '../../hooks/keyboard';\nimport {\n ScenarioModel,\n ScenarioTriggerModel,\n TimeTriggerSettingsModel,\n TimeTriggerType,\n} from '../../store/control/state';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {toggleScenarioTriggerScreenAction} from '../../store/ui/actions';\nimport {useRPC} from '../../hooks/rpc';\nimport {useMessage} from '../../hooks/message';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useLocalization} from '../../hooks/localization';\n\nconst format = (str: string) => {\n if (str.length === 1) {\n return '' + str[0] + '-:--';\n }\n if (str.length === 2) {\n return '' + str[0] + str[1] + ':--';\n }\n if (str.length === 3) {\n return '' + str[0] + str[1] + ':' + str[2] + '-';\n }\n if (str.length === 4) {\n return '' + str[0] + str[1] + ':' + str[2] + str[3];\n }\n\n return '--:--';\n};\n\nconst valid = (str: string, fullCheck = false) => {\n if (fullCheck && (!str || str.length !== 4)) {\n return false;\n }\n\n if (!str) {\n return true;\n }\n\n const hourFirst = parseInt(str[0]);\n if (hourFirst > 2) {\n return false;\n }\n\n if (str.length > 1) {\n const hour = parseInt(str[0] + str[1]);\n if (hour > 23) {\n return false;\n }\n }\n\n if (str.length > 2) {\n const minute = parseInt(str[2]);\n if (minute > 5) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const ScenarioTriggerCreateScreen = memo(function ScenarioTriggerCreateScreen() {\n const {t} = useLocalization();\n const scenarios = useSelector(state => state.control.scenarioList);\n const selectedTrigger = useSelector(state => state.ui.triggerScreen.selectedTrigger);\n\n const dispatch = useDispatch();\n const {failure} = useMessage();\n const [rpc] = useRPC();\n\n const inputRef = useRef();\n const timeRef = useRef();\n const diffRef = useRef();\n\n const [triggerName, setTriggerName] = useState('');\n const [timeStr, setTimeStrRaw] = useState('');\n const [diffStr, setDiffStrRaw] = useState('');\n\n const [scenarioId, setTriggerId] = useState('');\n\n const setTimeStr = useCallback((value: string) => {\n if (value) {\n value = value.replace(' ', '');\n if (value.length > 4) {\n value = value.substr(0, 4);\n }\n }\n setTimeStrRaw(value);\n }, []);\n\n const setDiffStr = useCallback((value: string) => {\n if (value) {\n value = value.replace(' ', '');\n if (value.length > 4) {\n value = value.substr(0, 4);\n }\n }\n setDiffStrRaw(value);\n }, []);\n\n const [setActiveInput, renderKeyboard] = useKeyboard();\n const [setActiveNumberInput, renderNumpad] = useKeyboard('numpad', true);\n\n const [triggerType, setTriggerType] = useState('exact');\n const [isBefore, setIsBefore] = useState(false);\n const [selectedScenario, setSelectedScenario] = useState(null);\n\n const beforeAfterClicked = useCallback((isBeforeClicked: boolean) => {\n setIsBefore(isBeforeClicked);\n if (triggerType === 'exact') {\n setTriggerType('sunrise');\n }\n }, [triggerType]);\n\n const astronomicalTimeClicked = useCallback((isBeginningOfTheDay: boolean) => {\n if (triggerType === 'exact') {\n setIsBefore(true);\n }\n setTriggerType(isBeginningOfTheDay ? 'sunrise' : 'sunset');\n }, [triggerType]);\n\n const [selectedDays, setSelectedDays] = useState([true, true, true, true, true, true, true]);\n\n const dayClicked = useCallback((day: number) => {\n const days = [...selectedDays];\n days[day] = !days[day];\n setSelectedDays(days);\n }, [selectedDays]);\n\n const close = useCallback(() => {\n dispatch(toggleScenarioTriggerScreenAction(null));\n }, [dispatch]);\n\n const save = useCallback(() => {\n const dayList = selectedDays.map((selected, index) => selected ? index : -1).filter(index => index !== -1);\n if ((triggerType === 'exact' && !valid(timeStr, true)) || (triggerType !== 'exact' && !valid(diffStr, true))) {\n failure(t('pls_enter_a_valid_time'));\n return;\n }\n\n if (!triggerName || triggerName.length < 3) {\n failure(t('pls_enter_a_valid_name'));\n return;\n }\n\n if (dayList.length === 0) {\n failure(t('pls_select_at_least_one_day'));\n return;\n }\n\n if (!selectedScenario) {\n failure(t('pls_select_a_scenario'));\n return;\n }\n\n let delayInSeconds;\n if (triggerType === 'exact') {\n delayInSeconds = (parseInt(timeStr[0] + timeStr[1]) * 60 + parseInt(timeStr[2] + timeStr[3])) * 60;\n } else {\n delayInSeconds = (parseInt(diffStr[0] + diffStr[1]) * 60 + parseInt(diffStr[2] + diffStr[3])) * 60;\n if (isBefore) {\n delayInSeconds *= -1;\n }\n }\n\n const settings: TimeTriggerSettingsModel = {\n day_list: dayList,\n type: triggerType,\n delay_in_seconds: delayInSeconds,\n };\n\n const trigger: ScenarioTriggerModel = {\n id: scenarioId,\n name: triggerName,\n scenario_id: selectedScenario.id,\n settings: settings,\n };\n\n rpc.updateScenarioTrigger(trigger).then(isSucceeded => {\n if (isSucceeded) {\n close();\n }\n });\n\n }, [t, triggerType, timeStr, diffStr, triggerName, selectedDays, selectedScenario, scenarioId, rpc, failure, isBefore, close]);\n\n const onFocus = useCallback(() => {\n setActiveInput([inputRef, triggerName, setTriggerName]);\n }, [setActiveInput, triggerName]);\n\n const onBlur = useCallback(() => {\n setActiveInput(null);\n }, [setActiveInput]);\n\n const onChange = useCallback((e: ChangeEvent) => setTriggerName(e.target.value), []);\n\n const onFocusTime = useCallback(() => {\n setActiveNumberInput([timeRef, timeStr, setTimeStr]);\n }, [setTimeStr, setActiveNumberInput, timeStr]);\n\n const onBlurNumber = useCallback(() => {\n setActiveNumberInput(null);\n }, [setActiveNumberInput]);\n\n const onChangeTime = useCallback((e: ChangeEvent) => setTimeStr(e.target.value), [setTimeStr]);\n\n const onFocusDiff = useCallback(() => {\n setActiveNumberInput([diffRef, diffStr, setDiffStr]);\n }, [setDiffStr, setActiveNumberInput, diffStr]);\n\n const onChangeDiff = useCallback((e: ChangeEvent) => setDiffStr(e.target.value), [setDiffStr]);\n\n const time = useMemo(() => format(timeStr), [timeStr]);\n const diff = useMemo(() => format(diffStr), [diffStr]);\n\n\n useEffect(() => {\n if (selectedTrigger) {\n setTriggerName(selectedTrigger.name);\n setTriggerId(selectedTrigger.id);\n setTriggerType(selectedTrigger.settings.type);\n\n const selectedDays = [false, false, false, false, false, false, false];\n for (const day of selectedTrigger.settings.day_list) {\n selectedDays[day] = true;\n }\n setSelectedDays(selectedDays);\n if (scenarios) {\n for (const scenario of scenarios) {\n if (scenario.id === selectedTrigger.scenario_id) {\n setSelectedScenario(scenario);\n break;\n }\n }\n }\n\n let second = selectedTrigger.settings.delay_in_seconds;\n if (second < 0) {\n second *= -1;\n setIsBefore(true);\n }\n\n const hour = Math.floor(second / 3600);\n const min = Math.floor((second % 3600) / 60);\n let hourStr = hour.toFixed(0);\n let minStr = min.toFixed(0);\n if (hourStr.length < 2) {\n hourStr = '0' + hourStr;\n if (hourStr.length < 2) {\n hourStr = '0' + hourStr;\n }\n }\n\n if (minStr.length < 2) {\n minStr = '0' + minStr;\n if (minStr.length < 2) {\n minStr = '0' + minStr;\n }\n }\n\n if (selectedTrigger.settings.type === 'exact') {\n setTimeStr(hourStr + minStr);\n } else {\n setDiffStr(hourStr + minStr);\n }\n }\n }, [scenarios, selectedTrigger, setDiffStr, setTimeStr]);\n\n return (\n <>\n
\n
\n
\n
\n
\n
\n
\n \"\"/\n {t('cancel')}\n
\n \n
\n \"\"/\n {t('save')}\n
\n
\n
\n
\n
\n
\n
\n \n timeRef.current.focus())}\n className={valid(timeStr) ? '' : 'invalid'}>{time}\n
setTriggerType('exact'))}/>\n \"\"/\n
\n
\n
\n
\n \n diffRef.current.focus())}\n className={valid(diffStr) ? '' : 'invalid'}>{diff}\n
\n
\n {t('before')}\n beforeAfterClicked(true))}\n />\n \"\"/\n astronomicalTimeClicked(true))}\n />\n
\n
\n {t('after')}\n beforeAfterClicked(false))}\n />\n \"\"/\n astronomicalTimeClicked(false))}\n />\n
\n
\n
\n
\n\n
\n
\n
\n
\n
dayClicked(1))}>\n
\n {t('monday')}\n
\n
dayClicked(2))}>\n
\n {t('tuesday')}\n
\n
dayClicked(3))}>\n
\n {t('wednesday')}\n
\n
dayClicked(4))}>\n
\n {t('thursday')}\n
\n
\n
\n
dayClicked(5))}>\n
\n {t('friday')}\n
\n
dayClicked(6))}>\n
\n {t('saturday')}\n
\n
dayClicked(0))}>\n
\n {t('sunday')}\n
\n
\n
\n
\n
\n
\n
\n {\n scenarios.map(scenario => (\n setSelectedScenario(scenario))}>\n
\n \"\"/\n {scenario.name}\n
\n
\n
\n ))\n }\n
\n
\n
\n {\n renderKeyboard()\n }\n {\n renderNumpad()\n }\n \n );\n});\n","import React, {memo, useCallback, useState} from 'react';\nimport './index.scss';\nimport iconEdit from '../../assets/images/icons/scenario/scenario-edit.png';\nimport iconDelete from '../../assets/images/icons/scenario/clear-2.png';\n\nimport {\n toggleScenarioTriggerPopupScreenAction,\n toggleScenarioTriggerScreenAction,\n} from '../../store/ui/actions';\nimport {useRPC} from '../../hooks/rpc';\nimport {useOutsideDetector} from '../../hooks/outside-detector';\nimport iconCancel from '../../assets/images/icons/alarm/cancel.png';\nimport iconOK from '../../assets/images/icons/alarm/ok.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {onClickHandler} from '../../utils/onclick';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const ScenarioTriggerPopupScreen = memo(function ScenarioTriggerPopupScreen() {\n const {t} = useLocalization();\n const dispatch = useDispatch();\n\n const visible = useSelector(state => state.ui.triggerPopupScreen.visible);\n const selectedTrigger = useSelector(state => state.ui.triggerPopupScreen.selectedTrigger);\n\n const [rpc] = useRPC();\n const [isDeleting, setDeleting] = useState(false);\n const centerAreaRef = useOutsideDetector(!isDeleting, () => {\n dispatch(toggleScenarioTriggerPopupScreenAction(null));\n });\n\n const edit = useCallback(() => {\n dispatch(toggleScenarioTriggerScreenAction(selectedTrigger));\n dispatch(toggleScenarioTriggerPopupScreenAction(null));\n }, [selectedTrigger, dispatch]);\n\n const deleteSelected = useCallback(() => {\n setDeleting(false);\n return rpc.deleteScenarioTrigger(selectedTrigger.id)\n .finally(() => {\n dispatch(toggleScenarioTriggerPopupScreenAction(null));\n });\n }, [selectedTrigger, rpc, dispatch]);\n\n if (!visible) {\n return null;\n }\n\n return (\n <>\n
\n
\n {selectedTrigger.name}\n
\n
\n \n {t('EDIT')}\n
\n
setDeleting(true))}>\n \n {t('DELETE')}\n
\n
\n
\n
\n {\n renderIf(isDeleting)(() =>\n
\n
\n \n {selectedTrigger.name.toUpperCase()} {t('TRIGGER_WILL_BE_DELETED')}\n {t('DO_YOU_CONFIRM')}\n \n
\n
setDeleting(false))} className=\"scenario-setup-button\">\n
\n \n
\n {t('CANCEL')}\n
\n
\n
\n \n
\n {t('DELETE')}\n
\n
\n
\n
,\n )\n }\n \n );\n});\n","import React, {memo, useCallback, useEffect, useState} from 'react';\nimport '../ScenarioTriggerCreateScreen/index.scss';\nimport './index.scss';\n\nimport iconCancel from '../../assets/images/icons/scenario/cancel.png';\nimport iconSave from '../../assets/images/icons/scenario/save.png';\nimport iconScenario from '../../assets/images/icons/scenario/scenario.png';\nimport {\n ScenarioModel,\n} from '../../store/control/state';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useRPC} from '../../hooks/rpc';\nimport {useMessage} from '../../hooks/message';\nimport {onClickHandler} from '../../utils/onclick';\nimport {toggleScenarioTriggerInputScreenAction} from '../../store/ui/actions';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const ScenarioTriggerControlUpdateScreen = memo(function ScenarioTriggerControlUpdateScreen() {\n const {t} = useLocalization();\n const scenarios = useSelector(state => state.control.scenarioList);\n const selectedTrigger = useSelector(state => state.ui.triggerControlScreen.selectedTrigger);\n const selectedSTPUIEntity = useSelector(state => state.ui.triggerControlScreen.selectedUIEntity);\n\n const dispatch = useDispatch();\n const {failure} = useMessage();\n const [rpc] = useRPC();\n\n const [selectedScenario, setSelectedScenario] = useState(null);\n\n useEffect(() => {\n for (const scenario of scenarios) {\n if (selectedTrigger?.relational_id === scenario.id || selectedSTPUIEntity?.relational_id === scenario.id) {\n setSelectedScenario(scenario);\n break;\n }\n }\n }, [scenarios, selectedSTPUIEntity, selectedTrigger]);\n\n const close = useCallback(() => {\n dispatch(toggleScenarioTriggerInputScreenAction(null));\n }, [dispatch]);\n\n const save = useCallback(() => {\n const selectedScenarioId = selectedScenario ? selectedScenario.id : null;\n if (selectedTrigger) {\n rpc.updateScenarioTriggerControl(selectedTrigger?.id, selectedScenarioId).then(close).catch(failure);\n } else {\n rpc.updateSTPUI({\n ...selectedSTPUIEntity,\n relational_id: selectedScenarioId,\n })\n .then(close)\n .catch(failure);\n }\n }, [selectedScenario, selectedTrigger, rpc, close, failure, selectedSTPUIEntity]);\n\n return (\n
\n
\n
\n
\n
\n
\n
\n \n {t('CANCEL')}\n
\n {selectedTrigger?.name || selectedSTPUIEntity?.display_name}\n
\n \n {t('SAVE')}\n
\n
\n
\n
\n
\n
\n setSelectedScenario(null))}>\n
\n \n {t('NONE')}\n
\n
\n
\n {\n scenarios.map(scenario => (\n setSelectedScenario(scenario))}>\n
\n \n {scenario.name}\n
\n
\n
\n ))\n }\n
\n
\n
\n );\n});\n","import React, {memo, useEffect} from 'react';\nimport {Container} from '../Container';\nimport {useLocation} from 'react-router-dom';\n\nimport './index.scss';\nimport {useRPC} from '../../hooks/rpc';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const NotFound404 = memo(function NotFound404() {\n const {t} = useLocalization();\n const location = useLocation();\n const [rpc] = useRPC();\n\n useEffect(() => {\n const path = location?.pathname || null;\n if (path != null) {\n rpc.sendBrokenLink(location.pathname)\n .catch(() => {\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n
\n {t('SORRY__PAGE_YOU_ARE_LOOKING_FOR_COULD_NOT_BE_FOUND')}\n
\n
\n );\n});\n","import React, {memo} from 'react';\n\nimport './index.scss';\n\nexport const BusyIndicator = memo(function BusyIndicator() {\n return (\n
\n
\n
\n
\n );\n});\n","import React, {memo, useCallback, useState} from 'react';\nimport './index.scss';\n\nimport {onClickHandler} from '../../utils/onclick';\nimport iconCancel from '../../assets/images/icons/media/cancel.png';\nimport iconSave from '../../assets/images/icons/media/save.png';\nimport iconMedia from '../../assets/images/icons/media/other.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useFilterSelector} from '../../hooks/filter-selector';\nimport {MEDIA_TYPE_ID_AIR_CONDITIONER, MediaModel} from '../../types/control';\nimport {setSTPUIMediaScreenAction} from '../../store/ui/actions';\nimport {useRPC} from '../../hooks/rpc';\nimport {useMessage} from '../../hooks/message';\nimport {mediaIcons} from '../MediaListScreen';\nimport {useLocalization} from \"../../hooks/localization\";\n\nexport const StpUIMediaScreen = memo(function StpUIMediaScreen() {\n const {t} = useLocalization();\n const dispatch = useDispatch();\n const [rpc] = useRPC();\n const {failure} = useMessage();\n const selectedStpUIEntity = useSelector(state => state.ui.stpUIMediaScreen.selectedMedia);\n const mediaList = useFilterSelector(state => state.control.mediaList,\n (m) => selectedStpUIEntity.type === 'air' ? m.type_id === MEDIA_TYPE_ID_AIR_CONDITIONER :\n m.type_id !== MEDIA_TYPE_ID_AIR_CONDITIONER);\n const [selectedMedia, setSelectedMedia] = useState(mediaList.find(m => m.id === selectedStpUIEntity.relational_id) || null);\n\n const close = useCallback(() => {\n dispatch(setSTPUIMediaScreenAction(null));\n }, [dispatch]);\n\n const save = useCallback(() => {\n rpc.updateSTPUI({\n ...selectedStpUIEntity,\n relational_id: selectedMedia?.id,\n })\n .then(close)\n .catch(failure);\n }, [close, failure, rpc, selectedMedia, selectedStpUIEntity]);\n\n return (\n
\n
\n
\n
\n
\n
\n
\n \n {t('CANCEL')}\n
\n {selectedStpUIEntity.display_name}\n
\n \n {t('SAVE')}\n
\n
\n
\n
\n
\n
\n setSelectedMedia(null))}>\n
\n \n {t('NONE')}\n
\n
\n
\n {\n mediaList.map(media => (\n setSelectedMedia(media))}\n key={`media_${media.id}`}>\n
\n \n {media.name}\n
\n
\n
\n ))\n }\n
\n
\n
\n );\n },\n);\n","import {RouteDefinition} from '../../routes';\nimport {matchPath, Route, Switch, useLocation} from 'react-router-dom';\nimport {Header} from '../Header';\nimport {Sidebar} from '../Sidebar';\nimport {MenuItem} from '../MenuItem';\nimport {Footer} from '../Footer';\nimport {CallScreen} from '../../screens/CallScreen';\nimport {PopupScreen} from '../../screens/PopupScreen';\nimport React, {memo, ReactNode, useEffect, useState} from 'react';\nimport {Viewport} from '../Viewport';\nimport {ScenarioCreateScreen} from '../../screens/ScenarioCreateScreen';\n\nimport './index.scss';\nimport {ScenarioPopupScreen} from '../../screens/ScenarioPopupScreen';\nimport {MediaScreen} from '../../screens/MediaScreen';\nimport {ScenarioTriggerCreateScreen} from '../../screens/ScenarioTriggerCreateScreen';\nimport {ScenarioTriggerPopupScreen} from '../../screens/ScenarioTriggerPopupScreen';\nimport {useRPC} from '../../hooks/rpc';\nimport {ScenarioTriggerControlUpdateScreen} from '../../screens/ScenarioTriggerControlUpdateScreen';\nimport {NotFound404} from '../NotFound404';\nimport {BusyIndicator} from '../BusyIndicator';\nimport {MenuEntity} from '../../store/control/state';\nimport {leftMenuIconList} from '../../screens/Settings/LeftMenu/LeftMenuEditScreen';\nimport {useBackground} from '../../hooks/background-class';\nimport {StpUIMediaScreen} from '../../screens/StpUIMediaScreen';\n\ntype Props = {\n busy: boolean;\n routes: RouteDefinition[];\n leftMenuList: MenuEntity[];\n locked: boolean;\n lockedReason: string;\n isPc: boolean;\n scenarioCreateScreenVisible: boolean;\n scenarioTriggerCreateScreenVisible: boolean;\n scenarioTriggerControlUpdateScreenVisible: boolean;\n mediaScreenVisible: boolean;\n popupScreenVisible: boolean;\n applicationLoaded: boolean;\n stpUIMediaScreenVisible: boolean;\n};\ntype ReactNodeOrRenderer = (() => ReactNode);\n\ndeclare function renderIf(predicate: any): (item: ReactNodeOrRenderer, elseValue?: ReactNodeOrRenderer) => ReactNode;\n\nexport const AppComponent = memo(function AppComponent(props: Props) {\n const {\n routes,\n leftMenuList,\n busy,\n locked,\n lockedReason,\n isPc,\n applicationLoaded,\n scenarioCreateScreenVisible,\n scenarioTriggerCreateScreenVisible,\n scenarioTriggerControlUpdateScreenVisible,\n mediaScreenVisible,\n popupScreenVisible,\n stpUIMediaScreenVisible,\n } = props;\n\n const popupVisible = scenarioCreateScreenVisible || mediaScreenVisible || stpUIMediaScreenVisible || scenarioTriggerCreateScreenVisible || scenarioTriggerControlUpdateScreenVisible;\n const [sidebarVisible, setSidebarVisible] = useState(true);\n const [, , backgroundStyle] = useBackground();\n\n const location = useLocation();\n const [, isConnected, retryCount] = useRPC();\n\n useEffect(() => {\n const match = matchPath(location.pathname, {\n path: '/settings',\n exact: false,\n strict: false,\n });\n const match2 = matchPath(location.pathname, {\n path: '/developer',\n exact: false,\n strict: false,\n });\n\n setSidebarVisible(isConnected && match == null && match2 == null);\n }, [location, isConnected]);\n\n return (\n \n
\n {\n renderIf(locked)(() =>\n
\n {lockedReason}\n
,\n )\n }\n {\n renderIf(sidebarVisible)(() =>\n \n {\n leftMenuList.map(leftMenu => {\n return (\n l.value.name === leftMenu.icon)?.value?.iconUrl}/>\n );\n })\n }\n ,\n )\n }\n\n \n {\n renderIf(applicationLoaded)(() =>\n \n {\n routes.filter(route => route.routerLink).map(\n route => (\n \n ),\n )\n }\n \n ,\n )\n }\n \n
\n\n \n {renderIf(popupScreenVisible)(() => )}\n \n \n {renderIf(scenarioCreateScreenVisible)(() => )}\n {renderIf(scenarioTriggerCreateScreenVisible)(() => )}\n {renderIf(scenarioTriggerControlUpdateScreenVisible)(() => )}\n {renderIf(mediaScreenVisible)(() => )}\n {renderIf(stpUIMediaScreenVisible)(() => )}\n {renderIf(busy)(() => )}\n
\n );\n});\n","import React, {memo, useEffect, useMemo} from 'react';\n\nimport {getRouteList} from '../../routes';\nimport {AppComponent} from './component';\nimport {\n closePopupScreenAction,\n toggleScenarioPopupScreenAction,\n} from '../../store/ui/actions';\nimport {useWindowSize} from '../../hooks/window-size';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useMessage} from '../../hooks/message';\nimport {useSortBySelector} from '../../hooks/sort-by-selector';\nimport {setIntercomInfoAction, setIntercomStatusAction} from '../../store/control/actions';\nimport {useLocalization} from \"../../hooks/localization\";\n\nconst routes = getRouteList();\n\nexport const App = memo(function App() {\n const dispatch = useDispatch();\n const {t} = useLocalization();\n const {info, success, failure} = useMessage();\n\n const busy = useSelector(state => state.ui.busy);\n const scenarioScreenVisible = useSelector(state => state.ui.scenarioScreen.visible);\n const scenarioTriggerScreenVisible = useSelector(state => state.ui.triggerScreen.visible);\n const scenarioTriggerControlVisible = useSelector(state => Boolean(state.ui.triggerControlScreen.selectedTrigger));\n const scenarioSTPUIControlVisible = useSelector(state => Boolean(state.ui.triggerControlScreen.selectedUIEntity));\n const scenarioTriggerControlUpdateScreenVisible = scenarioTriggerControlVisible || scenarioSTPUIControlVisible;\n const mediaScreenVisible = useSelector(state => state.ui.mediaScreen.visible);\n const stpUIMediaScreenVisible = useSelector(state => state.ui.stpUIMediaScreen.visible);\n const popupScreenVisible = useSelector(state => state.ui.popupState.visible);\n const defaultAlarmState = useSelector(state => state.control.alarmState.default);\n const applicationLoaded = useSelector(state => state.ui.applicationLoaded);\n const alarmSettingUp = useSelector(state => state.ui.alarmSettingUp);\n const mediaStatus = useSelector(state => state.control.mediaStatus);\n const rawLeftMenuList = useSortBySelector(state => state.control.menuList, m => m.order);\n const intercomList = useSelector(state => state.control.intercomList);\n const leftMenuList = useMemo(() => rawLeftMenuList.map(leftMenu => {\n if (leftMenu.is_special && leftMenu.id === 'intercom') {\n return {\n ...leftMenu,\n onClick: (e) => {\n if (intercomList && intercomList.length === 1) {\n e.preventDefault();\n dispatch(setIntercomInfoAction(intercomList[0]));\n dispatch(setIntercomStatusAction('special',true));\n }\n },\n };\n }\n return leftMenu;\n }), [dispatch, intercomList, rawLeftMenuList]);\n\n const role = useSelector(state => state.ui.role);\n const [width, height] = useWindowSize();\n const history = useHistory();\n const location = useLocation();\n\n const isPc = useMemo(() => {\n return !((width === 1024 && height === 600) || (height === 1024 && width === 600));\n }, [width, height]);\n\n const alarmRinging = defaultAlarmState.ringing || defaultAlarmState.will_ring || defaultAlarmState.level === 3;\n const locked = (alarmRinging || role == null || alarmSettingUp) && !location.pathname.includes('/settings');\n const lockedReason = locked !== true ? '' :\n (defaultAlarmState.level === 3 ? t('outdoor_alarm_set') :\n (alarmRinging ? t('alarm_run') :\n (role == null ? t('not_logged_in') :\n (alarmSettingUp ? t('setting_alarm') :\n t('unknown_reason'))\n )\n )\n );\n\n useEffect(() => {\n if (alarmRinging) {\n dispatch(toggleScenarioPopupScreenAction(null));\n if (!location.pathname.includes('/settings') && !location.pathname.includes('/alarm')) {\n history.push('/alarm');\n }\n }\n }, [dispatch, history, location.pathname, alarmRinging, role]);\n\n useEffect(() => {\n if (mediaStatus === 'closed') {\n dispatch(closePopupScreenAction());\n } else if (mediaStatus === 'recording') {\n info(t('pls_press_the_corresponding_button_of_remote'), false);\n } else if (mediaStatus === 'succeeded') {\n success(t('registration_successful'));\n } else if (mediaStatus === 'failed') {\n failure(t('registration_failed__try_again'));\n }\n }, [t, dispatch, failure, info, mediaStatus, success]);\n\n return (\n \n );\n});\n","import {WS} from './utils/ws';\nimport React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {RPCService} from './service/rpc-service';\nimport {ClientTask} from './service/client-task';\nimport {RPCContext, RPCContextType} from './hooks/rpc';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport {App} from './components/App';\nimport {fetchAndInitialize} from './utils/initialize';\nimport {useDispatch} from 'react-redux';\nimport {getSession} from './utils/session-storage';\nimport {setApplicationLoaded} from './store/ui/actions';\nimport {setUserAction} from './store/user/action';\n\nlet timer;\nexport const RPCApplication = memo(function RPCApplication({ws}: { ws: WS }) {\n const dispatch = useDispatch();\n const history = useHistory();\n const {pathname} = useLocation();\n\n const rpcRef = useRef();\n const [rpcService, setRPCService] = useState(null);\n const [connected, setConnected] = useState(false);\n const [retryCount, setRetryCount] = useState(0);\n\n const onConnectionChanged = useCallback((isConnected: boolean, retryCount: number) => {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n\n if (isConnected) {\n timer = setInterval(() => {\n if (rpcRef.current) {\n rpcRef.current.ping();\n }\n }, 30000);\n }\n\n if (isConnected) {\n setConnected(true);\n } else {\n setConnected(false);\n }\n setRetryCount(retryCount);\n }, []);\n\n const onOpen = useCallback(() => {\n const client = new ClientTask(dispatch);\n const rpc_service = new RPCService(client, ws);\n setRPCService(rpc_service);\n\n getSession()\n .then(([username, password]) => {\n return rpc_service.authenticate(username, password)\n .then(() => {\n history.push(pathname);\n // noinspection JSIgnoredPromiseFromCall\n fetchAndInitialize(rpc_service, dispatch);\n dispatch(setUserAction(username, password));\n });\n },\n ).catch(() => {\n sessionStorage.clear();\n dispatch(setApplicationLoaded());\n history.push('/login');\n });\n }, [dispatch, history, pathname, ws]);\n\n useEffect(() => {\n ws.dispatch = dispatch;\n ws.onConnectionChanged = onConnectionChanged;\n }, [ws, dispatch, onConnectionChanged]);\n\n useEffect(() => {\n ws.onopen = onOpen;\n // eslint-disable-next-line\n }, [dispatch, history, ws, onOpen]);\n\n useEffect(() => {\n rpcRef.current = rpcService;\n });\n\n return (\n \n \n \n );\n});\n","import {Dispatch, default as React} from 'react';\nimport {Action} from './base/fsa/createAction';\n\nimport intercomIcon from './assets/images/icons/intercom.png';\nimport scenarioIcon from './assets/images/icons/scenario.png';\nimport sensorIcon from './assets/images/icons/sensor.png';\nimport alarmIcon from './assets/images/icons/alarm.png';\nimport cameraIcon from './assets/images/icons/camera.png';\nimport {RouteComponentProps} from 'react-router';\nimport {CameraScreen} from './screens/CameraScreen';\nimport {AlarmScreen} from './screens/AlarmScreen';\nimport {IntercomScreen} from './screens/IntercomScreen';\nimport {MediaCreateScreen} from './screens/MediaCreateScreen';\nimport {LoginScreen} from './screens/LoginScreen';\nimport {IntercomModel} from './types/intercom';\nimport {setIntercomInfoAction, setIntercomStatusAction} from './store/control/actions';\nimport {SettingsRoutes} from './screens/Settings';\nimport {MainScreen} from './screens/MainScreen';\nimport {UserSettingsScreen} from './screens/SettingsScreen/UserSettingsScreen';\nimport {ScenarioScreen} from './screens/ScenarioScreen';\nimport {SensorScreen} from './screens/SensorScreen';\nimport {PageScreen} from './screens/PageScreen';\nimport {MediaListScreen} from './screens/MediaListScreen';\nimport {ConciergeScreen} from './screens/ConciergeScreen';\nimport {MeetingScreen} from \"./screens/MeetingScreen\";\n\nexport type RouteDefinition = {\n routerLink?: string;\n exact?: boolean;\n component?: React.ComponentType> | React.ComponentType;\n};\n\nexport const getRouteList = (): RouteDefinition[] => [\n {\n routerLink: '/',\n component: MainScreen,\n exact: true,\n },\n {\n routerLink: '/login',\n component: LoginScreen,\n exact: true,\n },\n {\n routerLink: '/intercom',\n component: IntercomScreen,\n exact: true,\n },\n {\n routerLink: '/camera',\n component: CameraScreen,\n exact: true,\n },\n {\n routerLink: '/alarm',\n component: AlarmScreen,\n exact: true,\n },\n {\n routerLink: '/scenario',\n component: ScenarioScreen,\n exact: true,\n },\n {\n routerLink: '/sensor',\n component: SensorScreen,\n exact: true,\n },\n {\n routerLink: '/concierge',\n component: ConciergeScreen,\n },\n {\n routerLink: '/meeting',\n component: MeetingScreen,\n },\n {\n routerLink: '/media-remote/create',\n component: MediaCreateScreen,\n },\n ...SettingsRoutes,\n {\n routerLink: '/settings',\n component: UserSettingsScreen,\n },\n {\n routerLink: '/page/:id',\n component: PageScreen,\n },\n {\n routerLink: '/media-remote',\n component: MediaListScreen,\n },\n];\n","import {\n CameraBrandModel,\n CameraModel,\n ControlModel,\n ControlTypeModel,\n GlassControlParameters,\n InputModel,\n InputTypeModel,\n MediaModel,\n SensorTypeModel,\n UserModel,\n} from '../../types/control';\nimport {BridgeDeviceModel} from '../../types/bridge-device';\nimport {IntercomModel} from '../../types/intercom';\nimport {DoorModel} from '../../types/door';\nimport {GatewayModel} from '../../types/gateway';\nimport {DoorBrandModel} from '../../types/door-brand';\nimport {BridgeDeviceTypeModel} from '../../types/bridge-device-type';\nimport {AlarmConfigModel} from '../../types/alarm-config';\nimport {LocationModel} from '../../types/location';\nimport {ConciergeModel} from '../../types/concierge';\nimport {ConciergeTypeModel} from '../../types/concierge-type';\n\nexport const initialControlState: ControlState = {\n controlTypeList: [],\n userList: [],\n controlList: [],\n scenarioList: [],\n scenarioTriggerList: [],\n bridgeDeviceList: [],\n bridgeDeviceTypeList: [],\n gatewayList: [],\n cameraList: [],\n cameraBrandList: [],\n inputList: [],\n inputTypeList: [],\n sensorTypeList: [],\n areaList: [],\n mediaList: [],\n mediaInputList: [],\n virtualControlList: [],\n mediaStatus: 'closed',\n intercomState: {\n status: 'ended',\n info: null,\n is_incoming_call: true,\n id: '',\n name: '',\n },\n bellStatus: 'ended',\n doorList: [],\n doorBrandList: [],\n intercomList: [],\n alarmState: {\n default: {\n level: 0,\n ringing: false,\n will_ring: false,\n latest_log_list: [],\n },\n },\n sound: {\n intercom_level: 0,\n incoming_call_flat_front_level: 0,\n incoming_call_outside_panel_level: 0,\n alarm_level: 0,\n microphone_level: 0,\n },\n config: {\n alarm: {\n first_level_alarm_countdown_duration: 0,\n second_level_alarm_countdown_duration: 0,\n third_level_alarm_countdown_duration: 0,\n reactivation_duration_after_reset: 0,\n siren_interval_on_duration: 0,\n siren_interval_off_duration: 0,\n siren_interval_repeat_count: 0,\n },\n alarm_settings: {\n home_timer_seconds: 0,\n outside_timer_seconds: 0,\n },\n location: null,\n language: 'tr',\n },\n homepageItemList: [],\n locationList: [],\n menuList: [],\n stpUIList: [],\n languageList: [],\n conciergeList: [],\n conciergeTypeList: [],\n};\n\nexport type IntercomState = {\n status: string; // todo enum\n info: IntercomModel;\n is_incoming_call: boolean;\n id: string;\n name: string;\n};\n\nexport type AlarmLogModel = {\n timestamp: number;\n log_message: string;\n sensor_type_id: string;\n};\n\nexport type AlarmStateModel = {\n level: number, // todo enum\n ringing: boolean,\n will_ring: boolean,\n latest_log_list: AlarmLogModel[]\n};\n\nexport type AlarmState = {\n default: AlarmStateModel;\n};\n\nexport type ScenarioOperationModel = {\n type: string;\n relational_id: string;\n\n value: number;\n delay_seconds: number;\n};\n\nexport type ScenarioModel = {\n id: string;\n name: string;\n operation_list: ScenarioOperationModel[];\n is_playing?: boolean;\n show_on_footer?: boolean;\n};\n\n\nexport type ScenarioTriggerModel = {\n id: string;\n name: string;\n scenario_id: string;\n settings: TimeTriggerSettingsModel;\n};\n\nexport type TimeTriggerType = 'exact' | 'sunrise' | 'sunset';\n\nexport type TimeTriggerSettingsModel = {\n day_list: number[];\n type: TimeTriggerType;\n delay_in_seconds: number;\n};\n\nexport type CreateMediaDeviceModel = {\n name: string;\n type: string;\n bridge_device_id: string;\n};\n\nexport type AreaModel = {\n id: string;\n name: string;\n type: 'place' | 'floor' | 'room';\n parent_area_id: string;\n};\nexport type AlarmSettingsModel = {\n home_timer_seconds: number;\n outside_timer_seconds: number;\n};\n\nexport type ConfigModel = {\n id?: never,\n alarm: AlarmConfigModel;\n alarm_settings: AlarmSettingsModel;\n location: LocationModel;\n language: string;\n};\n\nexport type MediaInputModel = {\n id: string;\n slot: number;\n name: string;\n bridge_device_id: string;\n control_id: string;\n value: number;\n};\n\nexport type VirtualControlModel = {\n id: string;\n slot: number;\n bridge_device_id: string;\n control_id: string;\n registered_by_system?: boolean;\n parameters: Omit;\n};\n\nexport type HomepageItemType = 'control' | 'scenario' | 'sensor' | 'media';\n\nexport type HomepageItemModel = {\n id: string;\n type: HomepageItemType;\n relational_id: string;\n order: number;\n};\n\nexport type SoundState = {\n intercom_level: number;\n incoming_call_flat_front_level: number;\n incoming_call_outside_panel_level: number;\n alarm_level: number;\n microphone_level: number;\n};\n\nexport type UpdateFCMPushTokenRequest = {\n os: string;\n token: string;\n}\n\nexport type MenuContentType = 'control' | 'media';\n\nexport type MenuContent = {\n type: MenuContentType;\n relational_id: string;\n order: number;\n}\n\nexport type MenuEntity = {\n id?: string;\n name: string;\n icon: string;\n order: number;\n content_list: MenuContent[];\n is_special: boolean;\n\n onClick?: (e?: any) => void;\n}\n\nexport type STPUIType = 'group' | 'control' | 'virtualControl' | 'weather' | 'scenario' | 'media' | 'air';\n\nexport type STPUIEntity = {\n id: string;\n type: STPUIType;\n display_name: string;\n bridge_device_id: string;\n relational_id?: string;\n page_number: number;\n row_number: number;\n}\n\nexport type ControlState = {\n controlTypeList: ControlTypeModel[];\n userList: UserModel[];\n controlList: ControlModel[];\n bridgeDeviceList: BridgeDeviceModel[];\n bridgeDeviceTypeList: BridgeDeviceTypeModel[];\n gatewayList: GatewayModel[];\n scenarioList: ScenarioModel[];\n scenarioTriggerList: ScenarioTriggerModel[];\n cameraList: CameraModel[];\n cameraBrandList: CameraBrandModel[];\n conciergeList: ConciergeModel[];\n conciergeTypeList: ConciergeTypeModel[];\n doorList: DoorModel[];\n doorBrandList: DoorBrandModel[];\n intercomList: IntercomModel[];\n inputList: InputModel[];\n inputTypeList: InputTypeModel[];\n sensorTypeList: SensorTypeModel[];\n areaList: AreaModel[];\n mediaList: MediaModel[];\n mediaInputList: MediaInputModel[];\n virtualControlList: VirtualControlModel[];\n homepageItemList: HomepageItemModel[];\n locationList: LocationModel[];\n mediaStatus: string; // todo enum\n intercomState: IntercomState;\n bellStatus: string; // todo enum\n alarmState: AlarmState;\n sound: SoundState;\n config: ConfigModel;\n menuList: MenuEntity[];\n stpUIList: STPUIEntity[];\n languageList: LanguageModel[];\n};\n\nexport type LanguageModel = {\n id: string;\n name: string;\n variables: Map;\n}\n","/**\n * Map action creator to it's contained action type\n * @description it gets an object with at least a type property or overridden toString method and returns it.\n * @example\n * const increment = createActionCreator('[Counter] increment')\n * getType(increment) //=> '[Counter] increment'\n * @example\n * getType({ type: 'TEST' }) //=> 'TEST'\n * @example\n * getType({\n * toString() { return 'TEST' }\n * }) //=> 'TEST'\n */\nexport function getType(actionCreator: TActionCreator) {\n if (!actionCreator.type && !actionCreator.hasOwnProperty('toString')) {\n throw new Error(\n `Action creator that has been passed to getType() does not provide any API to expose action type. You can use createAction() to create an action creator without any unsense errors.`,\n );\n }\n\n return (actionCreator.type || actionCreator.toString()) as TType;\n}\n","import {ActionCreator} from './createActionCreator';\nimport {Action} from './createAction';\nimport {getType} from './getType';\nimport {Handler} from './types';\n\nexport type HandlerMap = { [type in TAction['type']]: Handler }\n\nexport type InferActionFromHandlerMap> = THandlerMap extends HandlerMap ? T : never\n\nexport type InferNextStateFromHandlerMap> = THandlerMap extends HandlerMap ? T : never\n\nexport type CreateHandlerMap = ,\n TNextState extends TPrevState,\n TAction extends Action = TActionCreator extends (...args: any[]) => infer T\n ? T\n : never>(\n actionCreators: TActionCreator | TActionCreator[],\n handler: Handler,\n) => HandlerMap\n\n/**\n * Handler map factory\n * @description create an action(s) to reducer map\n * @example\n * createHandlerMap(increment, (state: number) => state + 1)\n * @example\n * createHandlerMap([increment, increase], (state: number) => state + 1)\n */\nexport function createHandlerMap,\n TPrevState,\n TNextState extends TPrevState,\n TAction extends Action = TActionCreator extends (...args: any[]) => infer T\n ? T\n : never>(\n actionCreators: TActionCreator | TActionCreator[],\n handler: Handler,\n) {\n return (Array.isArray(actionCreators) ? actionCreators : [actionCreators])\n .map(getType)\n .reduce>(\n (acc, type) => {\n acc[type] = handler;\n return acc;\n },\n {} as any,\n );\n}\n","import {\n createHandlerMap,\n CreateHandlerMap,\n HandlerMap,\n InferActionFromHandlerMap,\n InferNextStateFromHandlerMap,\n} from './createHandlerMap';\n\nconst merge = (...objs: T[]): T => Object.assign({}, ...objs);\n\n/**\n * Reducer factory\n * @description combines multiple handler map into single reducer\n * @example\n * const counter = createReducer(0, handleAction => [\n * handleAction(increment, state => state + 1),\n * handleAction(decrement, state => state - 1),\n * ])\n */\nexport function createReducer>(\n defaultState: TPrevState,\n handlerMapsCreator: (handle: CreateHandlerMap) => THandlerMap[],\n) {\n const handlerMap = merge(...handlerMapsCreator(createHandlerMap));\n\n return (\n state = defaultState,\n action: InferActionFromHandlerMap,\n ): InferNextStateFromHandlerMap => {\n const handler = handlerMap[action.type];\n\n return handler ? handler(state as any, action) : state;\n };\n}\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {\n AlarmLogModel,\n AlarmState,\n ConfigModel,\n initialControlState,\n} from './state';\nimport {\n controlSendErrorAction,\n mediaStatusUpdatedAction,\n setBellStatusAction,\n setDefaultAlarmStateAction,\n setIntercomInfoAction,\n setIntercomStatusAction,\n inputSendErrorAction,\n entityDeletedAction, entityCreatedAction, setEntityListAction, entityUpdatedAction, setSoundStateAction,\n} from './actions';\nimport {DoorModel} from '../../types/door';\n\nexport const controlReducer = createReducer(initialControlState, handle => [\n handle(entityDeletedAction, (s, a) => {\n const key = a.payload.type + 'List';\n const list = s[key] as { id: string }[];\n return {\n ...s,\n [key]: list.filter(e => e.id !== a.payload.id),\n };\n }),\n handle(entityCreatedAction, (s, a) => {\n const key = a.payload.type + 'List';\n if (/*a.payload.type === 'virtualControl' ||*/ a.payload.type === 'input' || a.payload.type === 'inputType') {\n const r = a.payload.entity as { registered_by_system: boolean };\n if (r.registered_by_system) {\n return s;\n }\n }\n\n if (a.payload.type === 'door') {\n const door = a.payload.entity as DoorModel;\n a.payload.entity = {...door, toString: () => door.id};\n }\n\n return {\n ...s,\n [key]: [...s[key], a.payload.entity],\n };\n }),\n handle(setEntityListAction, (s, a) => {\n let key = a.payload.type;\n\n if (a.payload.type !== 'config') {\n key += 'List';\n }\n\n return {\n ...s,\n [key]: a.payload.entities,\n };\n }),\n handle(entityUpdatedAction, (s, a) => {\n if (a.payload.type === 'mediaFile') {\n return s;\n }\n\n if (a.payload.type === 'config') {\n return {\n ...s,\n config: a.payload.entity as ConfigModel,\n };\n }\n\n const key = a.payload.type + 'List';\n // if (a.payload.type === 'virtualControl') {\n // const r = a.payload.entity as VirtualControlModel;\n // if (r.registered_by_system) {\n // return s;\n // }\n // }\n\n if (a.payload.type === 'door') {\n const door = a.payload.entity as DoorModel;\n a.payload.entity = {...door, toString: () => door.id};\n }\n\n if (a.payload.type === 'alarmState') {\n return {\n ...s,\n alarmState: {\n ...s.alarmState,\n default: {\n ...s.alarmState.default,\n // @ts-ignore\n ...a.payload.entity as AlarmState,\n latest_log_list: a.payload.entity.latest_log_list ? a.payload.entity.latest_log_list as AlarmLogModel[] : [],\n },\n },\n };\n }\n\n const list = s[key] as { id: string }[];\n return {\n ...s,\n [key]: list.map(e => {\n if (e.id === a.payload.entity.id) {\n if (a.payload.type === 'control' || a.payload.type === 'input') {\n return {...e, isUpdating: false, ...a.payload.entity};\n }\n return a.payload.entity;\n }\n\n return e;\n }),\n };\n }),\n\n // updates\n handle(controlSendErrorAction, (state, action) => {\n return {\n ...state,\n controlList: state.controlList.map(control => {\n if (control.id === action.payload.controlId) {\n return {...control, isUpdating: false, hasError: action.payload.hasError};\n }\n\n return control;\n }),\n };\n }),\n handle(inputSendErrorAction, (state, action) => {\n return {\n ...state,\n inputList: state.inputList.map(input => {\n if (input.id === action.payload.inputId) {\n return {...input, isUpdating: false, hasError: action.payload.hasError};\n }\n\n return input;\n }),\n controlList: state.controlList.map(c => {\n if (c.id === action.payload.inputId) {\n return {...c, isUpdating: false, hasError: action.payload.hasError};\n }\n\n return c;\n }),\n };\n }),\n handle(mediaStatusUpdatedAction, (state, action) => {\n return {\n ...state,\n mediaStatus: action.payload,\n };\n }),\n handle(setIntercomStatusAction, (state, action) => {\n return {\n ...state,\n intercomState: {\n ...state.intercomState,\n status: action.payload.status,\n is_incoming_call: action.payload.is_incoming_call,\n id: action.payload.id,\n name: action.payload.name,\n },\n };\n }),\n handle(setIntercomInfoAction, (state, action) => {\n return {\n ...state,\n intercomState: {\n ...state.intercomState,\n info: action.payload,\n },\n };\n }),\n handle(setBellStatusAction, (state, action) => {\n return {\n ...state,\n bellStatus: action.payload,\n };\n }),\n handle(setDefaultAlarmStateAction, (state, action) => {\n return {\n ...state,\n alarmState: {\n ...state.alarmState,\n default: {\n ...action.payload,\n latest_log_list: action.payload.latest_log_list == null ? []\n : action.payload.latest_log_list,\n },\n },\n };\n }),\n handle(setSoundStateAction, (state, action) => {\n return {\n ...state,\n sound: action.payload,\n };\n }),\n]);\n","export type UartMessage = {\n id: number;\n message: string;\n type: string;\n time: string;\n};\n\nexport type DebugState = {\n uartMessageList: UartMessage[];\n};\n\nexport const initialDebugState: DebugState = {\n uartMessageList: [],\n};\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {initialDebugState} from './state';\nimport {addUARTMessageAction, clearUARTMessagesAction} from './actions';\n\nexport const debugReducer = createReducer(initialDebugState, handle => [\n handle(addUARTMessageAction, (state, action) => {\n const uartMessageList = [{id: Math.random(), ...action.payload}, ...state.uartMessageList];\n while (uartMessageList.length > 500) {\n uartMessageList.pop();\n }\n\n return {\n ...state,\n uartMessageList,\n };\n }),\n handle(clearUARTMessagesAction, state => {\n return {\n ...state,\n uartMessageList: [],\n };\n }),\n]);\n","import {ScenarioModel, ScenarioTriggerModel, STPUIEntity} from '../control/state';\nimport {UserRole, MediaModel, InputModel} from '../../types/control';\n\nexport type ScenarioScreenState = {\n visible: boolean;\n selectedScenario: ScenarioModel;\n};\n\nexport type ScenarioTriggerScreenState = {\n visible: boolean;\n selectedTrigger: ScenarioTriggerModel;\n};\n\nexport type ScenarioTriggerControlScreenState = {\n selectedTrigger: InputModel;\n selectedUIEntity: STPUIEntity;\n};\n\nexport type MediaScreenState = {\n visible: boolean;\n selectedMedia: MediaModel;\n editMode?: boolean;\n};\n\nexport type STPUIMediaScreen = {\n visible: boolean;\n selectedMedia: STPUIEntity;\n};\n\nexport type ScenarioPopupScreenState = {\n visible: boolean;\n selectedScenario: ScenarioModel;\n};\n\nexport type ScenarioTriggerPopupScreenState = {\n visible: boolean;\n selectedTrigger: ScenarioTriggerModel;\n};\n\nexport type PopupState = {\n visible: boolean;\n message: string;\n type: 'info' | 'question' | 'success' | 'failure';\n icon?: string;\n callback?: (isApproved: boolean) => void;\n closable: boolean;\n positive_button: {\n text: string;\n timed: boolean;\n }\n showCancel?: boolean;\n};\n\nexport type MediaFileTag = 'vertical' | 'horizontal';\n\nexport type MediaFileModel = {\n id: string;\n url: string;\n type: 'background',\n registered_by_system: boolean;\n tags: MediaFileTag[];\n};\n\nexport type UIState = {\n busy: boolean;\n busyCount: number;\n role: UserRole;\n alarmSettingUp: boolean;\n scenarioScreen: ScenarioScreenState;\n triggerScreen: ScenarioTriggerScreenState;\n triggerControlScreen: ScenarioTriggerControlScreenState;\n mediaScreen: MediaScreenState;\n stpUIMediaScreen: STPUIMediaScreen;\n scenarioPopupScreen: ScenarioPopupScreenState;\n triggerPopupScreen: ScenarioTriggerPopupScreenState;\n popupState: PopupState;\n mediaFileList: MediaFileModel[];\n applicationLoaded: boolean;\n selectedBackground: string;\n};\n\nexport const initialUIState: UIState = {\n busy: false,\n busyCount: 0,\n role: null,\n alarmSettingUp: false,\n scenarioScreen: {\n visible: false,\n selectedScenario: null,\n },\n triggerScreen: {\n visible: false,\n selectedTrigger: null,\n },\n scenarioPopupScreen: {\n visible: false,\n selectedScenario: null,\n },\n triggerPopupScreen: {\n visible: false,\n selectedTrigger: null,\n },\n mediaScreen: {\n visible: false,\n selectedMedia: null,\n },\n stpUIMediaScreen: {\n visible: false,\n selectedMedia: null,\n },\n popupState: {\n visible: false,\n type: 'info',\n message: '',\n closable: true,\n positive_button: {\n text: 'Evet',\n timed: false,\n },\n showCancel: false,\n },\n triggerControlScreen: {\n selectedTrigger: null,\n selectedUIEntity: null,\n },\n mediaFileList: [],\n applicationLoaded: false,\n selectedBackground: '',\n};\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {initialUIState} from './state';\nimport {\n changeBusyAction,\n setAuthenticationAction,\n setPopupScreenAction,\n setMediaScreenAction,\n toggleScenarioPopupScreenAction,\n toggleScenarioScreenAction,\n toggleScenarioTriggerScreenAction,\n toggleScenarioTriggerPopupScreenAction,\n toggleScenarioTriggerInputScreenAction,\n setMediaFileListAction,\n setApplicationLoaded,\n alarmSettingUpAction, setSelectedBackgroundAction, toggleScenarioSTPUIInputScreenAction, setSTPUIMediaScreenAction,\n} from './actions';\nimport {MediaModel} from '../../types/control';\nimport {entityCreatedAction, entityUpdatedAction} from '../control/actions';\nimport {ScenarioModel, ScenarioTriggerModel} from '../control/state';\n\nexport const uiReducer = createReducer(initialUIState, handle => [\n handle(changeBusyAction, (state, action) => {\n let busyCount = state.busyCount + (action.payload.busy ? 1 : -1);\n if (busyCount < 0) {\n busyCount = 0;\n }\n\n return {\n ...state,\n busyCount,\n busy: busyCount > 0,\n };\n }),\n handle(alarmSettingUpAction, (state, action) => {\n return {\n ...state,\n alarmSettingUp: action.payload,\n };\n }),\n handle(setMediaScreenAction, (state, action) => {\n return {\n ...state,\n mediaScreen: {\n ...state.mediaScreen,\n visible: !!action.payload.media,\n selectedMedia: action.payload.media,\n editMode: action.payload.editMode,\n },\n };\n }),\n handle(setSTPUIMediaScreenAction, (state, action) => {\n return {\n ...state,\n stpUIMediaScreen: {\n ...state.mediaScreen,\n visible: !!action.payload.stpUIMedia,\n selectedMedia: action.payload.stpUIMedia,\n },\n };\n }),\n handle(toggleScenarioScreenAction, (state, action) => {\n return {\n ...state,\n scenarioScreen: {\n ...state.scenarioScreen,\n visible: !state.scenarioScreen.visible,\n selectedScenario: action.payload.scenario,\n },\n };\n }),\n handle(toggleScenarioTriggerScreenAction, (state, action) => {\n return {\n ...state,\n triggerScreen: {\n ...state.triggerScreen,\n visible: !state.triggerScreen.visible,\n selectedTrigger: action.payload.trigger,\n },\n };\n }),\n handle(toggleScenarioTriggerInputScreenAction, (state, action) => {\n return {\n ...state,\n triggerControlScreen: {\n ...state.triggerControlScreen,\n selectedTrigger: action.payload.input,\n selectedUIEntity: null,\n },\n };\n }),\n handle(toggleScenarioSTPUIInputScreenAction, (state, action) => {\n return {\n ...state,\n triggerControlScreen: {\n ...state.triggerControlScreen,\n selectedUIEntity: action.payload.uiEntity,\n selectedTrigger: null,\n },\n };\n }),\n handle(toggleScenarioPopupScreenAction, (state, action) => {\n return {\n ...state,\n scenarioPopupScreen: {\n ...state.scenarioScreen,\n visible: !!action.payload.scenario,\n selectedScenario: action.payload.scenario,\n },\n };\n }),\n handle(toggleScenarioTriggerPopupScreenAction, (state, action) => {\n return {\n ...state,\n triggerPopupScreen: {\n ...state.triggerPopupScreen,\n visible: !!action.payload.trigger,\n selectedTrigger: action.payload.trigger,\n },\n };\n }),\n handle(entityUpdatedAction, (state, action) => {\n if (action.payload.type === 'scenario') {\n return {\n ...state,\n scenarioPopupScreen: {\n ...state.scenarioPopupScreen,\n ...(state.scenarioPopupScreen.selectedScenario != null && state.scenarioPopupScreen.selectedScenario.id === action.payload.entity.id ? {selectedScenario: action.payload.entity as ScenarioModel} : {}),\n },\n scenarioScreen: {\n ...state.scenarioScreen,\n ...(state.scenarioScreen.selectedScenario != null && state.scenarioScreen.selectedScenario.id === action.payload.entity.id ? {selectedScenario: action.payload.entity as ScenarioModel} : {}),\n },\n };\n }\n\n if (action.payload.type === 'scenarioTrigger') {\n return {\n ...state,\n triggerPopupScreen: {\n ...state.triggerPopupScreen,\n ...(state.triggerPopupScreen.selectedTrigger != null && state.triggerPopupScreen.selectedTrigger.id === action.payload.entity.id ? {selectedTrigger: action.payload.entity as ScenarioTriggerModel} : {}),\n },\n triggerScreen: {\n ...state.triggerScreen,\n ...(state.triggerScreen.selectedTrigger != null && state.triggerScreen.selectedTrigger.id === action.payload.entity.id ? {selectedTrigger: action.payload.entity as ScenarioTriggerModel} : {}),\n },\n };\n }\n\n if (action.payload.type === 'media') {\n return {\n ...state,\n mediaScreen: {\n ...state.mediaScreen,\n // @ts-ignore\n ...((state.mediaScreen.selectedMedia != null && state.mediaScreen.selectedMedia.id === action.payload.entity.id) ? {selectedMedia: action.payload.entity as MediaModel} : {}),\n },\n };\n }\n\n return state;\n }),\n handle(setAuthenticationAction, (state, action) => {\n return {\n ...state,\n role: action.payload.role,\n };\n }),\n handle(setPopupScreenAction, (state, action) => {\n return {\n ...state,\n popupState: {\n ...state.popupState,\n ...action.payload,\n },\n };\n }),\n handle(setMediaFileListAction, (state, action) => {\n return {\n ...state,\n mediaFileList: action.payload.mediaFileList,\n };\n }),\n handle(setApplicationLoaded, state => {\n return {\n ...state,\n applicationLoaded: true,\n };\n }),\n handle(setSelectedBackgroundAction, (state, action) => {\n return {\n ...state,\n selectedBackground: action.payload.selectedBackground,\n };\n }),\n handle(entityCreatedAction, (s, a) => {\n if (!['mediaFile'].includes(a.payload.type)) {\n return s;\n }\n\n const key = a.payload.type + 'List';\n return {\n ...s,\n [key]: [...s[key], a.payload.entity],\n };\n }),\n]);\n","export const initialSettingsState: SettingsState = {\n panel: {\n id: null,\n supervisor_connection_address: '',\n },\n};\n\nexport type SettingsState = SettingsModel;\nexport type PanelSettingsModel = {\n id: string;\n supervisor_connection_address: string;\n};\n\nexport type SettingsModel = {\n panel: PanelSettingsModel;\n};\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {initialSettingsState} from './state';\nimport {setSettingsAction} from './actions';\n\nexport const settingsReducer = createReducer(initialSettingsState, handle => [\n handle(setSettingsAction, (state, action) => {\n return {\n ...action.payload,\n };\n }),\n]);\n","export interface RawDevice {\n device_type_id: string;\n unique_device_id: string;\n rf_power: number;\n gateway_id: string;\n}\n\nexport type SetupState = {\n rawDeviceList: RawDevice[];\n};\n\nexport const initialSetupState: SetupState = {\n rawDeviceList: [],\n};\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {initialSetupState} from './state';\nimport {addRawDeviceAction, clearRawDevicesAction, removeRawDeviceAction} from './actions';\n\nexport const setupReducer = createReducer(initialSetupState, handle => [\n handle(addRawDeviceAction, (state, action) => {\n const originalRawDevice = state.rawDeviceList.find(device => device.unique_device_id === action.payload.rawDevice.unique_device_id && device.gateway_id === action.payload.rawDevice.gateway_id);\n if (originalRawDevice == null) {\n return {\n ...state,\n rawDeviceList: [...state.rawDeviceList, action.payload.rawDevice],\n };\n }\n\n return {\n ...state,\n rawDeviceList: state.rawDeviceList.map(device => {\n if (device.unique_device_id === action.payload.rawDevice.unique_device_id && device.gateway_id === action.payload.rawDevice.gateway_id) {\n return action.payload.rawDevice;\n }\n\n return device;\n }),\n };\n }),\n handle(removeRawDeviceAction, (state, action) => {\n const index = state.rawDeviceList.indexOf(action.payload.rawDevice);\n if (index > -1) {\n return {\n ...state,\n rawDeviceList: [\n ...state.rawDeviceList.slice(0, index),\n ...state.rawDeviceList.slice(index + 1),\n ],\n };\n } else {\n return state;\n }\n }),\n handle(clearRawDevicesAction, state => {\n return {\n ...state,\n rawDeviceList: [],\n };\n }),\n]);\n","export interface TemperatureMessage {\n icon: number;\n temperature: number;\n}\n\nexport const initialTemperatureState: TemperatureMessage = {\n icon: 0,\n temperature: 0,\n};\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {setTemperatureAction} from './action';\nimport {initialTemperatureState} from './state';\n\nexport const temperatureReducer = createReducer(\n initialTemperatureState,\n handle => [\n handle(setTemperatureAction, (state, action) => {\n return {\n ...state,\n icon: action.payload.icon,\n temperature: action.payload.temperature,\n };\n }),\n ],\n);\n","import {createReducer} from '../../base/fsa/createReducer';\nimport {UserState} from './state';\nimport {clearUserAction, setUserAction} from './action';\n\nexport const initialUserState: UserState = {\n username: 'default',\n password: 'default',\n};\n\nexport const userReducer = createReducer(initialUserState,\n handle => [\n handle(setUserAction, (state, action) => {\n return {\n ...state,\n username: action.payload.username,\n password: action.payload.password,\n };\n }),\n handle(clearUserAction, (state) => {\n return {\n ...initialUserState,\n };\n }),\n ],\n);\n","import {Action} from './createAction';\n\nexport function combineReducer(reducers, initialState) {\n return (state: T = initialState, action: K): T => {\n const output = {};\n for (const key of Object.keys(reducers)) {\n output[key] = reducers[key](state[key], action);\n }\n\n return output as T;\n };\n}\n","import {combineReducer} from '../base/fsa/combineReducer';\nimport {ControlState, initialControlState} from './control/state';\nimport {controlReducer} from './control/reducer';\nimport {debugReducer} from './debug/reducer';\nimport {DebugState, initialDebugState} from './debug/state';\nimport {uiReducer} from './ui/reducer';\nimport {initialUIState, UIState} from './ui/state';\nimport {initialSettingsState, SettingsState} from './settings/state';\nimport {settingsReducer} from './settings/reducers';\nimport {setupReducer} from './setup/reducer';\nimport {initialSetupState, SetupState} from './setup/state';\nimport {initialTemperatureState, TemperatureMessage} from './temperature/state';\nimport {temperatureReducer} from './temperature/reducer';\nimport {UserState} from './user/state';\nimport {initialUserState, userReducer} from './user/reducer';\nimport {persistReducer} from 'redux-persist';\nimport storage from 'redux-persist/lib/storage';\n\nexport type ApplicationState = {\n control: ControlState;\n debug: DebugState;\n settings: SettingsState;\n ui: UIState;\n setup: SetupState;\n temperature: TemperatureMessage;\n user: UserState;\n};\n\nexport const initialAppState: ApplicationState = {\n control: initialControlState,\n debug: initialDebugState,\n settings: initialSettingsState,\n ui: initialUIState,\n setup: initialSetupState,\n temperature: initialTemperatureState,\n user: initialUserState,\n};\n\nconst persistConfig = {\n key: 'root',\n storage,\n whitelist: ['selectedBackground'],\n};\n\nconst persistedBackgroundReducer = persistReducer(persistConfig, uiReducer);\n\nexport const appReducer = combineReducer({\n control: controlReducer,\n debug: debugReducer,\n settings: settingsReducer,\n ui: persistedBackgroundReducer,\n setup: setupReducer,\n temperature: temperatureReducer,\n user: userReducer,\n}, initialAppState);\n","import {createStore, applyMiddleware} from 'redux';\nimport {appReducer} from './reducer';\nimport {Configs} from '../configs';\nimport persistStore from 'redux-persist/es/persistStore';\n\nconst crashReporter = store => next => action => {\n try {\n return next(action);\n } catch (err) {\n console.error('Caught an exception!', err);\n console.log('State', store.getState());\n throw err;\n }\n};\n\nconst logger = store => next => action => {\n if (Configs.LOG_STATE) {\n console.log('dispatching', action);\n }\n const result = next(action);\n if (Configs.LOG_STATE) {\n console.log('next state', store.getState());\n }\n return result;\n};\n\n\nexport const store = createStore(\n appReducer,\n applyMiddleware(logger, crashReporter),\n);\n\nexport const persistor = persistStore(store);\n","import i18n from 'i18next';\nimport {initReactI18next} from 'react-i18next';\n\nfunction loadLanguage(lang) {\n const langValue = localStorage.getItem(`lang_${lang}`);\n if (langValue) {\n return JSON.parse(langValue);\n }\n\n return require(`./locales/${lang}.json`);\n}\n\ni18n.use(initReactI18next).init({\n // fallbackLng: 'tr',\n lng: localStorage.getItem('i18n-lng') || 'tr',\n resources: {\n tr: {\n translations: loadLanguage('tr'),\n },\n en: {\n translations: loadLanguage('en'),\n },\n },\n ns: ['translations'],\n defaultNS: 'translations',\n});\n\ni18n.languages = ['tr', 'en'];\n\nexport default i18n;\n","import React, {memo} from 'react';\nimport ReactDOM from 'react-dom';\nimport './assets/styles/index.scss';\nimport * as serviceWorker from './serviceWorker';\nimport {WS} from './utils/ws';\nimport {RPCApplication} from './rpc-application';\nimport {Provider} from 'react-redux';\nimport {BrowserRouter} from 'react-router-dom';\nimport {Configs} from './configs';\nimport {persistor, store} from './store';\nimport {PersistGate} from 'redux-persist/integration/react';\nimport './i18n/config';\n\nconst ws = new WS(Configs.WS_URL);\n\nif (!Configs.IS_DEBUG) {\n window.onerror = function () {\n window.location.reload();\n };\n}\n\nexport const Application = memo(function Application() {\n return (\n \n \n \n \n \n \n \n );\n});\n\nReactDOM.render(\n ,\n document.getElementById('root'),\n);\n\nserviceWorker.unregister();\n"],"sourceRoot":""}