{"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/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/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/media.png","assets/images/icons/scenario.png","assets/images/icons/intercom.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/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/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/left.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/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","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","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","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","rawInterval","interval","alt","restOfProps","setHasError","setSrc","randomValue","setRandomValue","onError","noImage","onLoad","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","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","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","employee_id","flat_name","security_id","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","employeeId","setEmployeeId","securityId","setSecurityId","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","connectionAddress","supervisor_connection_address","MACHINE_OPTIONS","connectedItem","connectToLocalhost","setConnectToLocalhost","setAddress","onConnectClick","connectToLocalMachine","connectToMachine","SetDateTimeRoutes","pickedDateString","setPickedDateString","pickedTimeString","setPickedTimeString","pickedDate","getTimezoneOffset","dateUTC","getTime","pickedHourString","pickedMinuteString","calculatedTime","updateTimeAndWeather","leftMenuIconList","iconUrl","intercomIcon","canSpecial","scenarioIcon","mediaIcon","alarmIcon","sensorIcon","curtainIcon","lampIcon","plugIcon","airConditionerIcon","cameraIcon","contactorIcon","temperatureIcon","settingsIcon","LeftMenuEditScreen","selectedMenuItem","setSelectedMenuItem","menuItemName","setMenuItemName","menuIcon","setMenuIcon","deleteMenu","menuEntity","toUpperCase","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","SettingsRoutes","Row","Button","textStyle","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","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","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","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","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","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,iBCA3CD,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,iBCA3CD,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,gBCAjBD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,81F,cCAjBD,EAAOC,QAAU,8jG,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,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,+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,EAAOC,QAAU,k7C,gBCAjBD,EAAOC,QAAU,IAA0B,mC,gBCA3CD,EAAOC,QAAU,IAA0B,mC,cCA3CD,EAAOC,QAAU,07T,gBCAjBD,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","file":"static/js/main.8eb118a7.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 = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjI4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjI4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODoyOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmMDg4OTAwMC01MDlhLTYwNGUtOTRiMC05Y2Y0Njg4NDIzY2MiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiMTMwYTJkOC1mNWI2LTE0NGMtOWY2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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABimSURBVHja7F17VBN3vv9MHiQTwiuE8BBfgIK8UcBK6V0VBbXa2rrro6223XWr18fax61d13Zbu93dnmvb07pdj3atd3t7bH3u3R7bWkVxRVptfaKEIgjKU0oJkJAnSWbuH/MbGkISEARXnc85c0gyv0yG+cz3+/s+f0OxLAsBdw9EwiUQCBUgECpAIFSAQKgAgVCBUAECoQIEQgUIhAoQCBUIFSAQKkAgVIBAqAAeEuESeMfUqVO7XycnJwMA0tLSoNPpMGbMGJSXlyMmJia4ra1N+dFHH4Wq1Wr/0NBQ1ejRo6Pi4+NjHQ6H8+zZs5fEYrHk6tWrdS0tLT9ER0dfDw0NtVVWVoKmaTAMg6SkJJw6dQpms7n796qqqgRChxEyAPEAHlCr1dOnTJkSs2DBAnVYWFgUwzCUXC6nRCIRWJbFk08+CYZhYDAYGJ1Od+3EiRP/PHXqVBmAYgB1AByChN5eTExOTn5i3LhxDy9evDimr8E0TQMA/P39RZGRkbGJiYkvPPbYY/j+++9Ljhw5cuLYsWP7AJQKhA4/pAAWZGZmvpyRkZE0YKNFJEJISAhycnJyJ02alPvAAw9M3rdv31tEYi0CocMD9aRJk1bMmTNnXXh4eJjbPqaxsbFVq9VeNJvNRqvV2tXc3PwDRVFiAKxSqQxISkpKpGmaDg8PV4WGho6QSqWc3pbJkJeXN2PMmDFj//a3v/39wIED7wPoEAgdIlitVgBAenr6nMWLF79C07SMZVlQFAUA7DfffHOhoaHh4+Tk5LPFxcW1Op3OZjQaHVqtVu/n5ydiWZbVaDRyp9MZrdFopLt27Yowm83pS5cunZ+enp4jk8kAALGxsbEbN278bWVl5bcACgVCh9gASk1NnUzTtAwAKIqCTqfTHzp0aLPT6fyEpulrroPHjx+P7Oxs1NfXO/V6PZqamowAKsjuywAKN2zYcCQ/P/8Xs2fPnpOWlpYBAAEBAf5BQUGhgsodQlRUVACAvbCw8MD06dOzIyMjk8Ri8Y3169f/l0gk+iw3N5cxGo343e9+h5CQEDgcDn6uFRHrlcnKymJPnjwJmUwGvV6PjIwMlJeXl547d67s0qVL/1qxYsW6lJSUqWfOnDlUWlr6rUDo0IMBUFRSUrLu0qVL41euXHkUQAMAaLVaJCQkAIAYwEgA940YMSJboVDQLMu2qlQqS1dXl4OMPwfgKgAnwzAA4ARwVKvV1m7fvj1RIpGcBNAmEDp8+IZs+O6772CxWPDoo48CwP1ZWVkF8+bNK0hJScmkKKpH9M1ut8PpdLLnz58/UVhYWAjgSwBl169fdwBAbm5uFYCqW3WSAqE3iUWLFvEvFQCWFxQUvDhixIhor76OVAqpVErl5ORMzcnJ+Y+zZ8/Ob2lp2fH1119/AsB4q89PIPQmcPz48e7r9vzzz7+6atWqFwFQLpZvT13NMBCJegisKDMzMys6Ojp606ZNlo8//vjj9evXAwAv7YMGdZf1tigAhAD4EUDXYA8WHBwMAEhK6hVHGH348OFzSqWy2yo1m83G06dPf6fVai+3t7fr29raTDKZTB4RERGanJw8LjU1NSc8PDyIH3/y5Mljs2fPLiBzaS8YjcZ7XkIVAF4HMBbAswDqB3vAyZMne9sVbrVaHUqlEgBQXl5eWVtb++erV68eP3DgQNP06dPt/MCjR4/6nTp1KtLpdGa/9NJLz2ZnZ+cAQEtLyw2Kom65NN0thEoAPAfgeQC7AehvxUHvu+8+BAUFwWQy4dixY667vt+2bdtbBQUFDzU1NTUVFxfvnDFjxhEvh+kCUAugdvPmzdfz8/OfDAkJsVVVVb1LLGgAwJQpU5CXl4e6ujrs27fvniZUBGA5gFdIlOVlAIZb/SMxMTGIiopCSUkJAHQWFxe/W1xc/NGCBQvMAEyuY+Pj41FbWwupVIqysjLXXWeuX79+yWQysfyUsHHjRuh0OpSWlt6xEioBIAdgxeBTRxIAvwbwJgAtgN8AqBnKk8/NzUVkZCQ+++wzB5mr0dzcjIMHDyIzMxNr167lAwwAgMzMTISFhSEwMBAXL14EABsAjBkzBlu3bkVjY+Mdr3KDADwGQAngY95JHwCkANYA+DM5xhoAV4brn5gzZw4AwGC4OWVgsVjg5+c3pNIy3LAACADwAoDxxJC5dpPH8AOwGsAfyR2/HsCpITxnCkAMuMQ2APi7zH8MgBayL4L8Zcg8LibnR5NzbiHfCSFaiiG+qIVEiX68Ewk1A/gAwCgAzxDrdD0xHPpL5joAm4jJ/yyAfwzh+QYnJCSsmDx58mylUikHAH9/f6XT6WSIr8kkJyffkMlkdHh4eJRMJpMxDMPExsZ2iEQisc1ms9I0rfDz85ONGjWqGQBCQkJUcrmcZhiGSUhIMFgsFktqauq1pqamgwD+yavlO8koaiWSKQawiNzVrwG4SPbLyF1NkbmWT/zKAawl33UC+C2Aj4bwPOmAgIAVs2fP3qRUKmU+xqX152CJiYlxPnbn1NTU3Ldt2zYGwAFXC/hOsXKbiGXKAFhG5sQd5H0agChiweqJwaMFMAvAi4ToVwH8dShPsLa2duzatWvXK5VK2VAHYCiKQkxMTOzMmTN/uX///hMu6vmOcluaAbxDyMsHMJFIXiiRUoq8bwegA5fRUBDitwz1yVmt1hi1Wq0ajgvBhw9zcnKmJSYmJgMouhMJ9QMQR4wMMTEq3CEGoCYbAHQS4yEAtyDd5AsRERFRNyNhfRHWH8jlcllgYKDyds2hamLc+BFJ8uRXsm4bQ8YqAOQCeBxABiGuX/8zgCfI+E+JAUF5+T2K/HWPlzpdrFfeybcS9d79P9hsNtvNkKnT6awdHR0tFEVRTqfTKZFI/AIDA5WhoaEBlAvjvshlWZaRSqXi20FoNoBfAphE1KPDB6FwIZP/60dUaOQA/M+RAFYQNW1Dzw4AnkDWhWiHB0JZ8j2WWN43wOU7vwDwAwCYTCZLf4i8evVqi8lkOtzQ0PDdwYMHL0qlUrHJZLJFREQEqtXqSJlMljVp0qTJMTExozUaTRhFUV5JpSiKYhiGHW5Co0lUZgluXztFEID0WzmNAZgNQEPmZ7NUKpX4IrOrq4utrq4+WFRU9HeJRPJVdHS0xxvgnXfe+cfkyZMjNBpNRn5+/q+nTZs2g6Zpj6SyLMt0dHQMOBY9UDKyAOTh7uqNoYhx9gsAqSSqY/ZGps1ms+/du3fbxYsX1wD4P7jV1JaXl7u+7QRXlbB3/fr1/7l79+7dBoMBFEX1mnvtdjsMBoNpuAmNAqDC3YnRAMYAgMM1KOtCpsPhcO7Zs2fHyZMnN8AlTRcSEoLExESkp3OKIzs7GzqdDhERPWy9q5s3b16/f//+3Z6maIZh4F7GMhwqV+xmiPDoIqEsO5m3qH6quoHs48NudnI+fHJb2sd4Zx9jKP5GHzly5AhPc2ZlZeXp8+fP/5EYUdi6dSuio6ORkpLifo26jbHW1lYUFxfzSfP6rVu3bho9enRYXl5enuucSlEU5HK5bLgJlXuR7oMAPiRGRn8yKUw/CGX7QRBFXJ7XyHTgCaXg0mtmMvdOI66P198MCQkJ8bDfbrfbfwugEQDeeOMN130BxGKf/9prr0VZrdYWAGUkNNkKAB0dHQgMDASAih07dvwlJycni6bpQNebRiKRDLuV6+lCM+D6Mw7dJlUpBbDYA6FOACUA/kTOz0Es6+fA5VEDvB3QbDb3MnK+/fbb0/X19d/n5uYCAJ8fBYA0hULx9jPPPDNFJBIp/Pz8YLfbcf/997dpNJq4L7744n1w3WaIj4/nAxelVVVVVampqZNcrVyRSEQN9CIMVFd7ijM6iC93uyCBW6KZ13bgqhiO4KccbD2Av6OPri9X35F/uWvXrp0kaoVXX32V3x22Zs2aV9LT0/PkcrmCT49JpVKEhYWpnnrqqRUPPvjgKmKZIzY2lt/atFptuevxSVnKsLstIh/zz78b+ICBO/Too1TFPbBgt9sdWVlZ1RYLJ7htbVyg6qGHHsqfN2/eo96CBkFBQYGPP/740yUlJacAfHb06NFu61csFpcvXLgQYnG3lqXkcjk93IRSXsi73YR6+n0VgJ8B+BY9qxkeAOCzLVCv1/fIXtfX19dnZGR0AsDMmTO7f3PkyJFj0UcFpVqt1qSlpWUC+CwtLQ379+8HALauru4awzAOsVgsAbh2Q5lMJr0dhN4pCACwgMyxB4kVngTgad496Y/KJRKpa2hoMANcUxJ/DdVq9QhebXoJFoCiKEil0m7N5lIa2imVShk3H9cmEOobahKmfJi4OSoSevRtKJAmFBfV6f/BBx9IAeDGjRvdRteNGzdqydzs83o2NTV1J/HdylBcJZJtb2/XDzehdyKqwDUMWQGMI9awT1INBkOn63uNRhNWV1cXDkAbExODmpoaAGDKyspO1NTU1MTExIz3JKUURaGjo6O2srLycrcFSWIWY8eODYJL9X1XVxdrNBoH3Ml9LyxrwwA4AWAVcVNWAvgVgH3oo7peLBZTbhIampiYmHDlyhWcO3cOLMuCZVlcunTpzM6dO7cbjUYDT6Dr5nA4HBUVFW+bTKYzJpPJtSpQnpGRcV8PV8HhoCQSiVQg1Dt0JNhxlLg1NnDVgX8FUO7ri6NGjRrpOg8CoAoKCh4hfiw6Ojq6efj888//580333z1woUL5Tdu3NCbTCYYDAbnlStXqt54442NAP7CB1tcyB69yKX7yduNJKjcnjDyURr3KQ1cxYR3ayogIND9s6ysrBlz5859ZPfu3dsAMB0dHXw4rx3Auy+//PLx6dOnJ+fm5iYZDAbT66+/vjsvL6+a/35+fj5SUlLg7++P06dPP6JSqcLdyISvLI9AKBffzSRq1zV7kgSuD8Yr7Ha7vZcPpFJh3bp1z165cqW0tbX16+joaLS2trouGlXqKWCxZcsWPPvss65ZmEc3bNjwirvvKhKJKL9BFO7eCyo3iLgoL4KL4Y4n1u6L4Mpf+gpxwk3tIi4ubtzq1as3AZjA76Np2lUF94Vpo0aN+pNYLFZ4cHNYdhAVafeChFJEEn8DYA6ZQ6OJD0rdjJXr6lPOmjUrj6bp7e+///4fABwjxhfy8/NRU1OD5557DnFxcVi1ahWuXOlR0P9oVlbWH6KiouI98SYWiymFQiEXCO0bKnBlM/2GzWbzaAWzLAuZTIb8/PwHxo0bt+2TTz756+eff/45uA4Au4evyAHkAFiwdOnSX0RFRYX5CGYM6p8UOrhvQuV6ktSxY8fGrFmz5o2ZM2cuu3btWlFzc/N1YmxpwdU+TXnkkUcmBgcHTxo9enSk+5zZn4CGQOitMo+NRp+lIDwxQUFBdHZ2dtrEiRPTrFar3Wg02i0WizUwMNCPpmmFQqEQuX/Hq1EjEt2WBPedJmV6cD2jDHqWkWrgo3rBk5Xr82JKJFAqlVKlUiklx+9FPq9SvRHLsizb2tqqEwj1jloA/w0u20IRQq3gqvNfAjDXx3xG3exc54koT8Vg3gL5XV1dMJvNNoFQ34GFUgDn3T5XoI82RqvVavO0wgn//sKFC5cqKioq1Wp1eEJCwtjw8PBIPz8/sStRFEWBYRiUlpaWVVVVlbe3t9szMjISUlNTJ8nl8l6k2u12DGIKvScIjQHwFrhVvPgrZQcQDK5I3CtCQ0NVnshkGMa5a9eu96qqqj45fPhwRWZmZoRarY6habpg5cqVK4KDg7tbGUwmk7O9vX3/sWPH3v7000+1ZrPZHhwcPGHevHkrli9f/rBGoxnhSqpUKsVg3JZ7IbAgJ35oEoBkcDW36eCKucJ9fTHCrf6SkOvctWvXRzt37twALntjAlANoHDTpk2vfvHFFz1aAdva2o50dHQ8B+AMiVTZAVzas2fPC19++eVBUrbpauEOqozzXiC0AVy3+IMA5pHtIQBPgSsagw+jqJcf6nQ6befPn38fnjM1pqqqqst8M3BDQ8MPO3bs2AKuzaKXRi8qKirs6uoyuQUWIJFIhr0u906LFLEkQsRbrU4yt/qcrMyuq/r/9JmpsbHREBYWxq/WyatWrF69GkajsUan03VqNJoQg8HQUVJSUu1SGcipDLkccrkc9fX1te5xW4qiIBaLBUJ9IBrAZnDNTTZCroN8Ps7nneDBlKUoys9ut8eYTKbqcePGISkpCSzLorq6GmlpaQCg4uuDVCpVoFwujzp+/HhVfHw85s6dC6lUiuvXr6OsrAwajSZQ5LZ2HLGIh72M806CBVy1QgW4IrFrZCtDH13SniRUJpMF5ebmzvAkDDKZDBMnTpwdGhoaQIyq0OnTpxfAc2UEvXz58lVwa6OkKIqiaVqI5fpAI7jW/xIPN/O74NZs8HwnWCy96oylUimeeOKJZQBaa2pqduOn3pZQAAvi4uKyeX9UKpX6Pf30079uaWlpP3LkSHc9L4CRixYtevzhhx/uVfpJHg8ihP58QA2u6k9NDBkxUbtqYvH6CsOJ3YMGFEUhPDw8YvXq1a8dPXp05rlz5y4DsM6fPz9+1qxZBf7+/kpXglQqlfqll156OT09fXJ5eXk1AGbx4sWTZsyYMZWiKJG3KkGB0J/CfO4IAVdPtIQYRSJiDAXARxsEADgcDru3iy2XyxVz586dOXfu3JneyOBfq1SqwCVLlizoJ3GslX96wW0mlF/g4nbB5sVq7QRwGNzCVA4ioQ5wLZHz4KPYuq/g/FDAbrez7e3thn8HQiXgiqfk8N2a73oD3EqEEZI8EboHwH63zwPJ+Sb1V+W6WqJOpxPV1dWXz549+3VwcHBIXFzcz6KjoyMUCoXHcF59ff2lurq6OpqmM8PDw0MiIyNlMpms11iHw0HxVvJwEuqtDWIpgFhwq5Q4MTwF2Sy4jMlocO0N7ggGsBBcgtvkoklGkWiRVwQHBwd6I7OwsHD31q1bX5kxY0ZDYWGh8vLly9E///nP569atWpdYGBgsEsMuP299957z2w2f3jt2jXzoUOHgiZMmBAxf/78mcuWLVsZEhIS6a6mB+O2DJRQuxey4tB3nc5wQwGuzf5Rl5uMvwkoL64cRea+EA+hP8ZsNv/TarWuxk/L6lgBtG7ZskUbGRkZtWzZsuUURVEOh4Npa2s7AG4Zu+5oIIBrFRUVFw4dOjTisccee8Y18yIWiweVDx2oH3qVqLI7CWLiD0rJX29S0EXmY4+S4nQ6rSdOnNgIz2sk2SsrK78zGo1mEvpreffdd/fwXWruob/Lly9/76nK3uFwOIdbQr8mcdB5d6GbowVZptVTKYjJZDL9/ve/73XBZ82axb9sNRqNXQEBAf4Wi0V/7ty5On5HVFQUr8rR3NyM5ubmKvf03GC7zwYqoT+CS0n9Cz1rXV0XfeqPS3E7XBlv52EElz35mCfUk5UrFovpUaNGxej1euh0Ovj7+2Pp0qXw9/cHTdOgaToqICCge9XOqKioCLlcjqamJuTm5mL79u0AgGnTpoGiKNYt8sfX5Q57OyGIhD4NrpqNfzqCE1x55AJweUh3o+ksgL1kzhlKH9hO/M+nPJyHA8Bn5Gbk+1wZokKvkhChHQC6urp6ZVT8/f2VBQUFD16+fPkE3DrWxWIxEhMTpymVShoAwsPDw7KysuYePnz4rNuNDwCBL7zwwhpPKncwLfmDvajXyeZuVQaCW++Ad+JF5CLtAxcoHw7wC2mscJFKMbgWiA8wgKcA8upx4cKFj//444+NH3744f/ip9SYBsDaqVOn5vNjZTKZ35IlS37Fsqx527ZtO/DT6t3Rixcvfluj0cx2J5T8xoBj7EP13JZYsvFLr1GE0DKQZdeGCTHgVvh0JbQVXH1Rn0GDhQsXzt27d+9B96gORVHo7Oy0fPXVV2UGg+HE2LFjZRqNJmn8+PFTyWMme4xtb2+3lZSUfNPS0lKsVqvp2NjYqePHj8/mnyPqbhDl5+fnFhUVnR7YBENa4oSt9zZ//vw5DMOwLMuyDMP02Hg4nU7WbDZ3v3cf5zrWZrM5fY1lWZa1WCz6lJSUxIGe872QPht4LNFm0xuNRp03QeCtUv452z5KMwEAfn5+or7G2u12W3Z2ttDwOxTQ6XTXzp49W+pe98OrR3fp8BYm9KQJvaGoqOhYYmJih0DoEMDpdLZptdpvtFptNzmuNbbundqetv6OoygKZ86cKX399ddfAddrelus3Lsd1s7Ozk+2bdvWHhcXlzBmzBh1V1dXl0Kh8GcYBkFBQUE0TdOdnZ16oi7tEolEqtfr22UymVwikUhaWlpa1Gp1mFqtVhsMBoNcLpc7HA67Xq/XOxwOu0qlUjc2NrZMmDDhYmFh4SHiOg3ctL/Lnk54z0NQuQKhAgRCBQiEChAIFSAQKhAqQCBUgECoAIFQAQKhAqECBEIFCIQKEAgVIBAqECpAIFSAQKgAgVABAqECoQIEQgUIhAoQCBXghv8fAH7yvAHPMtKyAAAAAElFTkSuQmCC\"","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+xKcAqZ5EqA5CSmhb96mObx907wn3XKyNMlp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\"","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 = __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,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAB3RJTUUH5QIWDy07H5KPRAAAB3BJREFUeJztnF2IXVcZht9vT9rmn7T+kMYYJYWkQjUqReifWCgUFETBRHrRW0F6IUUbxYIIoeKFBgTxQm96IQgpuai9UhGlEQn4U2MgRFOattOGJm2aNGPSTGb2+3ix98nsOdn7zJmZfX4msx44MMleZ31r73evb631rW8dKZFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRWCwx6gYsFmAC+ISkr0fEo5I+LmmjpExSLumSpP9IekHSYUmvRQQjau7NDbAF+A7wCpDTm2vAS8BjwG0t2d8L7G2jrhUP8CHgV8D7gBcQo4OBC8D3gHXLtL+3Uu/qFgXYBPwCmO5TiG7eA54A1izR/t6aOlenKEAA3wCmligGFD1lErh/CfbrxAA4NIj7HXuAjwH/pn831UuU3wDrF2E7idEN8E2KAboNzgGf68eu7Z8mMbqwvc72826JPM9z2/sXsgscGpUY2aANLJMPSNrdVmUREZI+a/uWpjLlQ68bsJ+LiH1ttaWJJc06hsiWiLhd7S5gt0laK2mm+8KoxZDGvIdExG1q/6VZK2mi+z+bxAAODksMacx7CBAqekeboY9OnR0b2yUdknRfTdl9WZY916LtBRlrQQZNKcZfJX205vK+iBiqGNKYuywVPaPtwKAlMY5iSGPeQ8pZ0TwX0wI5cKek32nMxJDGXJBBANwaEb+XtL3m8kjFkEYkiO0syzIvVA7ouKw23dY9kurC8fPEsB2SJrIsm23R9oKMqoc8AuyQdFnSO5KORMTV7kIDclndYkxKuj8i3gA+IunzkjLAEXFM0okWbY8neZ7/sgxjzNg+avv2unK277V9vo2wSUMo5PVycO+061HbU7ZnbU/bfnx4T6VgJD0ky7JQMcPrfGpdUtFBWu8hHa73jEq7pGLROFHaHPosdBymvbNqf2q7EG+oS4ySkecYjIMgw+Yq8EiNGGPBahTkXxFxZtSNaGIkY0gxm73uphrdVTnt7VmmjnJ21lTXdFN9lXahEY0hIxEkIqw5f93otysPdtm+vUuk2vq6JhFotQhie7qSvNb4sIFZFclvffWQBXpGhxkV8ay6dk2UdVCWuWHPZNCMZAyJiPcq/1wv6daGohdVZCL2U2c/YkjSORVuq66OjZrbK8klTfVju01G5bLe6vwpaTOwWdLbNeXOA6cjYucS7XSLZBWDem04JCK2aW4Nck3S+aXYXQ6jmmW9prm39I6IuLOh3P8i4k8q3tY2eFfSkboLwISkuzXnQi8CZ1uy2zejEuQVSRfKvzdI+kxdoYgAeF7FQm65IOlFSccbrm+W9EnNCfJmRJxrwe6iGIkgwJvAy2U8KQO+YHttQ/GTwLPATDUI1VBvL87a/nlEXG747q7yA4DtfwJ9jV8rHiBsH2Aug33S9j09ym8FXmDhjPcmLgPfBWrTf8qX4oeV+q8AXxvcExhDgAeBd8oHMAv8AGjsscBDFJnvi2UK+DGwsUfdO4Bjle8cpxIFXhUAG4HfMpezexLY1VB2L0WofDHkFG7xCWBDj3ZkwFPMZdbntp+hx8tx05Ln+VfL/QeXexA/sz1vA4mGhGfbl22/bfuK7dnK/sol28dt/8T2p2zfkINVxfYe26cqWyene7nPQTPSPfWI+KOkP0j6iooJxuOSjtg+nGUZFGcw6vJpJyU9LGkNsCsitpVJdZckvSrplKS3sizrOV0uN8a+D+wslyy5pF9LOtnKDa5EbD9ge7Lyhp6wfW9Tz6Brl28ZdtfZPmD7/Yrto7Z3tHFfKxZgDfAkxcyGckz57yDFANYB+4FLFZtngS+1cU8rHmAzxfnBmToVWhbjDuAAxTG3zoRiCvg2DdPiVQmwzXZTz5hcrhhAZnsPxdmPq5W6r1BMixtnYqsSGg7J2J4BDtt+mEUcR6vUm1Eci9sPnGL+4nIK+BFFcDPRoUmMiksxcL4U5jHbd1GMA7V7KRTj0geBB8qIwHHmH4szcAb41lJEHiQjz7Kg+ZDM31QEHndrbo8CFVHiMypiXCcj4lUVkdnZiNggaWv5nbsl7ZS0RfNjdtckHZV0QNKfm0Lxq5IePeOQ7bC9O8/zg7Yny4VfEzO2Z/ooc8L2U7a3jvrex45eYlTL2b7F9qdtP2P7pcrKvh9mbb9r+0XbT9q+y/ZYh0SG7rIoZksHVe+mGrPPywf5YWBPRNwn6aHyUxdteFnSPyT9XYV7OpFl2YWacqsbYDvNQcK+f6qC4tcdHgQu1tSTl4P1ilxTDK370uKJpTJjpddgfDUihp4x0gZDCS62KUalTqn+7MggjsENjYELMggxpJ6Z8YPKlh8KAxWkhxg3HAVIFAxMkEGLkVzW4jmoJYhhu1cm43WATQ3ZihER621v6aONSLo87HOEvRior+0Ki/QjRkh6WtIX+6h+k4rwSN0W7WlJ/SS5zUh6Osuyv/RR9uagXJH3tZdBEZl9tmGdMgimbX95GM+hXwY+yxrmD7fcDIzbDwcg6XVJx4Zkb6YrEz+RSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQi0Q//B52QKFO8OUpCAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAn4SURBVHja7J17bFtXHcc/5/raTuyOJE7bJOv6Xl9Z13aFjjGp1YbYQ4MBEiDEH0xISEXt6ArrKqGBeGhCaKPrGKVNx2OT2sEfSAjWDQ2xoXVC0yZaKEOlrNn6TGkTx2mad+z43sMf97gyrtPcpI5f/X0ly76Oz70n53N+v9953qu01oiqR5YUgQAVCVCRABUJUJEAFaAiASoSoCIBKhKgAlQkQEUCVCRARQJUgIoEqEiAigSoKEt2ka6TABon8Xtl3qeygu2a0rqAAwQrFKgq0qo/XUwo15J2zHwIioVOqrDzKQCkp5Buokoz2bSZMOQK0CqI55W+SrlcgepCMkmZf9Tylwm3koGW0iqCwBJgkTl2gG4f6W4AbgGaJ/NPGr/bBNwPrAdqruKiVaUCLXajKFNQMWAz8KCJVc8D+4HRCc6zAtgOrAa6gJ3A6z7zsMGkXWWu8zrwbeBSdv7SZei6JlfSWhfjlVHm+Cta6+Gs44ta67smOEet1np3znne1FrP8XH9mNb65Zy0Wmv91dz8pbVmrDhlMi2vUrncpUBt1nEDsMCHq12S812rsfaJVA/Mz/N961SaxBJDr9SbwHHj6jRwGPj7BGl6gNeAQZPGAV4Gzvm43gXgLePeM9e8aM53RYHYFQy0VDHUMo2TzwFJEz/f9nGeOuBLplFzAvgVcMZnHuYADwMfB4aAF4EXxsmfAJ0k0GwPN9XRoKlmPGDSuj7yJ/3QIvXjr6UWOlSxZLZFgIoEqKhqYqguYOwrVkxXYqGi666VWwm1viru7yMWKo0ikbjc8nOPSixUJBZaho2tqr+xoVioWGhFxlQlQIurp4CVwACwEegrlwI6ufqeFcAuYLZ5/0UBT78B+BEQAb636N3XDlQL0HvxFn5pYEuZVfrdwN3m88/xlsLsLMB578Ob2J9ljncA1wy0XGJov3nvLcOGy005x08D3ywAzH1ZMMFbjSGNoiLoCa7corET+Po1eKP9xoVna58ALY72A49w5UqHHcCjU7DMX+dYJsDP8NYISyu3SGrLiqeZFnPYuF98xtRMzJyZ8/0uvAXgKbHQ4kPdCIxMIabmi5kAzxgrT0o/tDT6pSmzXTlltxNvNeGOq8TMXJh7puCyxUKnQXvHialPAtsmETO/MR2ZE6BTd79b+P+1vZax0Ayou8eJmU8CjwFj05GxcnG5mR3wISpnmK7NQPxJTjnuABYDn8xjmW3At6YzU+UCtA9v2K+Xytpwu9u8Z0MNjNNHbcPbQsn1APTLxjpdvE1EVBhUB/gh+XfCJQ3M7cXITEmAJpNJRkdHUEoRCNhEItFuZRzt4OAATtohFA5RWxuppIbS0nG6L4dNa1ZXLdCOjjMc+cdhQqEQsVgjt65aQ21thOHhId555y2GBgepr29g3e13UFdXXwlA7wEeGOdvrcbV7i5GRoreyh0aGiSR6EYpZXYdw6Xei3THuzjxQTtjqRS2bZNIdPPvY0crAeZ9wG+AZeP8vcH0W7dVJdDu7jinTp4gGAyilMp5WZc/27bNYH8/8XhnucN8MU/X5CDeHtSMFN6c77aqAtrX18e5jrOEQiEAXNcNOo5zp+u6m13X3eo4zoOO49QD2LbNxYs9nDl9qlxh3j9OP/OnwKdNP9XJKesfA5uqJob29/fR0XGWSCSC4ziRWKzxa4tvXrKxoaFhmVKWqqmt7VRw4L/nzz2htT4XCoVIJLrp6DjL3Lnz/Fwitw+rp9Ey843N7jUNIxdvd3gt8GxWOSu8Ib9aCjNJXjqgl3p7aT/+H8LhMI7jEJ0R/fzyFa3fb26+8UOZ30Sj0eZIJLoxmUqm4/GurZZlpS9d6iUe7/QLtJRudm8e69tjID6NNzuTPfiQ+b4yXe5ocoTe3h4TO5k3Z87ch5qaWjIwXcwkcjQaZfHiJV8IBoPrLcsiFAoTDIbKHeZTeOO74/VTN+UMmGRi6mMVa6HhcJjm5hYsK0A6nf7ozMZZH1Fe53MQeAg4CvwBWFHfEJvV2DjzM1rrNxwnzYwZM/xeRk8zzH15YO4GvsPVx2ZfwLtz2S4zkpQdUx28abTKAmrbIerrYyjLwnGchaFwOLOGZjPwe/P5U8Ahy7Ia6+obbtFa47puOQww5C7oynapW3xWpDZjmc9y5dSbKlRMLRpQpRQB28ayLJRSYaUut19OZv3sVMb12rYdyQC1rJJOCq0fx81mJqcnoz1ZUAM5MTWFN61WGTFUuy6pVNJ7JZP9ruNmavW9Wa3TB0wLkFQqedH77SiOky4l0GfIv2zk8SmebzdXTr2pQsXTolno2FiKnkQcy7JJp8eOz5w56wJwI/BdU1vfNzV0Rjo95vQkEoe11jhOmkh0RimB3pAHyKOMf7NmP2rLqhgZSw1VFNBUKkkikSAcriGdTv+tK9751+aWli/adhByVrzFu7rO9PX1/k5rryLMmt1cSqDb8ZZyRoCXzHEhGl9tplI8Yjg8V5DQNs13Ert8h67hoSGOHv0XHR1nsCyLYDD4idbWlXsWLrp5SVY8pSeRGDxy5NAPBgYGdiilGB0dYemyFaxduy7veaean0n+rWJUNAuNRKPcNHc+J09+QE1NDWNjY39pb39v68jo6Kam2U13WoFATd+l3mOnT5/aPzAw8Lznpsdoamph4cLFiMoMKEAsFmP58lba298jGAzq4eHhV+NdXf+M1NbMC9ghOx7v6u7r630f0JkWbl1dHQ0NsVL0OwXoRKqpqeHWVWtAwamTJzJdmAtKWReUUubYAjSxWCOrVt9GOBwWSuUYQ7O/dF2XkZERjh8/xvDQEAsWLCRgB+m8cJ7+/j5uW7uOmnCYUHFhVkUMLQnQbLCu62BZgct9Ve0NKpSiLARolRVSVQCVhdbSKLqm2i8SCxWVk4WqCohPVXO/ebFQcbkiaRSNr6XAWiCO98yWEZ/p5gHr8CaED+JtcvJbee/Ce25LJ/Bbc+3qUomefbZBa/221npIa92ttX7cPNtsovOsNM8wG9Ra95tnocV8pLO01g9rrc9rrR2t9ajW+hWtdV2evFX0qxQWGsLbbXZHVkPkHPBH4N0J0n4Wb91RJp0LvAq8MkG6FnPNlqy0aXMuiaEFuKbK4/rVFPPrJ53KE14CVOE9JkrxD42a+LUabwnnAN5s/QkfaQ8AH8PbIJzGWx55yEe683gbiuZndVP+rOFP1XZXx1I+++zDwBq8pw6+YcD62b29ArgdbyPtQdPA8aMw3p6TNXgPgX1JQ7uqsn5oqR9ml1vgoz4GKSa6hu+05iEtl/PmVkF/rpxiiFuMGuU3AwK0sEDVJFlQoLTSKJoGQ5mWtNfLLa2L5Vl6iul/J/uA0LTJn8p6SaNIdN0OLIgEqEiAClCRABUJUJEAFQlQASoSoCIBKhKgIgEqQEUCVCRARQJUNGn9bwAdg6AgOyZMTwAAAABJRU5ErkJggg==\"","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,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABy/SURBVHja7H17kBzHfd7XPa+d2ffuYW/vBR4eJECKBASSARVbckjLIWUpDG2ZYbmcKoeyZCeqMiNZVsmOZZdYieQ4UlyplOJSqSxLVkqiWCxHUmxTJUWm+ZCiFykSNF/AiQce7rGH3b3dnZ2Zfc3OdOcPTK/nFrt3B4QCQNx8VVMH7Oz2zHR//evf7+tf9xDOOSJEoFEVRIiIECEiQoSICBEiIkSIiBAhIkKEiAgRIiJEiIgQISJChIgIESIiRIiIECEiQoSICBEiIkSIiBAhIkKEiAgRIiJEiIgQISJChIgIESIiRIiIECEiQoSICBEiIkSIiBAhIkKEiAgRIiJEiIgQISJChIgIESIiRIiIECEiQoQ3PuRLfcEXXnhh5OeEEHieh263i3g8jlarBUmSUCgU0O/3b92zZw9Lp9PPvlEqttls3lytVqmiKM9UKhX4vj94rlgsBlmWMW6Py5tuuunqJ8JOwTkH51xWFOXOXC73EcMw6pzz9/m+X389ypckCYSQTZ8xxsAYez3KziUSiT+klOZs2/4k5/z/cM69yCJcIBhjkCQpkclk7svlcv8+FosdBdB2XffOTqfzsCRJF102IQT9fh+GYUBV1U3nfN9Ht9s9jyAXAt/3oev6naqq3pVMJg1FUTKO4xRN03yEMeZERLgASwAgVygU3lMsFn87FovNB58bkiS9t9Pp/KBSqSxdbGMxxlAoFJBMJs87Z1kWVlZWcLFE45yjUCjMJxKJ93LODUIIYrHY0b179/6RqqrZZrP5Bc55PSLCzkiQzWaz/65YLD6gqmox3JMlSXprs9m8fWFh4S8vtrFc10UymRzZ2I1GAydPnoSmaRdtDTRNu71YLL41/HksFpufnp7+MKVUa7fbn+GcNyIibEECQoiay+XeUywWf0dV1YnhNnQc5ynHcdYkSbqoXss5B6XjA6Xp6WnMz89jdXX1vGFjp3AcZ81xnKcSicTtAAaFqKpaLBaLv9PpdLqdTud/cM7dXU2E1dXVkQ2UyWQwOTn5rpmZmQ+oqjoREEN8pWPb9sMbGxv/vdfrvdLtdgmllHPOwRgbeN9bDRfiu4cPH8bMzMzI7xiGgVQqhVarhV6vt2154pqUUhBCwBgjvV7vyWq1WuGcfyCZTP4qAF18X1XViWuuueYDa2trr5XL5a+ZpjnyGrsiami32yPH7Uwmc7RQKHwkFovtDSIGUUmdfr//uVKp9F8BLAcVLhxKxGKxgXXwfX/sdfv9Pubm5nDzzTdvaU0OHjwIy7KwvLwMWZa3jDrENV3Xhed5AMAJIa7rus+XSqUH9+/f7yiK8j4AuiBOLBbbWygUPlIul0+3Wq3nt7JQVzURhsdfxhgopem5ubkPJpPJt4R7NufcrdVqn/N9/4993z8rGoYxBlmWkc/nccMNN2BychK+72NjY2NLJ3GcbxCGqqq47bbbsH//fvR6vbFDycTEBCRJQrlcxssvv4yNjQ1BBqGJLNfr9T+WJAn5fP7fEkJU8VzJZPItc3NzH6zX6x9kjDWvBDJcciKkUqnhnkoLhcJ9xWLxV4bCPM+yrK8sLCx8qlgsng3H/YIEuq5DkiTIsgxJkqAoypZE2GmkQQiBqqqCpGMJEziw0HUd+XwetVot7Nii1WqdPXv27KduvPHGVCqV+tfh+i4Wi79imub3KpXKXyiKwnYdEYT5FqZf1/Ujs7Oz71UUZVM812q1Hi+VSn/quu6KGIN930e73UYmk0EikYDneQMBaDsxKOxL7DTM3K48SZIG30skEoP7830flFJQSuG67kqpVPpTSZKm4/H4Pxe/VxQlOTs7+17btp/u9Xonhnyiq58I11xzzaDXtNttPZlM3pfJZG4eshKnV1dX/6zdbr8oSRIopeCco1KpoN1uIx6Pvy4K4OstgmmahlarhUqlgsnJSVBKIUkS2u32i6urq3+2f//+A4qi7Be/yWQyN8/Ozt5n2/YpwzA6l/O1SpecCHNzc+GY/s2yLN9NCFFCZtit1WoPm6b5LUmSuCzLaDQaaDabaDabA1IEViXLOU8CWAPgX4b6kzjnM5xzG0BDhKfNZhMAkE6nIcsyGGPcNM1v1Wq1h4vF4ocBqMHzKpOTk3fn8/m/UVX1+5eTyJfcS6lUKjh79ixM09Q0TftFTdOuD/cE27afXVlZecj3/W6/3wchBJVKBZZlDRy9IBRMT05O/kYul/sYgPlL3ZuC683ncrmPTU5O/gZjLC3uQZIkWJaFSqUykLR93++urKw8ZNv2s+EyNE27XtO0XzRNUzt79iwqlcrusAiu6woFbp8syz8PQCKEgBACznlvdXX1r9bW1l4aDt1CkQQ459lisfib8/PzH1JVdQ+AFwH8tx023uuJf6nr+v379++vUkqlM2fO/DnnvCGep9frodfrDb7sed5LiUTirw4fPnyMUirCJ0mW5Z/nnD/U6/VO/v/Mo7yhLEK320W32wVj7K0ANiknzWbzueXl5Uc9z4Pruuj1eqI3wfd99Pt9yLJszMzMCBJMBs/wbwDcvOWDUrqlLnARpLk5uC5VVXVyfn7+QzMzM78py7IxfM+9Xm+gNSwvLz/abDafG9aQGGNvFXWzK4iwsrKCSqWS9jzvbQBSoYr3lpeXv76xsXGq1+uh2+0O4vKgN8H3fVooFN594MCBB1RVnQw11lHf9+9ljOnCiw8f/X4flNKRE03joCgKOOfwfR8jytR9378XwNGQajh54MCBBwqFwrt936fD997tdtHr9bCxsXFqeXn560PT0inP895WqVTSKysru2NoUFUVuq4fisfjtw4NGS+3Wq1vpFIpLkIvxhg8zwMhBPF4HIlE4tjBgwcf0DRtVoSDQQi37DjO6ihZWKiUw/rFTvQO0zTR7/fPE6E453AcZ1VRlGVK6V6hUWiaNnvw4MEHOp3OK47j/FgIUolEYvA8jDHearW+4brur2madkSUGY/Hb43H44c6nc6PdgURrr/+ekiS9OZUKnUwrNcTQp5QVfXUnj17hKeNWq02mCgqFovxa6655tdTqdQtwtRzzuF5Xsk0zU84jvMwY6wTJoIgwcTEBNLp9AXfazKZRK1Wg+/7GCq3Y9v2lzjnXiaT+ZgkSdPifCqVuuVNb3rTr585c+bk8vJyS+gNIoLwfR+KopwihDwB4Iiog1QqdfDAgQNv9n1/dxBhcnLSAHAEgCrEJUmSbFVVv7Nv3z7X9300m0288sorA2vAOUc8Hj+eyWR+CYAUciA7jUbjC6ZpfllV1dY4EmQymYu612w2C0LIQLoW5QfEtRqNxpc553v37NnzIQSTSwCkTCbzSxsbG1/nnD8OAI7joFgsYnZ2VlgxV1XV7wB4D2MsGdSBOjExcQSAAaB91RMBwBSAo2FnrNfrvdLv9//BMAwhwIAxBlVVhUVIZrPZewHsHVIfv1Or1b7gum7L9/3zpo7z+fxWJJABzAMoBhrEanBs8hIzmQw455vkYwDodDoIrvsFwzD+STwevzP0s73ZbPZeWZafYYzZhBAYhoF0Oj1QVh3H+QdFUV6RZfl4SGk9GtTP4m4gwhyAA0JSpZSiXC6/0G63S0KyjcViuOOOOwbW4OzZszcZhvGOIam6srS09MV2u72oaRo8zxtMaPm+j1wuh2w2O+4eNAB3Afg1AIcAeACeA/A/AfzfYTIIy1Cv1wdEEM6gbduLS0tLXzx8+PCbJUkqiN8YhvGOgwcPfrlYLH5P+EaNRgO2bYNSCt/3S4ZhvDA9PX1c+DuEkANB/Vz9ROCczwGYEOM8ALfb7b7c6/VamqbB933EYrFNzp2u67dJkrQ3rMebpvlUs9l8TISEwsMXPkUsFtvqNv4pgN8P/obDwTyABoCXhn+QyWTgeR7q9fqwuolms/mYaZpP5fP5e0NC0d59+/bdpijK90QZwvmUZRm9Xq9FKX0ZgEspVQMyTACYuxxzDpc8fCyVStOccyX0sGVd108pisI550gkEsjlcpt8NkVRjlNKZVH5nuc1yuXyN3q9Xrnb7aLZbMI0Tayvr2N1dRWSJMEwjHG3kANwL4C3jKiLOwG8E6HMojDa7TbW1tawvr4O0zTRbDZFWFgul8vf8DyvIYhAKZUVRTkOIBkWxcQEmqIoXNf1UwDK4hznXCmVStO7wllsNpvFqampsBdeTiaTa2J81zRtOATcD+BweHy2bXuhVqs93W63z5sm7vf7m/SHUf5q4KyO6naJ4FwKwHnJDb1eD7ZtnzfdHUQ4T9u2vZDNZm8L3f/h4P6fB4BEIgFFUUQ2EzRNWwuIMCeGwWazWRyXQXVVEWFmZqYw1NB1wzDquq5vakwBSZLmKaXFEBG4bdsn2u32yiilUPS4bZ55q+dWxp0X+sYw+SilaLfbK7Ztn8hms8fJP95AkTE27/v+80KkCg9ZhJA6gHrYYszMzBR2hUVIp9N5MYUc9IyW7/vdkBM4mGIOxtopSmkqpDm0CSEvGIZhjSJCv9/fLvG0B6A1zoUJznnj1MZkMjmyfM/zLELICwDanPN4cK8pxtiU67qbyBn6dxdAS/gcnHOk0+n8riACgIQwg4QQOI7TabVanuhl4UyiwGcoJBIJLUQER9O05VgsxkdN0IiMpa2mOwBYY855AGwA/VEnC4UChE8yfG1ZlrmmacsAHEEEAFqn0yk4jrNJgwgNKV48Hu+kUqlwjmZitxBBFUQAAMuy/EqlwkTFhsd3zrk2NTWVSyQSgxlKAK1sNmuNcwYDK7LV9TtBZDCOCE0AI1PNY7EY5ufnx2Y4a5pmhXs4AMmyrNz6+rpGCOkFhAmHwKxQKPgiQgrKVHcLEWgodITnebzb7Q4WhYaJwBhTPM8zhiq9qyiKu1V+4jboBI3NRkRNbkCS3lZzJVsMPW5gccJ6g9HpdBRK6YAIYS3C8zwerg9cphXql4MIw/O7JNTbzxtLKaV8B2VcCPoBGUYRwQ98BPY6PRsopXz4+YaelbyOz/aGIoIvHCNKKRRFUWKxGBUWIbw2gTHWk2XZOWfxOQkqT3VdV+l0OiPNM+ccsVhsq+GhH/R6d8TzewFJxnuawRT5qFlOXdcVVVXVkD/DZVl2dF3viR4fzsb2PI8qgWkTvhEhxN8tROiFHcJ0Oq1pmiaLihoiQ98wjFrQU+XgfLxarabW19dHrlHwPA+zs7OYmpoad30GYD3o+cOOhjNKPxiMKZ0OlpeXYdv2edf2fR9TU1Op6enpePjjZDJZm5ub64ecyjDR5VgspoX1CEmSeruCCJzzllDYACAejycSiURsuNeFKm4DgEsIkYMKT3a73RkhJ48iwg4ynM2ACHuGPm9sRYRarYZarQZFUc4TrRhj6Ha7M4yxZIgkrq7rG2F/ZshSxTjnCeEjBDJza7dIzBtDfkCGMZYJMpDg+z5kWR4clNJS0HBizDVkWT7s+/7IbKQdrl/ojBkCHGwzBSzWUA4fvu/rsiwfppSGrYxJKS2FnkVkWgnCZgghmbBPVCqVNi6HRbgcRFgcaqi8aZqFcrmMcrk8iNHFQQhZBFASjUAIoclk8piqqrPhiR8Rh++wN7WFdz9CY+hv9cNQou2miSdVVWeTyeQxQggNPV+JELIonkWseahUKiiXyzBNs4BzE12Dckql0uLlIMLlkJhP83MQSmzBNM35ev2c0ppIJBCPx8Nj6ZIkSQuc81tFtk8ymbwhkUjcWq/XfyKcL9E4lFKsr68jFoshn8+PI8Y4i9AapyE0m02sr68PZh7DM5DBSqdbk8nkDeL/gdS94Pv+EuccYn1GrVaDJEliqnw+l8sVQmTmMzMzp3cFEaanp0uMMYsxlg4qK8E5P7S+vq56nucG+YA4cuSIcBo7AH6oquq/opQqgdRbKBQK79I07e/a7XY1FotB13Wsrq4OtIjFxUXEYjEkEolx6mJ3jKU4jwiMMTiOA9d1B17/7OwsOp0Out0uDMPYk06n36UoSiE03vdd1/0hgA4hBN1uF2trayiXyyKjWs1ms4cAJMRwQwixpqenS7slalillJ5ijB0XPSebzV6XzWaz3W63DJxLeX/11VcHDhSl9In5+fmFWCz2JlFIOp3+BUrpXd1u90vDsnKQ+AHLsmAYxqiFrJ0xvkBnlJjUarWwsrKyaSc0sfA2uP+7ksnkL4SHj36/v3DmzJknhBWzLAuu6yKbzYp9lrLZbPa6EAlAKT2Fc1lSu4IIawBOEEKOi1Axk8kcuuWWW+YIIWVJkuA4Ds6cOQPbtkXDnpyYmPhqLBY7JO5ZkqTJdDr9vlqt9jJj7NlhB5FSiuXlZWQymVG5CS0AtRFhpT1sEXzfR6PRwPAiVdGAqqrenE6n30cImQwHL47jfLVWq50UzuT8/DyOHj068C0453Oaph0SibFB2SeC+rn6ncWgEV4dUg/nNU07Zts2NjY24LoudF0fRACe57mlUukr/X7/B0OO28+kUqnfVRRl3wWuYuoAqGDzekk3CB03WQRh0kcJSIqi7EulUr9LCPmZTYpVv/+DUqn0FTHUCQ2i0WigXq/Dtm1omnaMUjo/VO6rGD8zenVZhG63y33fX6CU1mOxmEhF0nq93u2nT59+2HVdW1EUWJYFxhgMw4Dv+6jX6ycrlcpnp6enryOEFIJepeRyuV92Xbdl2/anCSEvEkL4KLl6hILYDCIEKUSO6nDUIPY6CFsEQgihlN44MTHxgKqqv8wYU0IOa6VSqXy2Xq+fFBt6CCFKpKqpqppMJBK367quiWGr2+3WGWMLkiTxbdLsrg4i9Ho9tNvtFwghz+u6fkeowt9GCDlmmuZTIpNZOGdBNjNvNpt/nUwmb0mlUr8NQA5Sw3Vd1+/nnFenpqY+zjnvhKe5x0xOefjHyaVYSHo+z29QFAXT09OD8oK/sUQi8au6rt8PQAmte/Bs236o2Wz+NQAuSRJ6vR7q9ToURUG/3wdjDJOTk8cIIW8Lk7XZbD7POX/BMAzsCiIEfsEq5/w5AHeEFLe5TCZzz9LS0g8B9ITosrGxgUOHDiGVSoEQYlmW9VlFUa7Xdf2ukILHNU1byefz53n8YxaV8kCkcoeGhtao3+fz5+WKuKqqrgTlDK7R6XQesyzrs5qmWbOzs7AsC6dOnYLneaCUotVqAYCWyWTu0TRtbmg4eY4Qsnq59ki45D5Cs9mE67qupmlPhh0jQgimpqbeOT8/fyyXy8F1XVBK0e/38dprrw0sA2PspOM4f9Lr9Z4OFfstQshXcWF7JNjYPNPXxfg8hWH4wfW+FbJ0TzuO8yeMsZOqqkKSJLz22muDtLtcLodrr70Wc3Nzx6ampt45NGytaZr2pOu6rthb4aonghhzCSHfZ4w9Hj6XSCSum5+fvyeRSMgBCUiQDwixFV2Q3vaEaZof73Q6z3POW4yxLzHGKiGPfJPyNwZLAE6GLMSLAFbGWbHhgzFWYYx9iXPe6nQ6z5um+XHG2BPiHk3ThEiu7ff7BAAMw5D37dt3TyKRuG5Ip3icEPL9UftDXypIDz744CW9oOM4QpVrM8aYoig/RylNBvsOkVgslpdl+QQhZFmsiOaco9FowDAMxONxSJKEfr//qm3bZc/zThJCvsoYG+lthxNBhmAFhwbgBQB/iXOLXNgwCcSGHcNhZb/frzabzXaj0fhfAP5GkiTOGEO1WsXJkycHs6iGYSCfz6NQKPzs5OTkhymlBbHPku/7Jdu2P+W67rNiMu5CF+y+IX0Esc8iIQS2bT/JGPtmLpd7j9CbJUk6nEwm77/++utflmW5duLECSiKgk6ng1OnTmFiYmIwb99qtf7W9/2/03XdDku+4UbcKoAB8Lc4t5jFDyxEf5QFE4tXhz9njFUty/p0t9vtZjIZXziTp06dgmVZAwfxuuuuw7XXXptXFOV+SZLCqfm82Wx+c2Nj48lR939VE8GyrHBDmYqiPJROp98mSdK1oo4Nw7iHc/6MYRifu+GGG/rpdBrdbnewpV2oMVxCyNitbLewBmFJ+aXthjJVVQcbXQyVxwkh1nBW1eHDh+G6LmKxGJrNJgzDUFKp1H2EkHsQZCQF1uDVZrP5kGVZ5uXcUe2yEMF1N7dbpVL5rmEYj0xOTv6+iOklScoDeH86nX6tWCx+c8+ePeh0OgOVb6sdVkNiz2AxyVbtjHOLWYSquCUZAIwiw6bhgnOOgwcPDvZfrFar6HQ6b5dl+f0IzTQC8Dc2Nh6pVCrfvRJ2iLvkRAgvXgkcpV61Wv1iNpt9u6qq4WVoNyWTyd9jjNX7/f6PXNcdKI2jxuwwCWRZ3gkJCgD+GYBjga7wYwBPjYscwsk0oxDkJAyeUeRVUEqPJ5PJ38PQNkGu6z5drVa/2Ol0erty59Xhxgk2pfxJtVr9zNTU1GFKaSa0y8ntnPM/APCHnPMXzwt5ggoMT0MrirKTndX3AHg/zu2BNB1YhGUAfw7gLxBKhBkeasTsZjj3YVRDBsLTjel0+g8IIbeHchLBGDOr1epnXNf9yQ5WZl2dRBhl1m3bRqvV+hql9GenpqZ+SzRqINTczRhzCSGf4Jw/H65oXdcH29eJSaAd9C4K4B0AfisggcChgByLAP43RmQTiyFCbJIler2QoIe+e5RS+lFK6d3CYogGL5fLj5w+ffprF7ob7FVFhHFm1fM8e21t7dO6rh/OZDI/F87zp5S+2zAMtd1uf5Jz/kxYEQwWjg7KSaVS20m0kwERRq06PgDg7QD+HmNWQ/X7fZimed4il1CDqpTSWw3D+Ail9F9gaB2HaZpPra2tfdp1XftKsQZXDBGEyNTtdl88c+bMJyRJMpLJZHizLUlRlLs1TUuqqvpHAL43jlA72EIvg3ObUYzDLM4tO7PGhb9iu90xuFXTtP+kKMrtw4KdbdvPnDlz5hPdbvfFy7Wf4hXrI4TheR4ajca3l5aWtH379n0skUjcEjbpqqoeyWQyW+6KtYMKdrF1gmoPYxbBAoCu69v5IGlVVY8Mk8BxnB8vLS39x0aj8e3t6mFXSMw7IAmvVquPLi4uPmhZ1nD+wWOU0h+Fl6ePOrZBOYgQ+mN0hRPjnMVw9LDF8SNCyGND2skPFhcXH6xWq48G2gOuNFxxb4INKomVSqVHFxYWPmpZ1reDUzXO+ec557VR2v/wa322UrkBfB3AE0Nych/ANwO10d3O4ohrjThqnPPPI8iAsizr2wsLCx8tlUqPAmBXIgmuGB9hFBkYY9xxnL+vVqtWv9834/H4hizL393O9O8wJv8xgP8M4CyAGwOJ+VkAn99OaRRb+W7zLofvuq77SKvVmjBN85OO4zxzIS8O2fU+wrD5DTT+Z06fPv0f8vm8t3fv3vZ2mvwOK5sBeBzn5hcOBkRYwAUkjo67ThD6tkul0n+p1WpyOp1eFItbLmDdxe5TFrcIJweE8DxvcZt9kS4WrwXH6w7P886IhBTx3muxJ3REBJx7yeZOwDlHq9UahIRXslkdZxnEENJqtQabckdDw0VUpGmaWF1dhWEYUBTlgrbZ/2liJxqAoijwfR+rq6swTfOKtQRXPBGEY1atVhGPx+F53qYp7HE6RLFYxPT0T2+rwrW1NVQqlW3JYFkWTNNEq9XClSYevdGIIBJVeKfTgeM42y53930fy8vLOH78+E+NDKurq3jppZe2zTQWL/YKSCDGNR4R4eKIwMPj7U6GE9u2Ua1WfypEWFpawvr6+uD9Cxf7PBERsOP3KpGLLVvTNCwuLiKfz2N2dvZ1vXfLsmDbNnRdv9hZwyuWDORKmQaNcJn9sagKIkREiBARIUJEhAgRESJERIgQESFCRIQIEREiRESIEBEhQkSECBERIkREiBARIUJEhAgRESJERIgQESFCRIQIEREiRESIcEnx/wYA7iZ3LTfGeuIAAAAASUVORK5CYII=\"","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,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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+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozZWI4ODgwOS00MTFlLWVmNDMtYmZkMi0xMjE4MWI2Nzg1NmYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnyEOX8AAAsnSURBVHic7Z178BVlGcc/KIjmLQXvKALilBrKxbyBgamQSGijhpcyb9kw2kyOxXQbdYpxUmvUSdNK0QIsUYOm0vKGiBdQLl5AEO+mZIJaoub12x/P+cme97xnd8/Z2/mt+5l5Z3579n2f93n3u2d3z7PP+/56SKKiPGxQtAMV6VIJWjIqQUtGJWjJqAQtGZWgJaMStGRUgpaMStCSUQlaMipBS0YlaMmoBC0ZlaAloxK0ZFSCloxK0JJRCVoyKkFLRiVoyagELRmVoCWjErRklEnQg4GptDemqcDh6bpTEJK6c9lM0umS5ms9F7VoY0qg7UJJkyVt1QFja6v0UPfMnD8IOBE4Dujj2b8nsDyGnX7Ai57P/wvMAmYAd7fpYyF0J0G3AI4HTgYOiKj7FDA4hs1FwLAYda4HZgJrY9gslqIvETHKSElXS3pNrfH9CLvfbNHeOknTJB2Sw5jbLoU7EFLGSloQ40DfKukI2b3TpV8T21t56v5a0jhJc2L0uUTS0QnG9okU9OyQA/qMpJ9I2sNp87JTb3ET23c59V6X1DOwfzdJP5K0MsSH8wo+Pt1O0O08B/EWSV8JabOfp81kp85XPXUOC7E5QdIfJH3ktNm9A45RQ+n0h6JHgCGB7R2B1RFtrgVOcT4bDawBNgfmAr0D+24Gjomw+SlgHdCjtv0isEtEm0Lo9MDCfGf7xBhtTgPedD6bCzwOPEC9mO8BJ8SwOYn1YgLMi9GmEDpd0Pud7UNjtBHR37gujsdEjcLt1/WrY+h0Qd1v6AHAhjHa/QP4U0Sd24BbYvpxsLN9X8x2udPp91CwIMGgwPYI7Md+FJtgor0PvIZ9E3sBW2OX3SOxiFAUg2o+dLEW2Aa7EnQcPYt2IAbzqBd0FPEEfQf4Qgr9j/T405FiQjGX3F7AwBbqz3K2x6ToSxwOcbZdf8LYlfqHsMwpQtAzgKexp87rgLOA/bBLpA83+D4a2Dgj31w2BL7ofNa3Sd2NgOHAmcA12E+uZ4HvZuadhyLuoauA3TyfrwEW18oSYCGwL3Cjp+7nsBMia3YBnvd8fjpwO+bfUCzAPwzYzlP3FWD7rBx0yVvQQ7EDkYRzgF8B/0vuTiQbYb9rr0xo51jgpuTuRJO3oHfSeE9qhdwOjMN44C8J2i/GLseZk6eg/YHnnM8mATthv/OGATuHtB8P/C0Tz+IxErg3ZP9q7Ol7PnZbuZH638z7YPfVbMkxcHyVE9y+09nfQ9IQSafV6i6Q9EGt7jFFB71rZUzA/4cl/Ub2XnWopF5O3VnOeG/Mw8e8vqEbYz/iewU+G4PFWMPohz1VLm2z392BvbCg/hZYgP1lYBnwRJs29wTeovFq47I3jX73Jeush5zO7HOcs/XJDPvaUdIPJS1VOMskXSBp1wx9WeT0OTXDvpDyex/6T2dgZ2bUzw8kvaPW+FDSTzPy5xinr/9k1E+ugo5zBvWGpI1S7qOPpHlKxiI1T1lJUl5y+jk+gz4+LnncQx8A9g9sTwEuStH+1tjTYz/PvkewNMwVWGy3N3ZfHY0F+V3WYoECX2pnu5wG/DawvQL4bIr268nybJGldrgskDQxxT6WNeljbES70ZLmeto+r/r8oiRlrKR7PX0cm+L460rWgp7lGUwXsyUNTmj/Mo/dS1q0cZ7HxvSEfvWXdEPI2KcktF+YoMjyau9vMrCPJP24TbsDPPYubdPW+R5bQ9q0NUXSe03Gu0ThCWndQtCucoakNU0GukrSUS3am+bYeDShf/Mde3NabD9B0hNNxrdO0rcT+tdxgiJLcL6yyaAli64MjGGnp6Q3nbYHJvTtM469DyVtHqNdf0l/DBnTNEnbJ/StYwXtKvtKurvJATg3RvuDnDYrU/JroWN3Qow2pzYZxwJJozI4dqGlqCSxh7DQ3+nAq86+52K0dycY3ZmCTwB3OdtDvLXqcd+Xvgacjb20DwvmZ0LRWX/X0Jjj6grsw80aeCkddxpOpm1itHFjs4uBX6biTRsULSg0Jly1E+lIKzqShp1CE8iKFvQEGrPqfBN4XdxvxU7puEP/iH58bO1sDwVOTced1ilK0L2wl9UzaMy3iTNRd6mznVYmoGvnsRhtBjjbfbFbyd1YzlG+5PwUtomknzd5KpSkO9Q4RdBXekl6y2k7IqFvgzz+bBmj3QBJN4WM6QrluGZDnmKeqMbXaF2slnRyi/amOzYeTuifO2f01hbbHyXpqSbjWyMLrJRC0BGegxXkIkmbtmF3sMfWhW36+D2PreFt2OkhC2U24z5ZKLTbCvqtkMHdLmmfhPav9ti9oEUb53pszEro12DZy4dmxAmedKSgR3gGs1TpvuRd5eljrqKjNJ+XXVZd/iWpd0q+TVRj9EmSTkhx/HUljxfcD1Ofk5r2C+7tsRfZ23r2PYhFkVZgCWKbYk/RY2icIkitzlDqZ5sl5VTsqbeLp/HPHEiHrM6UQJngnJ2vKr0XyF1lR0kPeb4JrbBc9qSb9vifc/r5RgZ9fFzyEBTZU2yQUzLqZ6rsLUmr/ELSBhn482WnnzdlD07dXtDgenqSvTfMqq+BMmHDlqSRbGmcS2SvzbLyxV1n6eIM+0LKL9F6M+AN6qcGjCR6anufWnmyzX73BvbAplhshiVIv4StA7i4TZuDsHvtKxH19qRxhtx2wL/b7DceWZ8xgXKNc7be5qkzWNIk2SXwHq2PBkUlfOVVRtX8eVeW4XC5pJPk/5bPdMY7Ow8f85ys5K5VADARC6yPwtIqw+K4caZOZMkI7D1uM57Bnujvw8Y5m/qpH3HXhkhE3tMJ52HitctE4M8p+dIKo4E7iLcCi49Hsct/5uT9tuXChO3nAJOxibh50BP4GvbmpF0xAX6WjjvRFDEl/xkaXzmBrf71COun5S/AMu6neermNSV/Z+AFz+dnUz8lfzg2/3NLT921NF+XIXWKWNbmMuBSbEGJRdh9aSH2jvMNp+4K7CoSjLSsw06KPFiNPc0G1044l/UpJiuB6bW/N8dE3bdWhmPPBFfk4WgXRQh6FXY/WhazvjvP5B7g7VQ9as4HmK/BNQZ9i2iAXWHupT4xbA/iJb2lRhEZC+8SX0ywdeWD5L0GvJsJOKmFtsvJ7+QDusdKYm4QvZWVMP8KfAi8zvql4T6NBemPq30ehZuK6Qvqdwydvtaf+1CyDtgKuxRG4Vs3N8jfgXEx/XgZ2CGwnddDWcsUnfUXhZsR+CDxxNyfcDEBxgJHx/TDXRXU9atj6HRB3X/nETdDfnbMejdQH81phtvvgTHt506nC+pGla6L0eYyGpdoG4f9jBiD3VO76I2lkkbxO+oTqDv3PtoBAe9mpa8amSnpSyFt9va0+Y5T52RPnTEhNg+RdK0a/4lAFi/DE5fCHQgpkz0HvotlshVPBjhtnnXqPd7EtjsXdI3qX3D3kyVyLQnxod2Jyp9YQcfLJvFGcbNsvYTzPfuafYu28dS9XNLBsqn0H3j2B1mhDNdJSFIKdyBGOVzS9ZLejjjILlHpnGH/6MfH+zKxj8xp3G2VTv8dGmRbLAT3dSxmGsYLNE488vEYNs8mjOXA72slrWmLmdGdBA1yKHAS9u88NvXsH4YtohzFQCyt0uU9bBnXGRS7AmjrFH2JSFj6yhajWBy4NF7eoo3zAm0fkz0M7dABYyv9JTeKccBhWCJ3nGhSkEuwaNDslH3KnTIJWkHnR4oqWqQStGRUgpaMStCSUQlaMipBS0YlaMmoBC0ZlaAloxK0ZFSCloxK0JJRCVoyKkFLRiVoyagELRmVoCWjErRkVIKWjErQklEJWjIqQUtGJWjJ+D+O/BK7VyVsSwAAAABJRU5ErkJggg==\"","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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjI4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjI4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzoyOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MTdjNDAwYS03NWEzLTk3NDctYTM1Ni00NGI5MzcxYWQxM2UiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjMDFlMWUxMy04ZDFlLTkzNGItODU5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\"","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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODoxNiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OTQ2MGE1Yi0xOTk0LTdkNDMtODQ4My1jN2ZjYmNjN2Q5ZGQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphMjI2YmNhNS1hMjk3LThmNGUtOTRmNy04ZjRiMzAxYWYzNzIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmMTZhODUwNS1hNjRjLTU4NDAtOGFiZS03MDdiNDEwYzhlMzQiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTZhODUwNS1hNjRjLTU4NDAtOGFiZS03MDdiNDEwYzhlMzQiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6Mjg6MTYrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTk0NjBhNWItMTk5NC03ZDQzLTg0ODMtYzdmY2JjYzdkOWRkIiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+sD8dAwAACN9JREFUeJztnHlwXVUdxz/3pZUutLS2lTZpA1SKGy5FO4CCdkRtFR1wwSEiUlRQEFEryMjIOKM4FUZHaXEcBXVcBhy3YLE6inVU1FKQOi5oZSmmKtbaxhKbkPV9/eN77iRNkzTl3Zd38nq+M3fykpd7c9/5nN/vnN9yk0kiKR6Van0DSQcqAYlMCUhkSkAiUwISmRKQyJSARKYEJDIlIJEpAYlMCUhkSkAiUwISmRKQyJSARKYEJDIlIJEpAYlMCUhkSkAiUwISmRKQyJSARKYEJDJNKeg6s4EXAucAZwLzgacUdO0YlQECngD+AfwUuBP4M9BT0YUL6FycDpwLXA4sD98rHPWu3MP8F/g5sB74ZSUXLMJCng9cCpyKZ04b8Aego4Brx6wMOBZ//vnAaqBMBEDeCLwIz5Z7gY8B27E517MyYBbwMuAa4OnAayq9aBFATsVu6t/A54Cf4JlyJGhXOBYDa4FplV6wiF3WknCdNmwZRwqMXN3Ag0A7BXz2IoBMDV/7gYECrjcZNUBBm5gigOQ3koXjSFRhn7uoOGQyaOigRbslr3cgGXaps3DwWsKBWwfQhd1sVKpnIBkwD3ge3pYfh+HsB/4KbAUewmCisZh6BVLCMN4AvBk4GTgaQxoA9uKY6avALzCkKFSPQDJgBnA2cCVwUvj5//DAz8Vb9UXh9RPAr6kwB1WU6hFICXgmcBGG0Qn8BtgM7AaeDazCVnMazsM9AuwkAtdVj0CmAyvCUcZrxWfD1x7sytqAq4ClwOnAicA/iWCRr7d6SO6ulgIz8W7qV8B9wOM4qn4MW8sDGNjTgEYimZyTCch4A88Sg9mDPgylb8j7wutJBwZSwrWbKMYiips4hPLt65k4kTmX0cEI6AX24MGejdeKRUBDOG8aXmOWhZ914TxUFGmfKMx0DJWAhXjr2gLsA74G/AgXhUZahDuB3+NFuhlYid3Uj/F2dxlwHvAMDOEveFHvG+FaE66YgZRwWvsCXABrxrN/Jp7pP8DrwnAofcA24A7gHTggvAR4Zfj9RcDx2Hp2Aj/Ei3wUWepYgeTVuBbg3RhMb3hvBXY7A3gwOzgQShnXKG4F5uBt7cJw5GuGsNV8CdiE15QoFCOQErAAeBvwTqAJu6fNGMQZOB2yFq8Bm7ArGwold0Xr8G7qbOyqpuDg8H6gNVxzL5FYB8QHpAEDaMEwjsMD9m08m+fgyHo1hnIFtqZWDk5/lIGHgVuwJZ2AgbYDO3CFs4cIgsGhiglIhuOBi4C3Yze1F7gN+DzwKIOtRQ0YynLgA9gibufgwS3jdaMDJxKz8LOaB4CjKSYg84C3YMtYgt3Qt3BrTRse7H6cd+oEjgJegS3l+vD+Nxl5xotIdlGHUgxAMuAYDCNfwPdjN3UzB+eYevEasA5bykrsjm4I738fxxaHew95bFPT9aTWQPKgbw1eD5qwm2rF+adHGHmABjCUG8Lrs8K512C3dgd2VeNRKZz7LLw+3c/hAy1MtQSS4a3ohcB7cXywG/gObid6mLGj517gHuBTeFBX4UG9HFtUK4fezmY4JrkYt8F2AjfhGKcmNZJaApmPA7dL8QxtB76LYTzE+FxHL7AFuDZ8/yrcSXglg7uvsTooG8M9XBhel3EWOOPJub6KVatc1hzspt6F14xOPHg3M34YufqAPwLvw+kR8EL/IeD1OCIfrjzwvATv6pqwVTWEc6/CXYgNh3EfhWiiLSTDQd8avIA34hl8O/AZ7KaezKIqvC2+HqfYV+Pi1HvC+xtxcJnfQzPeza3BbvM/uHu9GbeGnoyhgDsxJ65PWVKlx98llSXdLWn5GL+XSWqS9GFJOyT1S9onaYOk5vB+pfdylKSXSPqepB5J3ZK2SnqrpBnhbyyR9HFJOyUNSNolaZ2kZZJWSNoYzuuWdJ+kCyQdM8bfnCrpfEmPhnMq+gwTBaQkabGk68KND0h6XNJ6SccXBCM/pkl6cYDSFcBsk3SepIWSPjEERrukT4Z7KEmaIum0IVB6Jd0jqUXS0fUEZJ6kq8NAlMNAfVFSY8Ew8qNB0nMktYa/NSBpu6Q7Je0O97Bf0k2y1WbDzj1F0l3hvD5J90o6V7bASQ0kk7RA0vslPahBN3WrireM4UdJ0umypXTIKodjl6RPjwAjP6bIVrZZUqdsKVskvU7SzGoCqeYuKy8u5XHGCbiSdxsO6Krd5VHGdZH1wM/wTi7Du7ItwJeBf41yD/3Ab4GP4sfVuvAje9fiuspIO7dCVC0gedB3Po7Am3HQl6dDRovAi1YPDh434Ia4TvyZGzmweW4k9eJmug34cbUu3AF5Nc6hzarGDVdr2zsLR75X4BT6HpzO+AJu45zIfFE3g92JHwFeDrwAp1nyespoaZZenMzMc11n4QLZB3GaZTMFW3m1gByLo+YmvMdvxRW87dSmmaAftwLdGF6vxBayFlvMSEWuXHlnYwkDPAM4Bcc6Wym42lgtIPtx9Dwb+B3wDfzIcC3rEGUGXVAPHtDnApfhgR4aPA5XF+7vKuPk52Js6YWn9KsFZA/wdeAuXLtuI46iUL6mDGAIq/BsvwxPoo2MPsidwN24Xj8HVx07KTi9Ui0gfXjh3oFnVUxl0i7sarrxfb0aVx7Pwbux0ayEcM4DDFYe8/xXYapmLiuaxoER1M1gPaUPA9nG+B7lrurnqnWBqpbqx//g4DpcJNtBBI8kFAlkMv47jT6cJf4bkVh0EYHhPvxhnoqLTpPtSVxRGYwGbGEzKOCzF2Ehf8K1hxOBN+GaxmNEMuOqrKm4QvlaDKViFQFkE04pLMUNbnPxAhnNc3tVUl5seyl+6Ed4clZ2Ualit78AJw8vxo0Kwvvz3rFOqgNl+Gmt6Tiu2Y6DzlsqumgBQDLc2NaCe6tOYnI8d1KUurFH+AruVmmv5GJFAEkqUEfSTJ4USkAiUwISmRKQyJSARKYEJDIlIJEpAYlMCUhkSkAiUwISmRKQyJSARKYEJDIlIJEpAYlMCUhkSkAiUwISmRKQyJSARKYEJDIlIJEpAYlM/wclfcSVxQK9PwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNDoyNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4ODBmYTkzOS1kMTYyLTZiNDktYjZjZC03YzA0NTQ0Y2Y2ZjUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NzdkY2I0Yy0zNTA0LTI2NDYtYTBh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\"","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,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+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrhtAqYAABC5SURBVHic7Z17vB1Vdce/OTeJvLkQb0oChEdFCmLzgGiBglEKJCENgpCKUZvSUlJqLcVqwcbPh1hbxbdQRVGoWBL5EBF5KBVjEgKx0GAkRrhQMdyLwZAAIRQvJiHh1z/WOdyTOWvOmceeM+d+ku/nsz832XNmP2bNzN6z9lprD5PEEKcCnAaMAk4BeoD9gAnA78Wc8wLwc2AjMADcCzwNLAF2FNvcYhk2xATaDZwKTAImA0dVU0jWYcJeCawClgObA9dRGENBoPsAFwFnA28rqQ33ArcDXwd+W1IbEtGpAu0BzgPeCUwBRpbZmDq2AcuA7wF3Ab8uszEenSTQEcAsYDZwOjC83OYkYgVwLbAIE3bpdIpAZwP/AhyRo4z1wP3YhV2OTXyaMRF4AzapOhN7tWdlM3Al8KUcZQShbIHOwi7EMSnOeQ5YgwltJfA88CCQtyP7Y0KeiE24JmMCT0Mv8AVgAfByzvZkogyBVoC/Bi4HDkt4zmLgbuyz4uFimuXSg43hU4DpwOEJz9uA3ajXAa+Gb1YTJLUzjZfUq2Ssl3SlpEPa3MZm6R2S7knYflX7Or6dbWxXRSMkzZO0JcFFuEPSe6vnlC3AuHS4pMslPZmgP1uqfW9Lf9rR+WmS+lt0erukb1QvVNnCSpsukLSyRf9UvQbTim5P0Z29JEFHb5E0tuiOtiG9S9KGBP39jKRKUe0oqnOjJC1s0bE1ks4qqmMlpW5JH5X0Qou+L65eoyEh0OPUfGzpl3R2wRe27HSAWt/QT0o6OXTdoT9bJmKfGAfGHL8JeF/ICjucGcCNxF8PMBXnraEqrIQqCDgX09R4jd8GfIhdS5hg+t4/BlY3+c0C7NoFIdQTehK2IuHpXzcCbwX6QlQ0RNkL+Bbwrpjj26vH7shbUYgn9ORqQzxhrsaE3RegnqHMy9ir9SMxx4cDt2E67XzkHITPlfRKzKB/rWzWV/YEpdPSqYr/Lt9evaalTIomYmPmXs6xK4H5WQveBTgW+Cmwh3PsZWzc/VmWgrO+co/DZrOeMG9ktzBb8SgwFXjWObYXdm2Py1Jwlid0FPAQ/srDfOzp3E0yejDh/aFzrA84AVseTEyWJ/QafGFeyW5hpuVZYCa+ndLh2LVORVqB/i1wgZN/H/DxtJXvBoB+bH3Y4wLsmicmzSt3GvADJ/8hzAZoc5qKd9PADMz4rMs5Nh1b4G9JUoEOB34FjIvkbwSOx2xZy+JtwInAQdgb5xHgAZprZzqVq4G/c/KfAn4fU0A0J+H3zbyY76aZJX7PnSRpSUy7JOkxSQuqbdy7xHamSd2SHo7pz7wkZSSpZLx8S4NEFRSU5sd0Oo7nJd0gaUKJbU6ajpG02enDFiUwZ2lV+DD5NkArSuzwzU570vA1SXuW2P4k6d0xbe+VySSzQC+OKfj4kjq6IKY9aXlCnWV85qXbY9p+cbPzWk2K+mg0tfwP4MJEQ3xYZmPrqaH4Dda31hONcjgMf1GjnybmpM2+Q2fRKMwByvnePAD4z8BljsVmlZ1KP36fDwMuizup2RPaC/xBJG82sDBL63LyN8BXCir7YOxp7UTGAY/TqMTfhn3GNHwuxj2hs2kU5i8oR5hgXmhF4Wm+PLownet42udI9RRwlZM/EpjrneAJdATmOBTl09nblZukLhNZOLrF8Qqmo16LKSsexl6H3wY+THiH4yifBp5x8i/EZLUzzkxptjOz6i95xpfUfSILtzSp91hJjyYo4/uSzmlSTt50aUy9s6O/9Z7Q9zh538x1j+WnyJmopzsFeDO2yJzEM2468F3g+/hrxHm5Ht//tEFWUYH2AGc4J4aeYabllQLL9pau9gV+THrP8enYylNoXsI39TwDOLQ+IyrQ82kc8G8CngjWtGwU6fq+3smbh93cWZgEfD57c2L5dydvOPD39RlRgZ7tnOTNstrNfxdYdm/k/3sCF+cs8x8I/+r9CY1tBZvtDqv9p16g+2KOrfU8gn2ulM3agsoVsDSSNw7z5s7LmwKUEeXrTt7eWJwmYGeB/hWNY0ZIVVtW9iDenjUvw7C11HoaPwWyMSpQOfV8BRtPo5xT+0e9QL3X7Q9DtygDR2CL6EVxZuT/oaKZFDEz30rjGwXM2B0YFGg3jUGdniWjbWhg/q/g8qNqvw3A7wKU6ykDQnCPkzcek+FrAj3V+dGPCmpQWp7Gn4mG4tHI/18E/idnmb+huLmHJ1CoyrAm0EnOD/J2KiSLCyw7anz1euCQnGVup7joZ7/EbLmiTIJBgU52fvBgQQ3KwnyKifvzMRoDVE3FVjLyMA7feDoUnvXlZBgUqKdg7iSB/gp/MpAXb0kulaV6E54LVI7Hfzl5R4EJtItGgT5A/shcoQl9g/0vsKmgep6lWBfKFU7eUUBXLXhwlFUFNiYrNwcu7zsx+ZuwgIx58JYfQ7IOP5bhaRV8F/plhTYnG7/EV31l5bomx67PUe4AGXxSMvCUk3dgBQvrHWVDwY3JyuWByrkZW6SO46dkd+1YmfG8tHifRadU8FcV7i+4MVm5g/xP6avABxL8LutT+uWM56XFWwHrqdCoiBbtjiCZjrjAE0mZTbKZbBaTmyeIH5tD4212sH8F2z2hno4Lux2hF5iT8dxrST652ghckbL8vDdbGrwVqAkVYHQks6/4tuTmRuCzKc+5Fbgk5TmfwiwXkjAX202iXXimp6M9m6JOft3W82GST5KuwsLKZOFP8DUz9VwMfC1j+Vlx9QQhI4m1i2kMLvRehX1Hx03iVmCqvJrgLwBel6KuqVjEkrOAf6JxLfIhLBrMdRRvzpkMxzRwaYHmiHnTmXXtvE/SkXXHJkj6kKSrJV0k6ei6Y2M16PzziKQTE9Q1q66u6XX5EyWdImn/urwvV3+3SAVF2XTSFDkMFYGOkQWyirJd0kckjYw5b2T1uOffeo2kHuecHkk/dH5/tyxoVO13B1TLjsbI3STpCkkHFXxNXIEOkxR9Fy8D3l7Cy8JjAjY+zcEP0lTjRez1uhRbEB+DKUxOoLl90ABwJ2amugTYUs0/DbNkOJfGlZdXsOWxPVu0fSu2pvxVbAwOrRufgrdgUb2j6lla8J3VKu0jizm/2LsDC2S9pE9JOjjSnkslbc1Z9lpZYOSQoQGmOvVsQtKySObSgJWmSTMk3SrpuVSXKjzbZe4R9fHhx0laFaDsDdp5PM6TPuCUv6xC4+r3GwO/GlpxErZkdSf2iivCWi4NXZjB+Q8wW9gTMEX4ZHyFeBpGY+4SeS0iwCwromysYONIPWMDVJaUd2Bj31vaWGcaTsSU7adjqjbP7ycLIYzXvTF8oIJtORWlO0CFrdiH1h/sncKd2KRsBbb4n5fzyLfXGpilX5TlFcyqLsrpOStLwj+S7iO/TF6HtReauMOnYCT5gx17uxc/PUxSF41GwVdgesyi6MJsbroLrCM0L2FbQYPNO7I6M9W4keyLDOB/Bg2vYGND1FffM+sMyfsYWsIE8/2pWdnnsWiocQbZXfs9T4J1wI6aLje6SnB+xoqSkjSuQadRC+dzZ4CyxgBHZjzXc4T6OQwq5z2zCc9WNwQVOndW24q3Vv8+gO80lJaoo1RSZjh5K2FQoJ6VnzeLCsHbGXqv2xqHYdFhXiWMq0jWG9vzsl8FgwL1Pl2KmumeVFC57WJq9W+IxewxGc55C75+ejkMCnQztpFOPVMyVJaEVmFkOp2aY1fUySkLWQTq2VGvpmqlWL/AfXvkR6NptDcKQZG+nu2gNhRFH4AsNNsTLQ7Pj/c1S/p6gX6DRmfX92eosBkH0xihbKgxDvvc2Eh+g7r9Wv9kJ8YzODGr57baP+oF+hKNFvPe4JuHrNP0TmI4g6Ha2y1Qz8htgDpDtqhNUfS1+yYybggTg6euGorUvgPzTozSREo5EH93x69SpzWKCtTbHe+TKSptRZZJQCdyQvVv3omRF9UkjjPwV1h28tGJCnQdja5qM2gScDclh7b+yZCg9qbZnOHcNVgQqfHE79fi4e0xugJzi3wNT5d4LXVRNar8M3BRisrjaPfieVHUFpeTOPWuxRbKV1X/ZvE/PRxfHdvg9ugJdBF2B3XX5f0ZNiDnjbl3UM7zO4Xu6t+a+u9FzGNvA2bV0I9FkFmDBTDOy6VO3m8xWe2EJ9BtWHzYL9bl7Qv8OfZpk4e9c57fKdRmp6sxzU0vfhDIELwefzL0TZyYSmlClK/H3vveFolJeZJw43GZ9GIW9e1gEY1uHKlDlAN8LvL/MYRzuB3qDGv9kyCciO+T8zlitidrJtCFNHpyX0a+pa+8sQs6hW+1qZ5/c/I20MyapIXtp7cRz6qc9qTvlHSTpG2prVrL5XeSrpd0ltpjp+yFipdybsQzDPt4jupfL8Q25MnDGGyv6bOrf4vcKCAr/Zg69C4sUnW7Yk+MqNYdVcQ8ho3dsUJLst3keOzbqd5C7xksUlaeCVKUiViI72Mxe90yPnGew/Siq7BIpGVtWfld6kKmVtmKKeabtinp/qHzaIy98zjwRxSzEexIzN/yCEwZcSqmEB+DTePz7Jsi7EZcj00s7sfeQmuxiGUhInHm4Qr8sfNjwCdanZx3Q9hrgA8mKSAQXZjabTSmID8UM6fsxrbT2gdTfuzAzERewAJJbcJWRn6BPYXPEC4ubkjGYjdZdBadeEPYEFs2hxhPd2OK9/vwDQASb9mcxiX/bvxAFTdQnLnKrsQCfGF+loTChHRPKNgNcA+Ndi3rsCWlTo1A1ul8AV9f+2Ns2SxxIJO0AgVz93uIRhXew9XKQ858dwXm4A9ZfdhDkircaxaBgplieiE+f429NnYLNRnnA7fEHDsZW25LRdawNj/BdIxbI/mHYq/k7ozl7krMwRfmVuzaphYm5ItTdCvmABudSk/Agjkk2QRuV+Wj+K/ZmlOxt89ZMgLoHGdK2uHoHLfLQq+UEa+hk9O3nWtV4/K85YeIJHYHtgAbjQ7ZBXwP+37djSlA7gLe7RzbgT21+X1yA95550oaiLnzrpbU3QFPR1lppqSNMddmS/XaBakr6yw3jonYHiueif/jWDCoXW0G/EHgS02On0eeMTNC6OCNP8O23Opzjh2N7Xb4F4Hr7FSOwbbjiBNmH7ZsGEyYQNBXbn0aJWlhzCtGskXyP+2AV2ERaT9J8+VPFGssVkFBHovu3CVNOiVJ35EfQHGopvMlPd2iz5+RVCmqDe3o5DRJ/U06+LykT8gibpYtkKxppqR7mvRR1WtQH25uyAoUSSMkzZMf5rTGNkk3SDquTW3Km0ZKmiPpsSZ9UrXP86rXoPB2tfsijJfU2+ICSDbGntbmtiVNYyT9q0xx0oreap/b1r4yLkhF0lxJfQkuSJ8sWvTkEtpZn8bJomQvSdBmSXqm2sfCxsq4FPo7NC2XYe6KSfbafB7bomMhGRXXKXkDMBN4L/Z9nYRtmBH0JwkT9iY1ZQsULNToXOAvSW7pJyzqxyPYkt2DmK3Qmgz174GtOx6JOTcfj31DpvFlHcCU7VcRY9HeLjpBoDVGALOwoIank92ybztm6tjqCXkj+UPJrsC8ARbRIUZnnSTQeg7BTDLm0nkeawOYG/x1RJxtO4FOFWiNCmZ0fQ62gl9UdLNWrMaextuwzQY6drOiThdolG7M6HoSFovwKMJvgLMOC4axErOgX04xxuSFMNQE6lHbpXgUtprTgznkTiA+6soLmNA2Yq/Qe7FA0Evwd/0bMvw/fDQn02PSd7QAAAAASUVORK5CYII=\"","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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjIzOjQyKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjIzOjQyKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyMzo0MiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmOWUyYjE3Mi1jNTA2LWIzNGQtOTZmMC0zYWU1NjNmMjY4YTAiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo4MjYxOGY1MC04MzYxLTVmNDUtODgz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\"","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/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/left.532229d2.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\": 310,\n\t\"./tr.json\": 311\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 = 309;","// 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 IMAGE_PREFIX: 'http://10.201.1.58: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,\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';\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) {\n return this.ask('ConnectToMachine', {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 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 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 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 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 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) => resolve(status),\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}: { status: string, info?: IntercomModel }) {\n if (info) {\n this.dispatch(setIntercomInfoAction(info));\n }\n\n this.dispatch(setIntercomStatusAction(status));\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';\n\ntype Props =\n { interval?: number }\n & React.DetailedHTMLProps, HTMLImageElement>;\nexport const Image = memo(function Image(props: Props) {\n const {src: source, 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) {\n return;\n }\n\n setInterval(null);\n setHasError(true);\n setSrc(noImage);\n }, [hasError]);\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 const onLoad = useCallback(() => {\n\n }, []);\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 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'));\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';\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\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 ] = await Promise.all([\n languagePromise,\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 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 employee_id: 0,\n flat_name: '',\n password: '',\n security_id: 0,\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 const [employeeId, setEmployeeId] = useState('');\n const [securityId, setSecurityId] = 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 if (!isValidSIPNo(employeeId)) {\n failure(t('pls_enter_a_valid_employee_sip_no'));\n\n return false;\n }\n\n if (!isValidSIPNo(securityId)) {\n failure(t('pls_enter_a_valid_security_sip_no'));\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 employeeId,\n securityId,\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 employee_id: Number(employeeId),\n security_id: Number(securityId),\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 employeeId,\n securityId,\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 setEmployeeId(selectedGateway.settings?.sip?.employee_id?.toString() || '');\n setSecurityId(selectedGateway.settings?.sip?.security_id?.toString() || '');\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 \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.length, 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.length, 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[0]?.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\";\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\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 (/^\\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, address, failure, username, password, connectToLocalhost]);\n\n const onConnectClick = useCallback(() => {\n if (!isFieldsValid()) {\n return;\n }\n\n (connectToLocalhost.value ? rpc.connectToLocalMachine() : rpc.connectToMachine(address, username, password))\n .then(() => {\n success(t('operation_is_in_progress'));\n })\n .catch(failure);\n }, [t, isFieldsValid, connectToLocalhost?.value, success, rpc, address, username, password, failure]);\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 )\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 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: '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.toUpperCase(),\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 {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';\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\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\";\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};\n\nexport const Button = memo(function Button({onClick, icon, isBusy, hasError, title, children, textStyle, 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","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';\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 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]);\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} = 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'));\n } else {\n answerCall('hang-up');\n }\n }\n }, [answerCall, dispatch, isIndoorCall, status]);\n\n const setInfo = useCallback((info: IntercomModel) => {\n let name = t('UNKNOWN_NUMBER');\n let cameraId: string = null;\n\n if (info) {\n if (info.camera_id) {\n cameraId = info.camera_id;\n }\n\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 if (cameraId) {\n setCameraId(cameraId);\n setNoImage(false);\n } else {\n setNoImage(true);\n }\n\n setName(name);\n }, [t]);\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'));\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';\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 {\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';\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 },\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};\n\nexport type IntercomState = {\n status: string; // todo enum\n info: IntercomModel;\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 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,\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":""}