{"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","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","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.tsx","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.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/ServerSettingsScreen/index.tsx","screens/Settings/Server/index.ts","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","index.tsx"],"names":["module","exports","Boolean","window","location","hostname","match","createAction","type","payload","meta","undefined","Error","error","number","createActionCreator","executor","resolve","str","toString","Array","length","fill","split","join","createType","Math","floor","random","callable","Object","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","id","Promise","reject","set","websocketSend","answerRequest","applyResponse","toCamelCase","response","apply","e","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","map","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_THERMOSTAT","BRIDGE_DEVICE_TYPE_ID_STPM","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","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","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","ROLE_SELECTION_ITEMS","NotificationSetting","allowed","UserEditScreen","useParams","question","setActiveNumpadInput","renderNumpadKeyboard","userList","currentUsersRole","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","roles","UserListScreen","qrVisible","setQrVisible","currentUsername","currentUser","u","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","o","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","resetDevice","is_temperature_device","toFixed","GATEWAY_TYPES","GatewayListScreen","selectedGateway","setSelectedGateway","onRestartClick","manageGateway","Reboot","home_network","ip_address","SettingCheckBoxComponent","GATEWAY_TYPE_SELECTION_ITEMS","entries","GATEWAY_NETWORK_SELECTION_ITEMS","GatewayEditScreen","isUPnP","setUPnP","hasIntercomCamera","setHasIntercomCamera","rfNetworkAddress","setRFNetworkAddress","rfNetworkID","setRFNetworkID","rfNetworkChannel","setRFNetworkChannel","homeNetworkOption","setHomeNetworkOption","homeNetworkIP","setHomeNetworkIP","homeNetworkPort","setHomeNetworkPort","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","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","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","ALARM_LEVEL_LIST","SIREN_LEVEL_LIST","SIREN_LIST","HEATING_MODE_LIST","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","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","alarmLevelOption","alarm_level","setAlarmLevelOption","sirenLevelOption","setSirenLevelOption","relational_control_id","alarmControlOption","setAlarmControlOption","sirenOption","siren_type","alarmSirenOption","setAlarmSirenOption","heatingOption","has_cooling","has_heating","heatingModeOption","setHeatingModeOption","delay_time","alarmDelaySeconds","setAlarmDelaySeconds","defaultValueOptionList","defaultValueOption","default_value","setDefaultValueOption","goToInputEditScreenWithState","goToStpEditorWithState","deleteControl","foundControl","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","TYPE_OPTION_LIST","AreaEditScreen","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","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","TimeSettingsRoutes","locationList","cityList","parent_id","city","setCity","townList","t","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","DIRECTION_OPTION_LIST","InputEditScreen","previousLocationSelectedControl","inputTypeOptionList","inputType","inputTypeOption","setInputType","sensorTypeOptionList","sensorType","sensorTypeOption","setSensorTypeOption","isInputTypeSensor","bridgeDeviceFilteredControlOptionList","bridgeDeviceFilteredVirtualControlOptionList","inputNumberOptionList","setControlOption","input_number","inputNumber","setInputNumber","setDirection","deleteInput","onGoBackPressed","updateInput","controlOptionItem","nameSuffix","InputSettingsRoutes","useCurrentGateway","panel","BaseSettingsScreenBase","getPages","baseRoute","currentGateway","pages","page","iconDevices","DeveloperSettingsScreen","ControlTypeListScreen","selectedControlType","setSelectedControlType","GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST","ControlTypeEditScreen","bridgeDeviceTypeOptionList","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","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","MACHINE_OPTIONS","ServerSettingsRoutes","connectionAddress","supervisor_connection_address","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","menuItem","MenuElementIcon","ColorfulText","LeftMenuListScreen","menuItemList","mediaTypeOptionsList","ContentListScreen","selectedContent","setSelectedContent","contentListSorted","tempAOrder","tempBOrder","newContents","ContentEditScreen","menu_id","selectedMenu","sortedContentList","relationalIdExists","contentExists","returnPushedArray","array","tempArray","newContentList","rel_id","menuContent","LeftMenuSettingsRoutes","GatewayControlRoutes","onShutdownClick","Shutdown","onSupervisorRestartClick","RestartSupervisor","onWorkerRestartClick","RestartWorker","getColumns","bridgeDeviceTypeId","rowNumberToString","n","CONTENT_TYPES","GROUP_CONTROL_TYPES","STPEditorContentEditScreen","stpUIEntityList","currentSTPUIEntity","currentControl","controlTypeName","displayName","setDisplayName","contentType","setContentType","groupType","setGroupType","deviceList","contentTypeOptionList","controlPageOptionsList","slice","deleteSTPUI","display_name","updateSTPUI","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","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","keys","store","createStore","applyMiddleware","next","getState","err","persistor","persistStore","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,gBCA3CD,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,cCAjBD,EAAOC,QAAU,0nC,gBCAjBD,EAAOC,QAAU,IAA0B,sC,iBCA3CD,EAAOC,QAAU,IAA0B,oC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,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,mBCA3CD,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.e628b339.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,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\"","module.exports = __webpack_public_path__ + \"static/media/music-player.daadb599.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGh2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTEyLTI5VDEwOjMzOjI5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMS0xMlQxODoxNTo0NyswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMS0xMlQxODoxNTo0NyswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGRhZGJmOGMtMzY4NS1iODQ1LWE3MGQtZDMxMDZlYmNhZmI0IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NGY5MDE0YjctMDZiYy05MzQxLTlmYzMtYmM1ZTA3Y2M0M2IwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGM3NGNiNTAtOWJhZi1iZjQ1LTg5ZGYtMDc2NGE3MTE0ZTJjIj4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+NTE5QTU2MThERDBEOEM2RjY4QjBGNkE5QzBCQzVCMjE8L3JkZjpsaT4gPHJkZjpsaT44OUY1QzA1RDk4Q0RFREVCNzZFOTdBQjg1QjVEOEVBMTwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBjNzRjYjUwLTliYWYtYmY0NS04OWRmLTA3NjRhNzExNGUyYyIgc3RFdnQ6d2hlbj0iMjAxOC0xMi0yOVQxMDozMzoyOSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowZGFkYmY4Yy0zNjg1LWI4NDUtYTcwZC1kMzEwNmViY2FmYjQiIHN0RXZ0OndoZW49IjIwMTktMTEtMTJUMTg6MTU6NDcrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4kLqITAAAd5klEQVR4nO2deXQT1933f3dmNBrtsizbkrzveAcHCmYx+xKcAqZ5EqA5CSmhb96mObx907wn3XKyNMlpk/QhaZ6Q9pCWJk/SQEiAlKaQBGIMxgEMsQHveJU3ybIlSxpJoxnNff+w5McQCKQxtuz4c46PPbp3xvfO9/7u/f3uvTNCGGOYZupATHQBphlbpgWdYlBfl4gQGq9yTDNGTFvoFGNa0CnGtKBTjGlBpxjTgk4xpgWdYkwLOsWYFnSKMS3oFGNa0CnGtKBTjK8VdHppbfLxtZPzE8XSpUuRIAhEdHS0ore3lzSZTDFqtVomiqLY09ODnU7nEEKot7Ky0j/RZQ030M2scLxXXLZt20Z0dHTERkVFJSYmJmZERUVlxsfHm7RarY4gCN7hcPjNZnPz6dOn3+J5vvngwYPiuBYwzAkrC33hhRd0bW1tBSUlJevnzp07PyEhIZZhGKVSqZQSBEFijEVRFEWfz+epq6s7W1NT0wYA01Y6irAQ9P777yfz8/PzpFJpydatW9fNnDlzjkQiAZIkged5ged53uPxOHme9yOERL/fzwOAAyHET3TZw40JF3TRokUKmUxWmJmZ+eOioqI1Wq1WDwABt9vtdjqd5oaGhtqWlpYWp9PpFATBpdPpJH6/v3dgYKD6zJkz017bNUyYoG+++Sa6dOmS3GazLSspKdleXFy8VK1WKzmO4xoaGuq7urouIIROVFdXnzObzXav1+vz+XyAMeZJkiQ+/PBD10SVPZyZMEEFQWCSk5O/v3nz5p/l5+fPlEqltNVqtVZUVFSeOnVqL8uyZ2fPnt1vtVrdLMuSarUa2e12wm63o0AgMN3V3oAJEfTll1+mOY5bvXLlyv+XkZGRTxAEYTabOz/55JNDhw8f/jNFUU1Go5Hfvn07fvDBB7N0Op3aZDIlJSQkaAYHB/lz585d1Ol0tYODg76JKH84M+5hy86dOwmVSpWTk5Pz7Jw5c74PANDe3t584sSJt8+cOfMWRVFdkZGRlN/vj9NqtcuSk5OX5+bm5kilUplMJpMLgiA0NzfX/fa3v32yurr6vMPhmB5HRzHuFsqyrDo9PX3djBkzFhIEQTgcjr6enp73+vv730YI9URFRSkMBsM8vV6/Pjc3d1lqauoMURQFAEA8z/MSiYTCGPPz58+P5Tjuy8rKykDo2o899hgRCATQ0aNHob6+PvA1xZiyjKug27dvR6IoJhmNxmVKpVILALihoeGUw+F4TxTFbp/PRw0NDS2+6667fpaWlnaHSqXSIIRQR0eHua+vr2tgYMCKEBI4juuTy+U1c+bMESsrK+G5554je3t7IzDGJr1er0pOTh7wer29Go3GWVNT852y4HEV1OFwUJmZmXkGgyGLJEnS5XI5W1tb91osltaOjg5RJpOll5aWPpafn79AIpHQXq/X++mnn35eV1f3SXt7+1mv19tPEASt1+v7tVrt4Kuvvor37Nmjstvtpvz8/JK4uLiF0dHR2qysLPNHH330r56enhOlpaWWAwcOfGdmk8ZVUJZlGYPBkK/T6XQAAC0tLXXV1dWVL774ov/ZZ5+NNplMD8yZM2ceRVESi8XSd+jQoYPNzc3vSqXSUw6HA+3du3dEmF/84hfo1Vdf1cvl8gVpaWkPxMXFzTEajdE0TdPp6enOWbNmFe/atevXPT09hwFgaDzrOZGMq6Aejwf6+vo8Q0NDdolEQnR3dx/s7++3rlu3DrEsW7By5coNDMPIXC6X/fTp0/svX778RiAQqHvppZcwAIx0nbt27ZJ1dXXFyuXy5dnZ2dvj4uIyNRqNEmMMGGNQq9VqpVKpKikpeWDfvn3mDRs2nDl48CA3nnWdKMZVUI7jfFVVVRU6nU6q0WgCfr///T179vBFRUUyvV4/JyIiIgZjjG02W6vD4djv9Xobd+/ePSLkCy+8QAGASqlUzp8zZ86dGRkZxUlJSekMwzCjvXWMMRAEgWbOnPm9+vr6tV1dXe2rVq0yf/LJJ1N+PB1XQXmeFyorKyvdbndDYWEhp9FoBgAAMMYyk8kUR1EUFQgEAs3NzV9yHNe0e/duIXTu7t27pUNDQ/GRkZErsrOzNyUlJeWrVCoVRVHXrQPGGFQqlWrBggV3VldXf9nc3DwIAO5xquqEMa6CVlVVYQBwJSYmup955pkRa+F53ltTU3MuOzu7ECFE1NbWHh4aGuoPpe/duzeC5/lZRqPxB6mpqcvT0tLSCYK46W4LhBCRkZGRfeedd26x2Wyta9euvfDxxx9P6XAmLNZDV65ciWQyWZzBYMhSKBR+hNAZrVbr6+zsROnp6caMjIxVaWlpW41GY55Wq9VcKybGWAz+xgAQSh4puN1uH3rrrbf+XFZW9l+iKJr/8Y9/TFmvNywEBQBYvnw5QRAElZ6eHoiMjMQMw6jsdnvijBkz7ly8ePEDcXFxKVKpVBrKjzHGPM/7WZZl7Xa71e12sxzHgVKp1Gg0GpVGo1HIZDJZcB0V9/T09L322mtPNjU1HaBpenDv3r1TcjwNG0FD7Ny5kyIIIlatVi+Mjo5enZ2dXWwymUwURUlC5eE4zj8wMGBrbW398vLly/V9fX0XBUEY6O3tJZVKpUGlUukKCwvzioqKFul0umiapqWiKOLz58+ffeutt562Wq0n33//fXZcKzZOTPh66GieeOIJucfjic/Jybk/NTW1JCEhIUWhUChRsFUhhMDlcrGtra1N5eXl77AsW9HY2NjR0dFhz8rKEuvr60Emk0k4jmNaW1sTu7q6vlyzZs0DycnJWRKJhMrNzS2YO3fuhsOHD7cXFxc3l5eXT7nxNGwEffzxx5VKpfKOwsLC/5WXl7csJiZGTxAEOToPy7J8TU3N5/v373+J5/lLr7/++mAo7fPPPw/96QcAtqKiYiAmJsb+wQcf4DVr1txfUFCQJ5fLZcuXL7+rqanpssVi6QEA5/jVcHwIC0Gff/55RNN0zuzZs3+dl5c3W6fTaa8dCgKBQKC3t7eyvb39FY7jzr7xxhveUNrvf/979fHjxxmfzxewWq1eiqL8Fy9eFGprazsuXbq0nyAIJj4+Plqv1xv1en3UokWL1jU1NdUWFxdXlJeXT6k9SWGx0ZokSYnRaCzIzc3Nu56YAABOp9PW3Nz8kVwurwyJ+eijj0reeOONbL1ev2Xt2rU/WbVq1daioqISk8k046c//Sn16aefipGRkb21tbUHy8rK/iWKokhRFD1v3ryFq1at2kRRlHH16tVh0ajHirCojMvlokiSjGQYRn6DLKLD4WgaGBg44ff7PQAAf/rTn0iO42YlJyc/nJOTs5RhGBXLsq7BwcGBs2fPnuru7v7z888/X//LX/6S37BhQ3tZWdmhwsLCxcnJyakKhYJZu3ZtaUtLS31NTc3fAcAyfrW9vYSFhXZ1dQWqqqrqLRZL3/XS/X6/v62trWZoaKht27ZtGACAoqjImTNnbioqKvqByWRK0ul0kXFxcYn5+fmz1q1bd290dPT3u7q6tAAABw8e9FgsltrBwcFeAMAkSaKYmJioe++990darbagtLRUPX61vb2EhaB79uzhHA5HdUVFxVG/3++/NlQKCtpRV1fnAgB48MEHUUdHR35qauoGpVKpCuVDwxAxMTGGvLy85RaLRb9ixQoEABAIBAa7urraEUIoONcLubm5uffdd98jWq02/e67777KAZushIWgAAAMw1gqKyv3lZeXHwsEAsLoNIIgRIVCIahUKgQA0Nrainp6etQAIIFRM0KjKSgoyExISJDz/PB+sk2bNrnVajWLMQ4ADM/1kiSJCgsL582aNatUIpHErlu3Lmzux79L2FTgtdde8/p8vprjx4+/29DQUBcIBAIAw7GnRCJBCQkJKC0tjQAACAQC4PP5eLfb7YJRy2qjwFardWDGjBnOEydOhLpomcFgiMQYjzQAjDFERUXpV6xYsd5gMMxzOp2y8ajr7SRsBAUAwBi7urq6jhw7duyg3W4fQAiFnoCTBAIBI8MwDADAqVOnxPb29is1NTVVHo+HBQAc6qYxxuDxePhjx44dUavVXaFr22w2nVKpTLl2HhghRKSmpmYsWLDgbolEkjh//vywuifflLAq/J49e7AgCIMNDQ3/PHfu3GmO4ziEEJAkKVUqldk8zxt3795NAAA4HI6OsrKyA+fPnz/tdDodgiDwPM8Lg4ODjra2tiONjY1/27x588j+XbfbnSyXyxOu938lEgldXFy8cubMmWsZhokar/reDsIibBnN3//+d/HRRx9tbG1tPZKVlZWdlJSUThAEER8fnyEIwpwrV650AYDz8uXLHqlUWj40NOTMysqanZ2dneP3+z0ul6shISHhzM6dOxtD1/zVr34Vk56efo9SqdTcaO5ap9NpHnzwwe0Oh6OLpumPjxw5MilnkcinnnrqazM8/fTT41OSUaxevVpwuVwOlmVlaWlpBVKpVEoQhNzr9QrNzc2XJRKJo6GhISCXy319fX3mzs7Olvr6+hMY45Pd3d1nlUpl66FDhzAAwJNPPqmKjY1dv2jRogcjIyP1of8hiqKIEEKiKAYQQgRCCGm12giFQqFpbm5uSkhIsDY1NQk3LmV4EpaClpeX46KiInZwcNDF87w+ISEhhaZpGgDUZrMZt7e3W5OTky2dnZ2ovb09wDCMWxTFoffff3/ozJkzvpCYJSUlisTExEVr1qx5JDExMTf0SKLNZhswm81dZrO5JxAI+NRqtRYhBARBEHq9Ptrv90NnZ2dDRkbGUH19/aRaOw1LQQEAKioqAnl5edbu7m6vyWSaYTKZ4hiGUen1+iSPx0NZrVbKarU6VCqVEBkZGaiqqsJLly5Fy5YtI0tLS9Hs2bNTMMZ3lJSU/J/8/PyFUqmUxhiLra2t7R999NH7e/bseaO2tvZkb2+vWS6Xq6OioqIJgiClUqlUq9XqOzo6egYGBlrq6uq8Ny9t+BC2ggIAVFVVBXJycga6uroCycnJWTqdTqdWqzU5OTkFkZGRSXFxcfHR0dGRHo8H5s2bF4sQkisUisTU1NQlKSkp/1FaWvpobm5ugVwul2KMwe/3+8rKyt7dt2/fyx0dHRetVmtDS0tLLUVRTGZmZp5CoVABAGg0GrVcLtc0NTU1aLXazra2tkmzGB52TtG17N6923bfffd9WlFRkRsVFXWfXC5XyGQyeXFx8aKZM2fmWCwWe29vbyfP8z6GYRDDMOqoqChdYmJiVjCGJTDGoYVxG8Mwx5KTk/uOHDkiAAAsWbLEUVVVdWTu3LkroqKiDAghgiAIIisrKy8/P/+u9vb2luLi4s7y8vJJIWrYCwoAgDHubGtrO9La2lqYnZ1dSBAESdM0qdfroyIiIiLT0tKSaJqWBJ/wJimKIgmCQDhI8DKI47hBAOhduHBhYNeuXQAAoFarRY1GwzEMQ4yOZTUajXbNmjUbGhoa6mpqavYtWbLEVVZWFvaihlUceiMQQj6O46qqqqr+YbPZLKPnekmSJKRSKY0QQjRNS2mapgiCQHa73dHf39/f1tbWwXGcDwCwz+djqquroz/44AM6dH56ejphMBiidTqdHq6ZRoyLi4t/6KGHHo+Pj/+eRCJhxq3C34KwHkNDXLx4EZYsWcIODQ0NcRynT09PzyFJ8rqT6TzP+6urqy/X1NR89tlnn/21qqrqEsYYGQwGE0VRMrPZzFZVVfUTBGFfvHixJCEhISE5OXnrHXfcseja5TuKogitVqv1er2BixcvVqelpblbWlrC2uudFIICAJw4cQLPmzfP3tPTw6pUqiSj0RhLkuS1PQxubW1tOnDgwB9Onjz5Z57nL1ZVVdV4PJ5Bk8mUajAYEhISEpJMJlN8UlJSdmxs7My0tLT7ly5dulqv10dzHCd6PB4nxpgnCEKCEEIkSRKxsbEJg4ODjoGBgeYZM2awDQ0NE3IPboVJMYaG+N3vfsc98sgjZw8fPvw3vV4flZGRkTU6ned5f2Nj40mz2XzUYrFY3333Xbx+/XpCEIQT9fX1GWlpabkxMTHGkpKSdXa73YEQIhUKhZwgCGhsbGyrra2tc7lcl1JTU1PS09MXGo1GU3DCQbN8+fIN/f39bZ2dnYcBwDNBt+CmTBoLDXHu3Dlvamqq3e12y9LS0rLlcrkMgmMfy7Ku8vLyg83NzacOHz7MAwA0NjbiM2fOeFevXm1KS0tbqVQqVSRJUgqFQqFUKhUEQaDGxsaKffv2vfbuu+++bbPZym02W7PP51MlJiamBWepiIiICF0gEKAuXrxYo1arB7u7u8PSQZoUTtG1CIJgrq2tPVRVVVUhCMLI9BzDMFKDwWCQSqWq0fl/8pOfSDiO0ygUCkXos9DWUIfD0X/q1Km3BgcH9zudzrq9e/d2DwwMXDh58uR/d3V1tYScZJlMJluyZMmqnJycNTKZ7EZbZSacSSnoO++8E7Db7fXHjx9/78qVK40QXBOlaZopKChYGhUVteyee+4xPfzww7Knn35aGRUVNTc7O/tumUx21XpncCXHJpVKm19//XV3bW2tCACwe/duD8MwTSzLtoXCHoQQUqvVqtLS0ntnzZoV98wzz4TlcDUpBQUA2L9/v9vn8529cOHC8eDLHAEAUGJiYu7GjRv/99KlSx/Oy8v7cUJCwuPz58//9fz584sFQQh4vV6fx+NhQ5bNcRy4XC7FPffcIwld+5lnnkGJiYnamJiYmNEhEkEQRFpaWkZ8fPxMgiDC0tsNy1Z2q6hUqp7Lly8fiI6OTly5cuV6hBCSSCTSO+64Y05OTk6O2+120jSt1Gg0aofD0W82m1uampo6JBIJzsjIyM7Ozi5ACOnlcvlCmqY7ly9f3m4ymQidTkfp9fr5crk8GUbFphhj5PP5+La2Nssf//jHySloaNosHHn++ed9O3bsqC4rK9tnNBqTsrOz8xBChFQqZWialqrV6ggAALfbPXT8+PF3mpqaDpw/f37A4/GQixcvXkyS5I9TUlKyFyxYsB5jTJjN5ssWi8VuNBqzMzIyStVq9VWL3SzLslar9bRGo2mZmBrfnEltoQAAr7zyimP79u1Hjx49mhgbGxuv1Wp1AP/j9AAAtLa21p8/f/6vSqXyitvtDtjtdrBarc4vvvgiLjExMWPGjBl5sbGxCRaLpZNhmBiKooTgRAQZcoqGhoYcFy5cOCmRSP5AUVTnBFX3pkx6QQEAfD6fvba29tA///nPlPXr1/+HSqUa2ZmAMcYEQTQpFArL008/PeIRb9q0qc/hcJT39/dvTklJSdVoNBERERE6QRBEiqKI0PsaBEHgu7u72xoaGg54vd6/REZGNj/11FNhGbIATGKnaDRvv/22yPP8lbNnzx6srq6+MDqUAQA/wzADWq0W8vLyRqxWp9NhkiRFmUymABi26ODWTgJjDKIoBpxO51BTU1P5lStXXuQ47j83btzYtHjx4rAVE2CKWCgAAMaY7+7uPnvs2LEP0tPTMw0Ggyk4/pNSqXRWc3PzHQihL+bMmeMpKSkBuVxuNBqNJTqdLvLafUYcx/nMZrPZbrd/6vV6/woAFzds2DApHmqaMoK+8847eMuWLYPd3d2fnz59+nvr16//IUmSJMaY0uv1s5cvX74NIWTs6Ohocjqdcp1Ot7ywsPAHNE2PhCvB50/ddXV1Z2w2298UCsWnS5cuve7jGeHKTZ/gBphc3/T78MMPy/V6/crNmzc/k5WVlQfDdcQEQaD6+vpau93uYBhGk5GRkSKTyeQkSUJwvBS7u7u7qqurT4mi+OqGDRvOTHRd/h2mnKAAADt27NDr9frNP/zhD3ckJSWlhMbH0A4/jDEOrdSIoohZlnV3dnZe6uzsfJ/n+ffWr18/qaxyNFPCKboWQRAG2tvbD3/22WcfORwOe6jREgRBouAek6DAuL+/v7ehoeFQd3f3c6Io7prMYgJMUQsFAHjggQdIuVy+oKSk5GcrVqy4k6bpkTeoBMdKV1tbW4fX693rdrv/WxCE7jVr1kz6N2VPWUEBALZs2aI0mUzrt23b9kRiYmIqwzAyAIC+vr7e+vr6L/x+/+tKpbJ80aJFk8KDvRW+saCT6euz1q1bR4qiGD1r1qz1q1evvicqKmqmw+Go7+np+RdBEH/dsGFD90SXcay5JUEnM4sXLyYJgoguKCiYm5GRkeL1ei/HxcVV3XvvvYM3Pzt8uNVecsoLCgAwe/ZsFBERoZw3bx6l1Wpdjz322KR7ZmVa0CnGrQo6JjNFgUCgGiGkmm4c/z4hwaKjo9fabLbGm2S/IWMiKMdxSQghjSiG5ZrvhDAq9r1uWujFHdfmwxjTXznhG3BLgo56NP66hAoHACCKIkgkkutW5HYjCAKIojihYRZCCAKBAEilUiBJ8kNBED5GCFUAQAsApGKMFxAEsZYgiI0+n++q88bCIMZ8cp4kSfD7/cBxHNzgZdNjTmhXBU3TEx4zi6IIUqnU4vf7X2pra9udkpKyAAAWA0A9ADwFAAcbGxs/sNlslcuWLfs5x3ExAP9Th287bI3pHQ/d1DVr1qw+efLkldGCXruVZSyPQy27o6Njb0xMzGy/f+LmCRBCgBB6CSH0l5SUlN8AwDoAeCOYLAeANzMzM09kZmY+V1lZCUVFRS/6fL4xERPgNi2fWa3WXoxx6+249tfR3t4+4d+FJpVKP7Tb7bvlcvlvAOD/AsAeAAg96CQFgEvBz0Emkz0LAEUIoY1j5VDeloFu1H7m7xRBUT6Wy+U/AoCtMCzmwwBgC2axB4/3AMDWrKysH4mi+PFYDhO3RdCJcIgAwmbOuQIA7gYABQC8p1AoOBh+FkYEAE/w+L1g+t1Bh2nMuC1drsUyMS+3DL58bKJpAYDZMHxvTwY/+wQAngCAfcHjkwBAB/ONbAkdiy2zYy6oKIrwm9/8Rr1ixYoIpVIJAMMW6/f7oaenBziOA6PRCHq9HkJ7uQiCAEEQoL29HTiOg5iYGDAYDBBybiiKAkEQoKOjA9xuN8TGxoLBYBg5XxRFYBgGXn75ZSoMYuFUAKgCgEIAWAQARxUKhQUAXhyVZxEMv3n7QjD/mDFmgoaCZZ7nYcuWLac2bdoEoWdyQwM+RVGAEAJBEEAQhOumkyQJLMuC0+kEiURy1fV1Oh1QFAUulwt6e3tBKpWOxG8YY5BKpeFgpQsAYD8AZALAJpZly4LdLAAAsCwrBYBNAMACwH6M8YJbueitWu8tC3oztzrorgNN00BR1HX/s9vtxgqFAmiavm66zWbDer0etFot0mq1X0kfGBjAkZGREBERgSIiIr6S3tbWhuPi4mCiwpbgpMJajPE2hFAsBL1ZlmXfg+FudhEMi7kVAP7Q2dn5l4yMjDf9fj/c4IH0b8yYdrkYYwgEAjecUAhuXL7K8kZD0zTwPH/DdJIkQRCEG14/IiJiwi3U7/dvlMvllT6f77ngR1sBYDMMj5l+GLbMPwDAcykpKQ8JgrBx9PlhNbEAABBsbfhaTzc0Pej1egGG3yr91cJQFHg8HpDL5ddNp2kaWJYFhmHw9USlaRoEQZhQb5cgCPD5fD9nGAY8Hs+zBEF0w7DXOxuGx8z9Ho/nL1qt9iGM8c85jhvTqOAb7Vi4UV6WZR0kSWpC1hEa00Z308FXr42kjyaUN/QTOv/aMoR+rncNgIkLl66HKIpA0/SHJEl+DMOhTAsMO0ALAGCt3+/fGAgERsocmqiPi4vLHxwcvHS9a47pGPp1hL7BiiRJQAgBz/MQCASuu3Vl+JV9U59gY96IMd7o9/uvatgAw/eDoiiQSCRXrbx827F0TATt7+8HjUYzstohkUi+0ppCx16vN1wmAG47IRFDDX00oZ7I4/G4EEICQRDg8XjA5XJ9KydgTLpchFASRVFEIBAAjDE0NDT8Z2Zm5rrRDkoo1lSpVKv8fj8O7VifauKGwrfQ3yRJ5rAsu1MikVw1lFAUBe3t7ZCSkrJIFMVTt3LtcetyMcbto4937NjhfvLJJ8Fut498plKpoKmpCTiOO4sx/s58JzZC6NIXX3yxMzMzE1iWHRn7NRoNvPLKK2O+i/K2bOO8WUv6rm1VGav7MW4WOpkIxy5+rNZCASZI0HC8qRPNhC1wX6/7nRZobLiZ83krfKtIfHSgP83Y8W3uafhMrUxzFf+usUwLGuZ80whjWtBJwDex1mlBJxG3Iuq0oFOMaUGnGNOCTjGmBZ1iTAs6xZgWdIpxS4J+15a7JjPTFjrFmBZ0ijEt6BTj/wPAEZzVwSMMLwAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/projection.b1e5ba92.png\";","module.exports = __webpack_public_path__ + \"static/media/cancel.c139061e.png\";","module.exports = __webpack_public_path__ + \"static/media/save.a8a3380b.png\";","module.exports = __webpack_public_path__ + \"static/media/plus.0ad74278.png\";","module.exports = __webpack_public_path__ + \"static/media/minus.8bc3a620.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArUlEQVR4nO3ZsRGDMADFUDnnfcg+ZAwGIgUDMREpMoQK602g+7gxhiRJkkUN4GNHmAbw2BGmCbDvu92huK7rfwKeZ81DMMbgZUfYGsAOsDWAHWBrADvA1gB2gG35ASbAcRx2h2b52+AA1v38SZIkyboG8LYjTMvfBifAtm12h+K+794Gl/8l1gB2gK0B7ABbA9gBtgawA2wNYAfYJsB5nnKGp+sw8LUjkiRJIvgBtYsXH/HIO98AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+klEQVR4nO3aMU7DQBBA0UkcaElDhWu3vhiVj+WeO/gSNPYBHCkFkRAKN8i6ME7QvFePViPt11YbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/K3dgpnjwjkeyyUivkpDpYt97fv+o67rp3V2YivDMAxd171HxM+tuUPhnOe2bZumaV7WW40tjOP4GQte7v0Gu/DABJCcAJITQHICSE4AyQkgOQEkJ4DkBJCcAJITQHICSE4AyQkgudJ/gOs0Td9VVV022YbVzPO8j4hraW7JV6+38FL8R+eION17CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BcZ7xtaYrDvrQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAACsklEQVR4nO3dv4oaYRSG8bMzGasxxcYFkYgELVN4CUGwsE4r6ey8sAWrQARNkSqVIAb0CkwQxNgkJuPijqYIaVUy345/3udXD4fj8CBTfMyYAQAAAAAAALh+N6de4AndmpnvYM6Dmf1wMOcsXWsAt51O50O5XL5LOmg4HH5ptVrvzCxysNfZeXbqBZ6IX6lU8tVq9VXSQYvFYmpmnoOdztLV/jAchwDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQg7tCbQn0zK6SxiGMvNpuNk9fgRlHkmdlLM/vtYl6Kdmb27dBFe29Ss9l80263P+ZyuZ2ztVJSLBaDTCaTOILVarWdz+ePLnZK03Q6jWq12ms7EMHef4AgCHalUinI5/NOl7skYRh6YRhmTr3Hf3i0I14GzjOAOAIQRwDiCEAcAYgjAHEEII4AxBGAOAIQRwDiCEAcAYgjAHEEIG7veYD1ev292+2+z2azF3UgIooiv16v1wqFwvOksyaTyXQ8Hg9939+62C0ty+Xyxsx+HrrumBMzQfJ1Unc3Go0+u/h4dK/X+9RoNN6a2S8He6VpZ38Phex1zNfDN8l3SZ2znT3P+zfvEu/DQTwDiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQBwBiCMAcQQgjgDEEYA4AhBHAOIIQNwxL4q8SHEcWxzHiedst1snH6E+V9cawKrf798PBoMw6aDZbPbVzB4c7AQAAAAAAAAAwCn8AaT2aN3xjkS0AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAASZQTFRFAAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3AapoQAAAGJ0Uk5TACNSalkfAUq97//ztTQCVdz9oEjis0TZTdvgEYPrDo0YlPwbnBWb+RSkGaj+n574BFhPdHcqWpHpgvTV6OrkqUDF+wY1lc7RSQcMVBOPF5OF9xL2l/qI9QsPiYaSFkfDQwmdULeGAAABTElEQVR4nO3X11LCYBCG4bUQdVEiih0BwV+kGWwEsKCxR1GxYS/3fxNKcEYED/PFk30vYJ/Z2aMlkiRJkiRJ8qiu7p5eH5bQ+voH2D84hDQC+jB/FRxBIqMhdhrDEdr4BKMRbXKK4Yg+zWhkJjzLaCQSDTIaic3FGY0k5lv3wCBqIcloZDH1ew8Eks5kGY0kch2G60h6yegw3EEC+WYa0XL7PVxCNLWyuua0TlT4w3AD8ZnF72EFHFIqMx7ZYA+QTS+QoiCCCCKIIP+IbHmBbHuBVOIeIDu7Fh7Z2z84PHI6xiGkndjN8kSnSRDS2lm1jEfo/MLCI6Qua3iE7FK7gnjnrsxrPEKxm1s8QuqujkfovmTgEXqoGniElFnHI6Qea3iEIk8WHiE7auERUs/+hpHNIBF6CTd+vZAORch+zb2l3j+wiCRJkiRJ0k+f209ZMu94IFwAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/controls.48d606a7.png\";","module.exports = __webpack_public_path__ + \"static/media/cancel.c86e6d50.png\";","module.exports = __webpack_public_path__ + \"static/media/ok.9f7859a2.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open1_icon.708a178c.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open2_icon.7eab34c8.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open3_icon.62a52306.png\";","module.exports = __webpack_public_path__ + \"static/media/door_open4_icon.ebf6aa1a.png\";","module.exports = __webpack_public_path__ + \"static/media/save.a8a3380b.png\";","module.exports = __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,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAHAklEQVR4Xu2cWaxeUxTHf8tQggeEEBRBi6gnEmIK3gxB+kBFWlMMiblSVA2tIK0haigNQhrigURjbhpp4qFCxBCzGBMxh5jFuGSxJc2V795zzj7nfOvbXfvx5qy91/r/vr3P3muvc4VoRSkgRUUTwRBAC/sRBNAAWpgChYUTMzSAFqZAYeHEDA2ghSlQWDgxQwNoYQoUFk7M0ABamAKFhRMzNIAWpkBh4cQMDaCFKVBYODFDA2hhChQWTszQAFqYAoWFEzM0gBamQGHhxAwNoIUpUFg4MUMDaGEKFBZOzNAAWpgChYUTMzSAFqZAYeHEDA2ghSlQWDgxQwNoYQoUFs5aMUNVdR/gIxH5ojB+/wunaKCqOhm4AzgC+AW4HFgsIn+WCrZIoKq6ETAHuBSYNAbeO8CJIvJ8iVCLA6qqBwH3AdtPAOw24BIR+akksMUAVdVpwK3AwTUAfZuW4SUiojXs3D468kDT8no2cA2wXgOl/wCeAi4Qkfcb2LsyGVmgqmq+HwfcAmzZgqp/pQ3UhSLyawv9DaWLkQSqqnsDNwP7daDa58AZIvJoB3133uVIAVXVjYGLgMuAdTpWZ3kC+1XH47Ta/UgAVdV1AXtPzgc2bVWB8Tv7DbgeWCAiv/c4buOh3ANV1T3T8npI4yjzDZ8B7N36Yn5X3fbgFqiqbpGOITO6laBW77YMnywi39Wy6vFhd0BVdX3g3LS8btKjFlWH+hG4GFgqIrYzdtVcAU3L6wOAJQm8tyftvS4iH3py1AVQVd0RWAIc7kmcCr5YdmkZcI6I2MwdehsqUFW1xPkJKTngcXmtCsg2S7YMrxp2CnFoQFX1MOBOYLuqqo3Ac88CM0Tk42H52jtQVd0FuAE4uqegv0kbrEOBY3oY0+5dF6eza+8pxN6AquoGwClpeW2SRK/Lwi6x7wHmicg/2Z50tWZ/27luZw2efyFlml5uYNvYpHOgKYluIBcCdrbso70CnCoiL40dLL23rwJmA3ZE6rqtsB+yiHzW9UDWf6dAVXUn4EpgVh/BADYbLM+7YqIzoqpumzJQ07vWweqZUg764a7LXzoBmu4orwbO6yGJbr8VO+AvBeaKyPdVfzxp9ZgJ3NjT6vEuMF1EXq/qY93nWgWqqnYDYsvrAmCbus40fP5x4EwR+aShvb1bN0yVC3N7mK3247srlb9YxUSrrTWgKTlgJSBHturh4M4sQ2MpwifaOvup6l7pktvuW1vTZkAIn6YL+tVt+d/KO1RVrVrACq6O7QmkXWnZsWd+F1daaZU5PV2b9ZHssI3bTBF5sw39Gv8KVdWOHlbveh0wtQ1nKvRhVQrXisiXFZ7NekRVN08bOlsFum52Vrblfllu+UsjoKq6byqVtCRBH802E5YIX9nHYGuOoar2CrEVaIcexrYfqm2aVjcdqzZQVd0a6OVMBfwA2PL34ETHkKYCVLFLq9FJwO09nF3tlfKIHXNExI47tVoToHa19VqtUeo/bLcYltGxoGw5ctFUdQpwU3rVdO2TgZ1c9/XSBOiuwNsdRmObhFki8kaHY2R1raqWE7ajR9eZrz3qbpY8AX01ZVNWtrmNzyI3jnGqQDwrpTRr61jRr6kiYvuHyq22I6ra9gy1ynV7N1kS3cUlcWX1/k3475/OrlbM1nabIiLv1el02EDto6I5o/7dZkohHgXcD7R5dh0ZoB+kb0lGsjp90IxR1a3Spun4OrNqnGfdA7XLX/uoaJGI2FJbZFPVA9JszT27ugZq6bqFIvJ1kRTHBJXKUe3sugjYrGHMLoFajtKq4lY1DGqkzVTVqiPuBQ5sEIgroHY1ZL/Qx4aZ5WkgYicmqfzFzq518t4ugNp9n1Xz2efubj8Z6ITaBJ2qqu2A7dVzWsWL/6EDfS59+9FlJmkYLFodM53lHwImOrsODai9J88Hnh6FLE+rdBp2lu5dLYVopTq7D+imF6C7AW8lByyBbFUKV4jIzw1jW6vN0ld2dw+oU+4FqC0Tlne1rMjs/2pe12oqLQSf/ouL/b+INb+D7SU5b9vwaSJid3bRWlQg1Qxb5cK8dO/aPdAW/Y+uBiiQUoi2abIqDVsNK7fayfnKPceDWQqkhP+kujVGATRLdn/GAdQfkyyPAmiWfP6MA6g/JlkeBdAs+fwZB1B/TLI8CqBZ8vkzDqD+mGR5FECz5PNnHED9McnyKIBmyefPOID6Y5LlUQDNks+fcQD1xyTLowCaJZ8/4wDqj0mWRwE0Sz5/xgHUH5MsjwJolnz+jAOoPyZZHgXQLPn8GQdQf0yyPAqgWfL5Mw6g/phkeRRAs+TzZxxA/THJ8iiAZsnnzziA+mOS5VEAzZLPn3EA9ccky6MAmiWfP+MA6o9JlkcBNEs+f8YB1B+TLI8CaJZ8/oz/Bm6XuYT+fewdAAAAAElFTkSuQmCC\"","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,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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,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/media.5d190925.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAf5SURBVHja7J17jFRXHcc/dx77ikIVum1BKyCaitR32krVlEpr1YqlojX+YWJaUx+p1T801ldsTDQh/cMS28Qg1ZCamDZKrGmxD1taUk2psBSzgDykKVKkDY9SYHaWuffrH/NbOg4X2GUxs7vz/SQTyJw9987c8znn/M7v3L2bSMKYgi+BsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIhiLYCyCsQjGIpjxRcmX4P9ODzALuAaYB/QCfwOWArsswsSlCJwLvAdYCLwXuAg4p+FnLgcmATdbhIlFFzADWABcCcwBZgIdp6jzQU8N458EmBK9/hrgQ8CFwAUjOMYTFmF80hlz/RXAp4GLgTfGaDAcjgH7gA3AcuBBizB+ev0bYj6/GrgMeCfQPYJjHAJ2AmuB+4G+kGHMPeXUIpzI24BFwOeB2cDrR1h/F7AVeCReW4GjXj6OfQrAZOBS4COxxJsHlIdZ/zDwT2AT8DCwBtgTU4HzCONgbf8mYD7w4Zjv3zHMxq/G8N4HrANWAf0hxLh9sHW7iDAU5V8MfAx4HzB3hFG+gJeA26LX7wTSiXKBJrIIncBbYr3+0Wj4mfxvYmc4kf5e4FngHuBp4MBEvFilCdbrz6Geyft4RPszYiToGOYxqjG/rwceB54EtsX7E5rSBOj106hn866OIf/CETQ80eNfiCXen6P3vwxk7RQ0lcZhr58c6/lPUM/ozQGmjuAYlWj4/mj8vwCbgSOt+EKSSJLEIgyDMjAduAT4TET3sxlZYmdvDPH9MdyvDRlausQbS389Z6yKMCl6+rUR5U+nvn1bHEGQtx3YGI2+BtgBHGy3IX+8iVAEzo+hflEEelMZfh4/i3l9O/W9/nXx7x5g0M08tkUoUN+nXwhcF0P+pBHUPwT8G3guArx18f9X3KzjS4RbgNsj+Bsuu6LXb4geP5TarbkpRxmFtzBg2Ug903e6df1m4B/Ukzl9wG7gRcZxOrc5WGz3VcO2HBGOxFy/NYK8Z6L374tln5mAIvwkArm5Ec2vBZ6K1wE3TftMDVDPDH41ZNjLa9u3SQSTQ6/TrTiOhUAbqd9AcmlDjqArgsr7gLdGYHqsIWBNIrewC7g+Oocayu4NMW+MYHZoo6kjRrVHqe9lzIrjinqqu496pvJK4APAQENe5DDwsKTnkyRZQH03dFVL8xqSWvXqlHSrpH5JVY2OHZJmS5opaU1O+Q2SuiQtyynbLelyST/OKVse9a6TlOWU3yrpKkl7mt5/SdJ8SbMkrc+p96ik87Is+2SWZS9I2i/p25LKrWqPVorwWUkDGj0Dkm6OY/40p8F+GWU35JyvFu9fFo3RyKYQa4qkLTnn/Y2kaZIeanr/mKSvxDnvyvk8z0uaE4KtzLLjxUdDuLYT4fc6O6yK412R0zP7JU2Knrk7p+7dks6V9Kem9w9I+lwc976cehslvV3S10OmRrFWRL0vNZVJ0qCkm6L8m5LSpvLftqMIG86CBPslXSKpW9Ifc8oXxLnuzSlbL2m6pC/nNMjdUe+Lkg41lb0iabGkiyRtbyrbLukCSTMk/T3nnEOSzM+RVpJWt6MIz50FEX4ex7opp/fd2VDWzCFJn4oG25YjyGxJ75K0M6fuXZJ6cuKNSowi5Zg2mtkSkvRKeuYk3+fxdhShb5QSbJN0/kkasy8u+Jsl7cqp+7NosObGPCzpC/H5VuTUezZihuvjZxv5ddRbnBP8ViVde4rjDvFYO4qweRQSpJJubAjI1BCUHUzTdKGkoqRHcuo+IWlqjAgHG4O8LMt+lWVZQdK3IuhrjhsWhGB/bSr7V5qmvTGSvJhzzjvis37jNN+rZVNDqYXL1lqtVjvT9OpDwO+AxcDXGnMixWJx2eDg4ANJkvyoWCxe1XTO/cVi8XbgdWmaLkmSZPLQErpQKGzJsuy2Wq02r1wuf7cx2RblSwuFwlNpmi6h6fcWC4XCLdVq9UCpVFqRJEnzDbFPA3dQ/+2oO0/1pdI0Pa+zs7O9MotZln2nUqm8u1AonMkNGg9GOnoA+MFQkkcS3d3dK5MkoVqt7k6S5PuN9x9I2tTd3b1a0tyBgYHlSZKU62+LcrncXy6XX67VarNrtdovGpM7kiqlUmlZZ2dnR6VS2Qh8r2Gv49Wenp7HJHVWKpU1SZKszpH2P5FI+uGpNsgqlcqe3t7e9sospmnK0aNHOUMRTpoc6+rqIssyBgcHTxhthsolUa1Wj5eHCJRKJQYGBnKPWyqV6OjooFI5ccuju7ubarVKmqaj2kCqVqtMmTKl/VLMWXb2bxZqbNyRlA+nXpIkuZ95SObRXsuY2tpyr8F495H3U78pJXUzHN8A2xcbZ201IjwZu4G+mbS+y5lQv+VuUbuNCNOo351sXqNlD9dq5eP1DrvdT+BIO4qQuN3HzjXxAzeNRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTDtI4IlHEPXxI1hEVouwna3+wnsbkcR7scP2m7kCPCHdhThAWCpZQDgVWAJ9cfstIRWPyijh/qDsBdS/xuNxTZq/IT6c5p2RKdYSQv/vqSfmGK8ajAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTAWwVgEYxGMRTCt578DAK6ByfpbZtsXAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASAmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzExMTY3ZTItNTU1My0wYTRlLTk2MzEtODEyY2Y1ODY3NTJhIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ODBkNzllM2YtMmU1Yi1iMjQ1LWI3NDEtMzQ4Y2M1Njc2NTQzIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTE2IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTE2Ij4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+MEFGNEY1QzUwMzAyMERCMjcwOEU0NTI1RDBDRjc0MUY8L3JkZjpsaT4gPHJkZjpsaT4zNTkwMDI1NjhFRkFBNTcwNzgwODlDODA4QTkwQUVCRjwvcmRmOmxpPiA8cmRmOmxpPjQwRTE4NDFGNjM4MEM3QUZGQUE4QjRENUZFNUQ4ODk3PC9yZGY6bGk+IDxyZGY6bGk+NEU4NkFDMDRCQTI4REM4NEFDQzJFRUY5NEZENDNEMUQ8L3JkZjpsaT4gPHJkZjpsaT44Qjc5RUY4RTY1QjVFRkQ2NkJCMUZGQzk3NzhCMjBBMzwvcmRmOmxpPiA8cmRmOmxpPjkzMTQwN0I0RjgzQkYwMzFGRjREOUZGMzJBODFDNTEwPC9yZGY6bGk+IDxyZGY6bGk+OTZCMTYwOEM0ODRGQjFFRTdDMkMwN0YzMTcwMzBBRDc8L3JkZjpsaT4gPHJkZjpsaT45Nzg3RTBFQkU4NUZFMjFGOTc5ODFFOUFGN0Y3NUUyQzwvcmRmOmxpPiA8cmRmOmxpPjlCRDgzNzlFODM1NDJCODcyMDc5OUM4QjJBNkQ0NzBFPC9yZGY6bGk+IDxyZGY6bGk+QzEyQTU4REM1QjE0RkEzQzVGM0ZGNzlBMzM0NUU3RjA8L3JkZjpsaT4gPHJkZjpsaT5EMTI2MEVBRjg3ODQ0MTFBMEQ1QzMyNUM4Mzc0OTk0RDwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6MTgzMzBiNmItMjUyYi1hYzQxLWE5NzQtNWFhNDZjODE0OWQwPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDo4ODA5MDVFMEQyMUJFODExOUZBNDgxRTk2MzlDQjNDRDwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUU8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOkZDMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDphNDg4NjU0OS00MTRkLTRiNGUtODc5Yy0zNzcxZjg1Mzk3NDI8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxNzoyODo0MyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6REI3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHN0RXZ0OndoZW49IjIwMTgtMDQtMjRUMTg6NDc6NDIrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQjE5RERBNDQzMDhFOTExOTcwNUEwODVDQjU2QThFQSIgc3RFdnQ6d2hlbj0iMjAxOC0xMi0yNVQxNjowODoxMyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gaW1hZ2UvcG5nIHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0E3QzkwNDcwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjI3OjI1KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2ViODg4MDktNDExZS1lZjQzLWJmZDItMTIxODFiNjc4NTZmIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEzOjI2OjU5KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMxMTE2N2UyLTU1NTMtMGE0ZS05NjMxLTgxMmNmNTg2NzUyYSIgc3RFdnQ6d2hlbj0iMjAxOS0xMC0xNFQxMzoyNjo1OSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozZWI4ODgwOS00MTFlLWVmNDMtYmZkMi0xMjE4MWI2Nzg1NmYiIHN0UmVmOmRvY3VtZW50SUQ9Inht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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAmCAQAAAAc/RGWAAACR0lEQVR42tWWQU8TQRTHfxwQbpbiQfkYtp9BUuFgtIkGqFwUi8V61mjCR4CoN+vFRKiVgx/DfoWSeBTc1hgTo9va/j10stnpzrRbwoXZ0755+9uZ+b8378HFHouUeEeTgJCQ73zhLetkzwbL0yBEjiekzvXpYEvULUSbFse0LdsHrqbFrdIxH52yxzKZaGaBAq8Iot8U0uCeMDCwR8w5PeapGGifx5Nxw7/XY+tyjSyfjGdl/GaHq3uR6mh2zSpv+qUYnt3L1OLtmrO85p4eKtuYKh6OEOLANZVDiICFqYBZI08uOdVIHHGNb9xK+BX5wfvY+w5CfEwmWYhoMx9ZZviL6HLb8rtLD/GHmVgQBYhwNCFLCPHGspURosedyHKPf4gBDy2/1wixYQNrCLEysu4dgywCsGZw5RGvAkLUbGMTIa54Ar1HkXWD23YII0TTNgaIn04dqwbZR8iTah1EYJtCxFdPaDyNbhhfmh0jwvTATZOQ/dGDj0YrCfRveZM+moAMklv2iXLf4B5Q8SIvu0Rxh03J4IZx50PecIWNK7DXLVwcuWb57SFEaXLq/UYM2LL8hshfMcslThAhi5Mvh890R5IMYJsuR7H3Ld+ll3dcX7NOTWctQU4QIu9yPDzDBXtgKtA5lYBnCNFhyeewYgI4HfI5QgxYPY8ymjGbFdXJlblvCn3ZU+jnKHNqVldNs5WVWCuyb7UiGZbZNzDRGb9ZW57DRLPUGmmW6n4p3CM3pp1ruOMuTdXdoBY1nAFNapSSSXaxxn9c4GmcbbgItgAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/scenario-playing.4a85c06e.png\";","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-open.82a9ce66.png\";","module.exports = __webpack_public_path__ + \"static/media/air-conditioner-close.02dc0af6.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjMwKzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NjAxYjIxMy1iZDZhLTM5NGYtOTQ2NS0xZWU4NDY5NWEyZDYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NTY2YjkyZS03Y2U5LWNmNDgtOTAwMS1iM2ZhOTQyNGUxNWUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY2MDFiMjEzLWJkNmEtMzk0Zi05NDY1LTFlZTg0Njk1YTJkNiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTozMCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjAxOjU0KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0OWQzMmE1ZS03ZWZhLTVlNDktOTM2MS1mYjkzYjVlYzM1ZWYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MGExMmYxNS1jYTgwLTU0NGQtYTliMy0yZDkxM2E4YmFjMTMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ5ZDMyYTVlLTdlZmEtNWU0OS05MzYxLWZiOTNiNWVjMzVlZiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowMTo1NCswMzowMCIgc3RF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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAASzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDQtMjRUMTc6Mjg6NDMrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDE3OjA2OjU5KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMDFiZTk1MS02YTcyLWM2NGUtYmQ2OC05ZWQ3OGUxNzkzODIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NDI4ZmJkOS01M2ZlLWY0NGUtYjQzNy1lNDIzMDVmNzUxZTYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMTYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT4wQUY0RjVDNTAzMDIwREIyNzA4RTQ1MjVEMENGNzQxRjwvcmRmOmxpPiA8cmRmOmxpPjM1OTAwMjU2OEVGQUE1NzA3ODA4OUM4MDhBOTBBRUJGPC9yZGY6bGk+IDxyZGY6bGk+NDBFMTg0MUY2MzgwQzdBRkZBQThCNEQ1RkU1RDg4OTc8L3JkZjpsaT4gPHJkZjpsaT40RTg2QUMwNEJBMjhEQzg0QUNDMkVFRjk0RkQ0M0QxRDwvcmRmOmxpPiA8cmRmOmxpPjhCNzlFRjhFNjVCNUVGRDY2QkIxRkZDOTc3OEIyMEEzPC9yZGY6bGk+IDxyZGY6bGk+OTMxNDA3QjRGODNCRjAzMUZGNEQ5RkYzMkE4MUM1MTA8L3JkZjpsaT4gPHJkZjpsaT45NkIxNjA4QzQ4NEZCMUVFN0MyQzA3RjMxNzAzMEFENzwvcmRmOmxpPiA8cmRmOmxpPjk3ODdFMEVCRTg1RkUyMUY5Nzk4MUU5QUY3Rjc1RTJDPC9yZGY6bGk+IDxyZGY6bGk+OUJEODM3OUU4MzU0MkI4NzIwNzk5QzhCMkE2RDQ3MEU8L3JkZjpsaT4gPHJkZjpsaT5DMTJBNThEQzVCMTRGQTNDNUYzRkY3OUEzMzQ1RTdGMDwvcmRmOmxpPiA8cmRmOmxpPkQxMjYwRUFGODc4NDQxMUEwRDVDMzI1QzgzNzQ5OTREPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDoxODMzMGI2Yi0yNTJiLWFjNDEtYTk3NC01YWE0NmM4MTQ5ZDA8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOjg4MDkwNUUwRDIxQkU4MTE5RkE0ODFFOTYzOUNCM0NEPC9yZGY6bGk+IDxyZGY6bGk+eG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUE8L3JkZjpsaT4gPHJkZjpsaT54bXAuZGlkOmE0ODg2NTQ5LTQxNGQtNGI0ZS04NzljLTM3NzFmODUzOTc0MjwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBN0NEMTRBQ0Q0N0U4MTE5Qzc0QjY2Q0YwOTExMUFFIiBzdEV2dDp3aGVuPSIyMDE4LTA0LTI0VDE3OjI4OjQzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQjdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIgc3RFdnQ6d2hlbj0iMjAxOC0wNC0yNFQxODo0Nzo0MiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCMTlEREE0NDMwOEU5MTE5NzA1QTA4NUNCNTZBOEVBIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTI1VDE2OjA4OjEzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkMxOUREQTQ0MzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6MDg6MTMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QTM3QTdDOTA0NzA4RTkxMTk3MDVBMDg1Q0I1NkE4RUEiIHN0RXZ0OndoZW49IjIwMTgtMTItMjVUMTY6Mjc6MjUrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0RXZ0OndoZW49IjIwMTktMTAtMTRUMTA6NDQ6MjMrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjlmYjYyY2UtOTk1Yy0xZTQ1LWE5NWMtNDUxODVlMjdjZTEzIiBzdEV2dDp3aGVuPSIyMDE5LTEwLTE0VDEwOjQ0OjIzKzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMwMWJlOTUxLTZhNzItYzY0ZS1iZDY4LTllZDc4ZTE3OTM4MiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxNzowNjo1OSswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWI2YmU4Ny1mMTUyLTlmNDgtOTIwYi03MDJiYWIzMzExM2YiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REE3Q0QxNEFDRDQ3RTgxMTlDNzRCNjZDRjA5MTExQUUiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTdDRDE0QUNENDdFODExOUM3NEI2NkNGMDkxMTFBRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkLGYYUAAAeQSURBVHic7ZxdiFZFGMd/a7ut6yqum+JHfkFt5UaFFm7fYiCaFwUiZFdCBN51EwRdRRAEXXZXmOBVXoiwEJoYiYUXShkl7Var0WrtJmruoq3WlnbxP4ednfOu+e778cw7zg/OzZzdc/5z/u/MmZkzz9N048YNEvEww1pAorokQyMjGRoZydDISIZGRjI0MpKhkZEMjYxkaGQkQyMjGRoZydDISIZGRjI0MpKhkZEMjYxkaGQkQyMjGRoZydDISIZGRrO1gBrjb2lsMlFRR2JuoSMlyqLfsxqzobclydDISIZGRjI0Mm5HQ++wFlBLGtXQ2TW45iJgG7Aa6KzB9etCI81DW4AOYCXwAPAx8M80rjPVXHQz8DLQD3wLfAf8gqY/49O4jwmNYuhs4G7gIeBZoAcYBj6r4j1eB7qBR7PrHwO+AE4CvwFXqnivmtEUeHxoE3otrAFeRK3oAaAN+Ah49Sb/OwLMLVHeQrFl3wn85ZVdBX4A9gO9wAngOoEvToTcQpuB+cBzyMxnkEGt2fkX0ADn3zKvW+rvV5YoawXuR+/WLmTq58AFptfV14VQDW0HliMzN6MWusj7mwXA08CRMq9dqoW1A0eBp5yyGcCs7HgWdfvzkKlngD/LvG9dCNHQduBeYD2wBb03O0r83WGqN1j5BrX4rWiku947vwh4EpiDuuzDwCkCNDU0Q5tRy1wPvAQ8RlHjILAT2AUMVfHefwAfAp8Ar6D38wrnfAfwBDIU4G9ggMC635AMbWLinbkFjTZ9fQeB99FApVYMAe+gQdBrwEbnXHOmazw7LgHnCGigFJqh+TvzISZaQs5u4D2gr0569qN56BvAdqe8Bem7jAzdQzK0wGw0B3wRtYAO7/wHwNto7llP+oA3gWvADqe8A+m8gt6lfQQyTw3B0Ba0aJBPTRZ653djY2bOcHb/mUxuqQuR3lPAKPAzAawohbCW24G6sOcptsyDqJu1MjNnONNx0CvvQLqnGonXnRAMXQGsQytArU75IBoA1eud+X/0IT2DTlkr0r2OySNiM6wNvQt4BFiLlvNcPTup7Wh2OuxHunJmIN1rUT3ushDlYm3oCvQgurzyw2ieGSK7kD6XLlQP81ZqbWgXsAotqbnsobqLBtVkCOlzmYfq4f8w604Ihi73yo4Cew20lMNepNNlObe5od1od8BSr/xTtAwXMn8gnS5LUX266y9nAktDVwGL0deMnGvAIRs5ZXMI6c2ZheqzykaOsDT0PvT1wuVYdjQCpbTOQfUyw9LQe9CnMpcTFkIqwNfbjuplhqWhy5jc3QJ8byGkAny9s1C9zLA0dDGalLsMWAipAF9vG6qXGZaGzkebs1zOWgipAF/vnaheZlgaOpfiN8/zFkIqwNfbQumdhnXDchvndYqbnmdQ3Y/FtQ74bUL18O9p1lAsW+hVilsq/VFvpTR5R7Xx9f6L6mWGpaGjFD8IL7AQUgG+3nFULzMsDb2Ads65mA75p4Gv929ULzMsDR2m2D2ZL26Xia/3Ksa7KywNPQuMeWUPWgipAF/vGMZTL0tDT1Pceb7GQkgF+Hr/RPUyw9LQn9DeVpee7GgESmm9jOplhqWh/eh943a7M4ENNnLKZgPSmzOG6tNvI0dYGtqHgoR+9co3EX5IfCfS6fIrqo/pLkXrLSgDKDTP5SkUBRYyW5kcegiqh/nHhRAM7UcxIi7bgCX1l3NLLEH6XC6hetz2hg6iBBX+g1iPQvpC5BWK8aMDqB6DxT+vL9aGXkQP4jialLsL3a+iSLSQ2MzkvA7Xke7jqB4XLUS5WBsK+lUfQQkq3MQVK1B8pukuOodupMfdTP0X0n2EAFonhGHoCEodc4BiStSNKD7TdBdAdv83mBz8C9J7AOkfqa+k0oRg6DjKA9QLfIkiol22A29hZ+ri7P7bvfJzSG8v0m8eSghhGAoKlv0KPZyvKf7adwDvUv/utzu77w6vfATp7EW6gwj2hTACfnNuoJQx89D+1seZvEVlO8pGUuscCzmbKeZYALXEk5mGzwkoHB/CM/QCekgt2eFnQdmI4jFrkQUlZwmls6CAMp58DexjIglVUIaGmBqunDxFe1DgUDViYTqZOk8RTAze9hFwnqIQDYVbyySWcxQFDh1iemEUPWihfRPF5byc39Eu+bybDTaTWKiGwtS5/mZSejB3DRl6Au1oH0Afm8+jh9+O9gAtQzsNHkQ/lB4mfzXJuZ5dc5SJ0Wzwuf5CNhRuno2z1jRkNs7QDc0plS+3i2LkdzW4hFp3ypdbY9yM1g+jnAar0Lt2KcXAp3IYQ98zz9DgGa0byVCXTjSluB+NiFej6cbs7GhD78VW9EPI8+qOo/XXa6hLvZIdQ+jj9CngR7QuG3oUeUka1VCfbtRa70PxmcvQkt18NJBqQwaOokHNMBownUZ7gPoJJx9SRcRiaCIjlLXcRJVIhkZGMjQykqGRkQyNjGRoZCRDIyMZGhnJ0MhIhkZGMjQykqGRkQyNjGRoZCRDIyMZGhnJ0MhIhkZGMjQykqGRkQyNjGRoZCRDIyMZGhnJ0MhIhkZGMjQykqGRkQyNjGRoZCRDIyMZGhn/AecHjKGv2WwnAAAAAElFTkSuQmCC\"","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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjE2KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODoxNiswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OTQ2MGE1Yi0xOTk0LTdkNDMtODQ4My1jN2ZjYmNjN2Q5ZGQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphMjI2YmNhNS1hMjk3LThmNGUtOTRm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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNDoyNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4ODBmYTkzOS1kMTYyLTZiNDktYjZjZC03YzA0NTQ0Y2Y2ZjUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NzdkY2I0Yy0zNTA0LTI2NDYtYTBhOC1jYzMzNDBiYTY0NmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiYmQ5ZWYwMC0xYjkxLWRjNGQtODAxMi1hM2ZmYThhNWY5MGIiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiYmQ5ZWYwMC0xYjkxLWRjNGQtODAxMi1hM2ZmYThhNWY5MGIiIHN0RXZ0OndoZW49IjIwMjAtMDMtMTJUMTE6MjQ6MjcrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODgwZmE5MzktZDE2Mi02YjQ5LWI2Y2QtN2MwNDU0NGNmNmY1IiBzdEV2dDp3aGVuPSIyMDIwLTAzLTEyVDExOjI0OjI3KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vgZgJAAABm5JREFUeJzt3F+MXVUVx/HP/O20jLRIgdKItkJETVAjVDBGYpSgRENIDA8QjA8EHkxMNL6o8U3fDE9GCPCA8V0egAcJGsBIgpqQ8iehVv6VpkMBaQdaaKfz5/Cwzsm9LTSTuXPPvvtM9jc5mftvzt53//Zae+111rljVVUp5MP4qDtQOJ0iSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDM6JIg45jGhfge7sEhVGcc+/E7fA3nYnIUnR2ULgkyiXPqYwWHsQ/v1u9XeBMv4qgQ79z68xOpOzsoYx2oy9qGq/EdfB2fr19bbeYv4Aiexz/xd/wLyy31cyjkIshEfWzGdlyOr2A3LsOluKT+7LIY7PfxBv6D/9bvfRlfFW5tFlPCCyziNbyEV4Vbe0FY03s4hSVheSNllIJM4gJ8Bp/DTjHol2JXfWyqP3tSDGhzHKr//q/++7ZwWZ/CZ+tz7MbF9Xl218dYfb5jOIBXhDiHcRAv168fMSJxUgrSLMg7cZEYoD3CEi4SM3qTmNGVGKwDeF1YwDN6a8ZJMevPNmgTwjpmhMV9Qbi9XWICfFqI11jPKWEpb+Mp7BUCHcYc/i+Rq0shyLSwgG+J6OgbYuAn+o6GI/gH/ip8/pwYiGUx+IPO2vG+tiaFBV2HH+AaIVzDUl97x/AYHscTYpK0OmBtC/JN3IUrnR7RrWBezLy9QoS9wgXNixmbghmcLyxoD67FFfiEsNj+Pn8gJsrPhPW0Qtsx+jbhJpaE39+K88TM+zWeFW7hkHAdg9K4uhNr/L+TdduH8DT+gh24Hj+p+9pY6Q7hXmfX0c9VaVuQZ/FbET09hx/jh2K2PSSipPWyE7eJAOFuEUUNwnGxwO8XbvZHQpA/iXXlS0Kc1qyD9gU5iHvrx0tiYV0Rs3nzEM4/g5vwi/p8/za4IP1M643NM8JV/U2sH+ux5FVpW5DK6evBjF7oOejueUpYw1Z8V7iWC4W7em/Ac55Jf99mxSRKsq6lzPOMi8FsBBk0mrgKvxdr01Y9n97W7J1q4ZxnJXUuaxgh3Ri2iL7vE369OW8bIWPSnXOnMqE1z+Hnwq0cxO34af1el5KlH0sXBTmOJ/uevyoChi5+l4/Q+RklhBhb9VMdYSMIMqEIUmiLIkhmFEEyowiSGRshVNyil+oYRn5spKS0kLYuic7qhb6tpsZTsBEs5BGRJq9EtrfTbARBntYTYuRVI+sltSBtJeraFCLppjN1lLUoRFkRtVW50l+jtdbLwusitYUsiC/aXLvYJL+0R6VXdULiidOmIPfiHb0vuCiu8E2JC0u/ElUnOYlSCQG+iE/Wr90mKiln9C49X47vt9GBNsuAzjzxihj4ZvCX68e5bU4by2j61VTVn9nPViZRmxZyRFSjNwVui6Ja8Tzho/eL2TjdYh8GYVGUL10iNpxzolSpKaabEYV27VBVVcrjrqqqFqqqequqqisSt72W4+aqquaq4I6Ubad2F8eF+S8J68mVo3oFE/MpG04tSLMwjss7zdHUHpO4n6nD3vGzPF4LF+MGcWfUSb3gYaJ+PifuGZkf8PxN38b6HicjdV3WMNgjCri3neX9efwRvxlSe0npYi7rhF4oekzcLzIhIrkpEcXdIfZAfxDrVWfooiDNbn8BfxbZ3imxrzkfd4p7UG4RhdJHR9LLAemiIM2acUrczPlo33uzotT0GlEV35m7bxu6KEjDDG6sH08JgXbg2/Xzl6S78WdodFGQJvqZxq310c+KuPXsfrHv6RRdFKShEhHVO8I1jYsFfE6sLQ/q4AWrLgrSrCELeEAMfFO9uCwW8QMSX8cYFl0UpGFZJCifGnVHhkluqe+1kHv6ZSC6LAj5XNgaGl0UZLNegnLLiPsydLooSP89ip2Lolaji4v6XvxSpEkeHm1Xhk8XBXkT97Xcxsh+ImlULqvZL+TKCb0scVJxUgvS+P9JcaEpV7br3Z+e1IukbKy/BKjx/8vyq8s6IerGttevbdgrhmMi3VGJVMeuhG2vh/dTNpZS/S2i1qlrgcQFKRvL5UcwCzVd3BhuaIogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTKjCJIZRZDMKIJkRhEkM4ogmVEEyYwiSGYUQTLjQxUifNbR5ASfAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjQxKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI1OjQxKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNTo0MSswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphNjhhYmMxNi00Y2JlLTEyNGItODQ5NS03OGU1ZTUxYTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyZjc1NWRjNC1lMzQxLWQ0NGQtYjUw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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjU0OjQwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjU0OjQwKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMTo1NDo0MCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozZmQxZDk1YS1iNDk3LTFkNDEtYWZjMC1iYjIxMWNiNWUxNmMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkNmUwNDZkNS0zYTEwLTk2NDEtOWRi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\"","module.exports = __webpack_public_path__ + \"static/media/setup.2aed5ff7.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjA0KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI3OjA0KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNzowNCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNzI3NjI5Ny0wNGM3LTdmNGMtYmVkNC1lZGFiNWQ5NDE0YjIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NWJlYWMzYy1lN2FlLTUwNDktYjZh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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjIwKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI5OjIwKzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyOToyMCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiNTU2YTBmOS01ZTBkLWQwNGQtOWE5OC0wZWI0NDc4MmYxMzciIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODU2MDMwNy00MDZiLTJiNGItYTU4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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjM4KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI4OjM4KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyODozOCswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4YTJiZTZjZC05ZGJlLTM3NDUtOTZmMy1lNzViMmU0ZWI1MWUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphNjA1NjY5Ny1iNTRhLTI1NDEtOWU4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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHJWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTI1VDE1OjM5OjA5KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGRjZjEwMzAtMzIwYi1lZjQzLWI1YTktYTI3MjQ1MWVjMmY1IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MzhmMjJiNDMtYTRlMy1mODRkLTljNmQtMzcxNzEyZmVlZGM2IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NjA1NTgzNjctMjQ5YS1mMzQzLWE2ODctNWY0YzYzMDY1YWY5Ij4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+RTg5RDM5NTE1MTRFQjI2RkMyQkEzM0U5MzlCQUJCRDg8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MDU1ODM2Ny0yNDlhLWYzNDMtYTY4Ny01ZjRjNjMwNjVhZjkiIHN0RXZ0OndoZW49IjIwMTktMTItMjVUMTU6Mzk6MDkrMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwZmVkNDItYjE4Zi1mZDQ5LTg3ZjgtYmU1NjFhOTI1ZDE2IiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI3VDExOjEwOjU1KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBkY2YxMDMwLTMyMGItZWY0My1iNWE5LWEyNzI0NTFlYzJmNSIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0yN1QxMToyNzozNCswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAzLTEyVDExOjI2OjM3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTEyVDExOjI2OjM3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wMy0xMlQxMToyNjozNyswMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiYWQxZGQ2ZS0xMzY1LTkzNGEtODY1Yi1lMjg1OTQ3ZDg5ZDQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOWZhYzU0OS04MzYwLWFjNGQtODY0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\"","module.exports = __webpack_public_path__ + \"static/media/doors.f649da87.png\";","module.exports = \"data:image/png;base64,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/18v0zCQQJAlIQmIIS1gSZBFDEKKMiBAhgsESqELc/kC0UHApq7S0tFCrLHeQAhQVBVFJBFkLAi2ENSwRJJmEJYFMQshkTybJbN3v+cfvPrpnMr1O95uZ5HxVUzM1r9/S7/zuueece999XhAEGEZsqC/AGB6YEAzAhGA4TAgGYEIwHCYEAzAhGA4TggGYEAyHCcEATAiGw4RgACYEw2FCMAATguEwIRiACcFwmBAMwIRgOEwIBmBCMBwmBAMwIRgOE4IBQCLKk2UWzYzydMONJmAyMBs4FXgf0A7cCzwMbOm/Q2L24sguLlIh7EN4QAoYBxwLnAFMA44E3gs0A0kgA0wAeoEFQ3KlDhNC7UgAY4CpwInAce7vw5AgmoFG9zkvb78jkUiGFBNC9XjAKGAiavXHIaNPAQ4F3uO2N1I8FtsObKznhZaDCaF8PKABGI9a8QzU4icCk4BDkEcI3X4hfKAT2AC8AiwEHq/bVZeJCaEwHro/B6Igbypq7Ye734chUTQhw3sDHQQIgG5gG/A2sBxYCawGXgPeADbV5RtUgAlhT0Yj134EEsAkZPzDUOsfT+n71gt0oExgNTL8m+7v5cAa1CVkan/51WFCUEtOAmNRUHcU8CFgFhLDGIq7eoAssBvYAWwG2sgZvxVYgeKAbuQhhh37ohBCl9+M3P6BwEHA8cAxKII/CgV7hdy9T67V7wDWI6O/CbwKLHN/dyCRDHv2FSHEUaA3CjgAtfypwMnAdNTnT0a5fyHjQ66/Xw28g9z8a8B/kQC2IIEMy1ZfjL1VCB4yfgoFc2NQH38icBJq9VNQqy+Fj/ryLtT63wSuQ8ZfA/QwAg3fn71JCKHxEyh3PxR4PyrnzqBvlF+MgJzxe5Hx24BngbuBl1Cgt1extwghDPaOB84EPoBa/HgUC8SRUIq5fVDr3oLc/fPAM8DLqBvoQf39iG/9AzFShZAA9kdp3anAB5G7n4TigAb3mRjFjZ9Fhn8HWIoMH7r8Hag76EUeYq8UQMhIEYKHWvahwAmorz8WjeCNJ1fKLVbYARm+Axl+JUrtnnd/b3bbdpMz/j7DcBVCWM4di3L5U1GUH5Z0x6LCTyNy+8XYiXL4taiKtxTl9WuBrajit5sRkubVi+EkhHD0bgoK7o5B9fvJ7md/ZPwGSrf6DaicG1by3kCGb0ctfxty+3u1u6+EoRRC6O4noALONBTZT3K/D6H06F2AovsO1OrXuJ9XgLeAdajYsxW1+mFT0h1uRC0ED7n1qWgEbwoy+hHkxu1TFHf3GWAXMm47aumrgNeR8dcjb9DhPmutvgyiFsL7gbNRUWc6Cv5GU7qf34UMuxUFem3I3b+OPMDbqDvoqstV7wNELYTPA59FsUCxYdvQ3YcjeG+SM/4byPjvoL7eWnwNiFoIs4D96CsCHwV43eRG8NpR7X4lGsBZicbst6DCjlFjohbCSygWGE1uAGc7cutheteKIv1VyCOYu4+AqIVwPTL+icgTvAa8gIo6q9jT6B6FxwZCrxIOCfvo+yTJdRde3vbAbU/02w7yMr7bt3+GknX7hzOTvQLHD4e3872dh7q5HnfscF5DkHecLLlsJrRH5F4vaiH8D/gWcCkSQw+KF2YCpyAjhGXhUg/fhDe8HXgOpYqnoEC0121rQN3JE8jznIIqkmHxKIaM8SQKOGejzCU8vocC0ieRF5vrfof7J5EnW4zmNUx33yeLAuA4KlkvAk5z3zkUT9xd56vAEnctYQN5nIjFELUQGoFLgMvQrN9m9//+AV+pwaGQDvSAyHMoI/kBElV+i70ejRyeAVyFxiVCssiQLwMXA19G9YuQZcCNyMjzgB+yp0BvRpNRzwc+gWKgABl5GfAiSpe/i+Y/pPL2XQn8HgW/5wBXIK/4O+DPRCiGqIVwFvAdlDaWmuZdiiwy4EPoxs9DwWh+V5IGHkCFqbnII4xy2wLkLW5A3dUl5CangCqQTwFPI9F+Dhk5n0eBR5AXOh3NdAq9zBvAbajFfw0JcH9yIt+GnnBaiO7HHCQYH7gGVUUfqvCeVE3Uzz7ORTe7uQbnXo9u4ovIC5xPXxG8Ta61zUUiHJW3fTtwDxLLxajA1eC2dQGPIW8zDqW9/R9CWY1abRPwYTQAFopgndt3oTvv5fTNlrLu+Pcj4Z2PhJJw1zAZOK+SmzFYohbCdGrjhbpRS12IKpUXoGwkn7+6z5yCiliHkDPEbtR3347GNObS11DLkUg2I0OeQc5TBG7/v6HWfiYaG2nMO/Zi4E40Le4Sd+78e70MmI9qIWcB5yJvEZJAZffIiFoIoym//y/GSuSSNyFDzCbXmgMUHC4ADgYuQq49FGAWtea73P6XoRHNsLq5EXgQpbEno9YaBpCgCP8p4F9IAKcjMYLceiiiLeS6q/zvvBmJ4Hk0pP5JVGrPJ8xQIiNqIdSiCrgT+A+6kUciF3qw2+ajVnYzcs9zkSHyW9sG5EmeBlqQWw9F0osyhIdR9D+HviLKoCrnje67zEX9erh9HerXX0AimocCzZCs2/4AGmz7FBJDA3sS6XyIqIVQakyhHP6HDBkAH0OBWpiTd6B5hY+gZxPyRQIS0WLUN78H+Ay5Caw+CvDudsc5i77Bp488yHzkcc5F/XoYd3QiT7EQeZCL0WBaPktRl5JBIvgwfUWaTy08Z9kMhRAG8wU3otb0FjL02eTStW6Uj9+CjP8l1M+GRZwsmpDyIBq8modSzpDt5CannoZSwYl523ehNPSfKNa5EHUJ4T1sRQHiNuTuW8gJP0Aius1d+yeQt8kXaT7hEH1kRJ0+tqKbUq1neBa19jgqDMVRdRJk3DtQEPhV1NLX5u3bAdyHWu3hbv+2vO2vIiN7qDsAFZNw19yGAtA1SERJZFSQt5iPupUZbv91ecf2UVd0F4oHZpKrrA6Ej2KJyIhaCL9EfWq1QliKDDYe9eMvkIs7whYLcvHX09fjbXH7b0QR/h/6XUf4jOI41I8/l3fsLEpXn0BBXDjPMfRuXcgbtSMB/p2+8ZDvjteGYoa/u2soFDP5DLCCSj3xhvO7offxpXYiXTrHFtMyABOC4Yh6VbUZ5OYiGIXxUPaxPKoTRh0shgNORmHCYepW4MqoThq1EE5A6ZN1ScXJEnFBKWohBJSerm4MwfMXUQthr3+sLMzG/SBvLl0A8Zi2BUDMbfCKt/lI79VweuRtxBIaP+vL4Du7PFauj9G2McaWnR5dPRJDcwrG7hcw8UCfoyb4NKe0o+eVFEXdMSEMglAAQQC7uj0eW5og/UqcFWvjZEuMHcZjcMykLB+dkeEj07M0NQRDKggTQpX4ztDdvR4Lnk2w4Jkku7rKt2LWh6Wr4yxdHeeWRwMu+GCGebN6aU4FQyIGE0KFBEGu/3+iNcHNCxvYuH1wltvZ6XHb40kefinBFef0MGtahnjEeZWlcRUQBGrJQQC/vT/Fj+enBi2CfDZs9/jRP1Lc9FBDrDeD19LSEplvMI9QAb4TwrV3NrL4tfplwHcvTsbaNsaOAxpaWlp60ul03Sux5hHKJPQEP5lfXxGELFkVH4/mRSaj8AwmhDLwfcUENz/cwDOvRloLmwP8nAjsZEIoQZgiLmpNcPfiUksy70lDAo6fkuXEqUoRq+CrwJyWlpa62spihDLo6PS4/oGBJhoX57wPZPjKnO53M4DuXvj2rU0sX1uRTT00m+pwNPm2LphHKEKYKt61OMmO3ZV1002pgKvO6+6TBqaS8LPLO6upExwEXF1Pr2BCKEIQQGe3xz3PVe4433vAwN1AKqkycxVcxcDPP9QEE0IR/AAeXxZnZwUVw5BEkZiyymLROODCemUQJoQCBIFGCR99pbowqk5zgr9Ql6NiQijKzi6P1jXVpYvF4oBBjCXMJvewbU0xIRTAD2BVe+zdwaVSpJLQ1BCQSurvZH3KDQ3U6SlpSx8L4AGrN5ZuJ6cdneV7n+4qGhP05y9f273H/3Z2enz/jhRL20oeaDpaIKSmmEcowuaO4j48laRiERRidFPAzy7vIlW6ZlWXt8aaEArgB9BVYgWj4yZlazpcHI/BCYeVnKE2rtQHqsGEUIB4TGIoRqzGd8/zcvMZi9Bd27MKE0IBAjfHsBjL2mIlp6RVQtaH1jUlTdJeuzPmMCEU4cDRxV1CZ4/HtXc2kqnBfONMFn7x7xTbS5ey6/L0k2UNBfA8OHRs6eb+9Io4n/zpKA4a4xOPuSnsHkyb4PPNCwb24t+6tZFNO7x3P+v7sGF7rFxBrSj7S1SACaEIR03wicUoWUvozcDbm/s61zHNhb3J+q0x2rdVVVXqQWs41Zyou4Yhnr1fPp4HoxsDjp5Y++dMBlFZvJ/c8sI1xYRQgo9MH1YPZ11Xr/mLUQthByPokXjPgzNnZGhKVX7JxVLPKjONrWj9p7oQtRBeok6urR54HuzXGDDnpMqfSd20Y+BbGwSwaUdVjvHqdDpdt0W6oxbCfei9DCPmLSyeBxed1vvuc4rlsn6rxx8fbegzHB0EcPuiZDVD1OvQAlx1I9LFtDKLZo5C6x9+Eb3WL8UIqGUEATy4JBH/9b2pirOsMaOCYNa0rO8BS1bFY+3bqgoVT06n00uq2K9sIl9VLbNoZhPwcfR+gqOp3frMdSWTxfvpgtTkJ1oTY0t/uqZcDfym3g+5DOvl9YaalpaW/v9qQgtunxXRJdwAXJVOp+ueugx7tzzM6EKvBFgUwbl+C3w9ChGACaFSwnc1nI2W660X3wCuSafTkWVYJoTKCVDWcykKfGu5ZvIatE7zr4h46RwTQnWEr+n7E1pb+jcMbp5AJ3qx15H0XQM6MkwIg8NH1dJr0JL7VwLPUN6qaL1o7OActFD3TdRp0kk52OhjbfDR+x5udD9NKDWegVr5OGTk9Wg+wQpUWAtfTDrkWPpoANY1GA4TggGYEAyHCcEATAiGw4RgACYEw2FCMAATguEwIRiACcFwmBAMwIRgOEwIBmBCMBwmBAMwIRgOE4IBmBAMhwnBAEwIhsOEYAAmBMPxf6SL3unOsYPLAAAAAElFTkSuQmCC\"","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\";","// 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, AreaModel,\n ConfigModel,\n CreateMediaDeviceModel, MediaInputModel, VirtualControlModel,\n ScenarioModel,\n ScenarioTriggerModel, HomepageItemModel, SoundState, UpdateFCMPushTokenRequest, MenuEntity, STPUIEntity,\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 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]);\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 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';\n\nexport const AlarmScreen = memo(function AlarmScreen() {\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('Lütfen geçerli bir şifre giriniz.');\n } else {\n setPassword('');\n }\n }, [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 TEKRAR DEVREYE AL\n
,\n () =>\n <>\n {\n renderIf(showHomeButton)(() =>\n
setHome(true))}\n className=\"alarm-setup-button\">\n \n \n
\n EVDEYİM KUR{isSetComplete === true ? 'ULDU' : ''}\n
,\n )\n }\n {\n renderIf(showOutsideButton)(() =>\n
setHome(false))}\n className=\"alarm-setup-button\">\n \n \n
\n DIŞARDAYIM KUR{isSetComplete === true ? 'ULDU' : ''}\n
,\n )\n }\n {\n renderIf(showRingingButton)(() =>\n
\n \n \n
\n ALARM ÇALIYOR\n
,\n )\n }\n {\n renderIf(showCancelButton)(() =>\n
\n \n \n
\n ALARMI İPTAL ET\n ,\n )\n }\n {\n
\n
\n \n
\n DEVRE DIŞI BIRAK\n
\n }\n ,\n )\n }\n \n {\n renderIf(showTimerPanel)(() =>\n
\n
\n SAYAÇ SÜRESİ\n
\n
\n
\n \n
\n {homeTimer}\n
\n
\n
\n \n
\n {outsideTimer}\n
\n
\n
\n \n
\n KALAN SÜRE\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';\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\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 KAPIYI AÇ\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';\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 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('Kumanda adı en az 3 karakterden oluşmalıdır.');\n return;\n }\n\n if (bridgeDeviceId == null || bridgeDeviceId === '') {\n failure('Lütfen bir cihaz seçiniz.');\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 }, [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 KAYDET\n
\n
\n
\n
\n
\n
\n KUMANDA TİPİ SEÇİNİZ\n
\n \n \n \n \n \n \n
\n
\n
\n CİHAZ SEÇİNİZ\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';\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 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 GİRİŞ YAP\n
\n
\n
\n {\n renderIf(role !== 'default' && role !== null)(() => (\n Bu sayfaya giriş yetkiniz bulunmamaktadır.))\n }\n
\n {renderKeyboard()}\n {renderNumpad()}\n \n );\n }, [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,\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';\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\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 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 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';\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 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\n return (\n // @ts-ignore\n 'Boş Liste'}\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 return (\n
\n
\n {label}\n
\n
\n
\n Hide Version\n setFilterMessage(e.target.value)} placeholder=\"Filtre\"/>\n\n \n \n Copy Raw\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 name: 'KİŞİSELLEŞTİRME',\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';\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 [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 Cihaza ulaşılamıyor.\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 name: 'SENSÖR AYARLARI',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Cihazlar',\n key: 'name',\n },\n {\n length: 2,\n name: 'Tip',\n key: 'type',\n },\n {\n length: 2,\n name: 'Unique ID',\n key: 'unique_device_id',\n },\n {\n length: 1,\n name: 'RF',\n key: 'rf_address',\n },\n {\n length: 2,\n name: 'Gateway',\n key: 'gateway_id',\n },\n];\n\nconst keyExtractor = (item: BridgeDeviceModel) => item.id;\n\nexport const DeviceListScreen = memo(function DeviceListScreen() {\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: 'STP EDİTÖRÜ',\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: 'AYARLAR',\n url: `/settings/device/device-settings/${selectedDevice ? selectedDevice.id : ''}`,\n className: 'blue',\n hidden: !(selectedDevice),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/device/edit/${selectedDevice ? selectedDevice.id : ''}`,\n className: 'orange',\n hidden: !(selectedDevice),\n },\n {\n text: 'CİHAZ OLUŞTUR',\n url: '/settings/device/edit',\n className: 'green',\n },\n ], [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 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';\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\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 SİL\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';\n\nconst BACK_URL = '/settings/device';\n\nexport const DeviceEditScreen = memo(function DeviceEditScreen() {\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('Cihaz başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n }, [failure, onBackPressed, rpc, selected, success]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure('Lütfen geçerli bir cihaz adı giriniz.');\n\n return false;\n }\n\n if (type == null || type.value == null) {\n failure('Lütfen geçerli bir cihaz tipi seçiniz.');\n\n return false;\n }\n\n if (!isValidRFAddress(rfAddress)) {\n failure('Lütfen geçerli RF adresi giriniz.');\n\n return false;\n }\n\n if (gateway == null || gateway.value == null) {\n failure('Lütfen geçerli bir gateway seçiniz.');\n\n return false;\n }\n\n return true;\n }, [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('Cihaz başarılı bir şekilde ' + (bridgeDeviceModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n })\n .catch(failure);\n }, [\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 `${selected?.name} ile beraber ${message} silinecektir. Devam edilsin mi?`}/>,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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';\n\nconst BACK_URL = '/settings/device';\n\nexport const DeviceSettingsScreen = memo(function DeviceSettingsScreen() {\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('Sıcaklık offset değeri -9.9 ile 9.9 arasında olmalıdır.');\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('Histerez değeri 25.5 ile 0 arasında olmalıdır.');\n\n return;\n }\n }\n\n const firstLevelAlarmCountdownDurationValue = Number(firstLevelAlarmCountdownDuration);\n if (isNaN(firstLevelAlarmCountdownDurationValue) || firstLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 1. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const secondLevelAlarmCountdownDurationValue = Number(secondLevelAlarmCountdownDuration);\n if (isNaN(secondLevelAlarmCountdownDurationValue) || secondLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 2. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const thirdLevelAlarmCountdownDurationValue = Number(thirdLevelAlarmCountdownDuration);\n if (isNaN(thirdLevelAlarmCountdownDurationValue) || thirdLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 3. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const reactivationDurationAfterResetValue = Number(reactivationDurationAfterReset);\n if (isNaN(reactivationDurationAfterResetValue) || reactivationDurationAfterResetValue < 0) {\n failure('Alarm reset sonrası tekrar aktifleşme süresi geçersiz.');\n\n return;\n }\n\n const sirenIntervalOnDurationValue = Number(sirenIntervalOnDuration);\n if (isNaN(sirenIntervalOnDurationValue) || sirenIntervalOnDurationValue < 0) {\n failure('Siren fasıla on süresi geçersiz.');\n\n return;\n }\n\n const sirenIntervalOffDurationValue = Number(sirenIntervalOffDuration);\n if (isNaN(sirenIntervalOffDurationValue) || sirenIntervalOffDurationValue < 0) {\n failure('Siren fasıla off süresi geçersiz.');\n\n return;\n }\n\n const sirenRepeatCountValue = Number(sirenRepeatCount);\n if (isNaN(sirenRepeatCountValue) || sirenRepeatCountValue < 0) {\n failure('Siren tekrar miktarı geçersiz.');\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('Başarılı bir şekilde kaydedildi.');\n onBackPressed();\n }).catch(failure);\n }, [\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('Resetlenecek, devam edilsin mi?', () => {\n rpc.resetDevice(selected.gateway_id, selected.unique_device_id)\n .then(() => {\n success('Cihaz başarılı bir şekilde resetlendi.');\n setSelected({...selected, unique_device_id: ''});\n })\n .catch(failure);\n });\n }, [selected, question, rpc, success, failure]);\n\n const buttons = [\n {\n text: 'RESET',\n className: 'orange',\n onClick: onResetPressed,\n hidden: !selected?.unique_device_id,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\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 ALARM GERİ SAYIM SÜRELERİ\n
\n \n \n \n
\n ALARM RESET SONRASI DEVREYE GİRME\n
\n \n \n
\n
\n <>\n
\n SİREN FASILA\n
\n \n \n \n
\n SICAKLIK\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 name: 'CİHAZ OLUŞTUR',\n routerLink: '/settings/device/edit',\n component: DeviceEditScreen,\n },\n {\n name: 'CİHAZ DÜZENLE',\n routerLink: '/settings/device/edit/:id',\n component: DeviceEditScreen,\n },\n {\n name: 'CİHAZ AYARLARI',\n routerLink: '/settings/device/device-settings/:id',\n component: DeviceSettingsScreen,\n },\n {\n name: 'CİHAZ AYARLARI',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Gateway Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Tip',\n key: 'type',\n },\n {\n length: 2,\n name: 'IP Adresi',\n key: 'ip_address',\n },\n];\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 {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(`${selectedGateway.name} yeniden başlatılacaktır. Devam edilsin mi?`, () => {\n success('Yeniden başlatılıyor...');\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Reboot);\n });\n }, [\n rpc,\n question,\n selectedGateway,\n success,\n ]);\n\n const buttons = useMemo(() => [\n {\n text: 'YÖNET',\n url: `/settings/gateway-control/${selectedGateway ? selectedGateway.id : ''}`,\n className: 'red',\n hidden: !(selectedGateway),\n },\n {\n text: 'DEVREYE ALMA',\n url: `/settings/gateway/${selectedGateway ? selectedGateway.id : ''}/setup/match`,\n className: 'blue',\n hidden: !(selectedGateway),\n },\n {\n text: 'DÜZENLE',\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 ], [selectedGateway, onRestartClick]);\n\n const displayNameExtractor = useCallback((item: GatewayModel, column: ColumnModel) => {\n if (column.key === 'type') {\n return 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 }, []);\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';\n\nconst GATEWAY_TYPE_SELECTION_ITEMS: SelectItem[] =\n Object.entries(GATEWAY_TYPES).map(([id, name]) => ({value: id, label: name}));\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 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('Lütfen geçerli bir gateway adı giriniz.');\n\n return false;\n }\n\n if (type == null || type.value == null) {\n failure('Lütfen geçerli bir gateway tipi seçiniz.');\n\n return false;\n }\n\n if (!isValidRFAddress(rfNetworkAddress)) {\n failure('RF ağ adresi 0-255 arasında olmalıdır.');\n\n return false;\n }\n\n if (!isValidRFNetworkId(rfNetworkID)) {\n failure('Lütfen geçerli bir RF ağ ID seçiniz.');\n\n return false;\n }\n\n if (!isValidRFAddress(rfNetworkChannel)) {\n failure('RF kanal 0-255 arasında olmalıdır.');\n\n return false;\n }\n\n if (!isValidPort(homeNetworkPort)) {\n failure('Lütfen geçerli bir Home Network Port giriniz.');\n\n return false;\n }\n\n if (homeNetworkOption == null || homeNetworkOption.value == null) {\n failure('Lütfen geçerli bir Home Network seçiniz.');\n\n return false;\n }\n\n if (!isValidIP(homeNetworkIP)) {\n failure('Lütfen geçerli bir Home Network IP adresi giriniz.');\n\n return false;\n }\n\n if (!isValidIP(homeNetworkSubnetMask)) {\n failure('Lütfen geçerli bir Home Network Subnet Mask giriniz.');\n\n return false;\n }\n\n if (!isValidIP(homeNetworkDefaultGateway)) {\n failure('Lütfen geçerli bir Home Network Default Gateway giriniz.');\n\n return false;\n }\n\n if (!isValidPort(remoteNetworkPort)) {\n failure('Lütfen geçerli bir Remote Network Port giriniz.');\n\n return false;\n }\n\n if (remoteNetworkOption == null || remoteNetworkOption.value == null) {\n failure('Lütfen geçerli bir Remote Network seçiniz.');\n\n return false;\n }\n\n if (homeNetworkOption.value !== remoteNetworkOption.value) {\n if (remoteNetworkIsStatic) {\n if (!isValidIP(remoteNetworkIP)) {\n failure('Lütfen geçerli bir Remote Network IP adresi giriniz.');\n\n return false;\n }\n\n if (!isValidIP(remoteNetworkSubnetMask)) {\n failure('Lütfen geçerli bir Remote Network Subnet Mask giriniz.');\n\n return false;\n }\n\n if (!isValidIP(remoteNetworkDefaultGateway)) {\n failure('Lütfen geçerli bir Remote Network Default Gateway giriniz.');\n\n return false;\n }\n }\n }\n\n return true;\n }, [\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 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('Gateway başarılı bir şekilde ' + (gatewayModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n })\n .catch(failure);\n }, [\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('Gateway başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n }, [success, failure, onBackPressed, rpc, selected]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n `${selected.name} ile beraber ${message} silinecektir. Devam edilsin mi?`}/>,\n },\n {\n text: 'WiFi AYARLARI',\n url: `/settings/gateway/${selected ? selected.id : ''}/wifi`,\n className: 'blue',\n hidden: !(selected),\n },\n {\n text: 'SİP AYARLARI',\n url: `/settings/gateway/${selected ? selected.id : ''}/sip`,\n className: 'blue',\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [onCreatePressed, onDeletePressed, selected]);\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';\n\nconst BACK_URL = '/settings/gateway';\n\nexport const SIPDetailScreen = memo(function SIPDetailScreen() {\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('Lütfen geçerli bir SIP kullanıcı no giriniz.');\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure('Lütfen geçerli bir şifre giriniz.');\n\n return false;\n }\n\n if (!isValidIP(ip)) {\n failure('Lütfen geçerli bir IP giriniz.');\n\n return false;\n }\n\n if (!isValidPort(port)) {\n failure('Lütfen geçerli bir port giriniz.');\n\n return false;\n }\n\n if (flatName == null || flatName.length === 0) {\n failure('Lütfen geçerli bir daire adı giriniz.');\n\n return false;\n }\n\n if (!isValidSIPNo(employeeId)) {\n failure('Lütfen geçerli bir görevli SIP no giriniz.');\n\n return false;\n }\n\n if (!isValidSIPNo(securityId)) {\n failure('Lütfen geçerli bir güvenlik SIP no giriniz.');\n\n return false;\n }\n\n return true;\n }, [\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('Başarılı bir şekilde kaydedildi.');\n onBackPressed();\n })\n .catch(failure);\n }, [\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: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'SİP Ayarları',\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';\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 [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 IO TEST\n \n {deviceType?.name || '-'}\n
\n
\n
\n \n Cihaz Adı: {deviceName}\n \n
\n
\n \n Unique ID: {rawDevice.unique_device_id}\n \n
\n {/*
*/}\n {/* Versiyon: 1.27*/}\n {/*
*/}\n
\n \n RF Gücü: {rawDevice.rf_power.toString()}\n \n
\n
\n
\n KAPAT\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';\n\nconst BACK_URL = '/settings/gateway';\n\nconst MANUAL_SEARCH_TEXT = 'MANUEL ARA';\nconst MANUAL_SEARCH_TEXT_IN_PROGRESS = 'MANUEL ARANIYOR...';\n\nconst AUTOMATIC_SEARCH_TEXT = 'OTOMATİK ARA';\nconst AUTOMATIC_SEARCH_TEXT_IN_PROGRESS = 'OTOMATİK ARANIYOR...';\n\nconst MatchedItemButton = memo(function MatchedItemButton({\n color,\n text,\n onClick,\n disabled,\n }: { color: string; text: string; onClick: () => void; disabled?: boolean }) {\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\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('Lütfen cihaz seçiniz.');\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 }, [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 Unique ID: {unique_device_id}\n Cihaz Adı: {deviceName}\n RF Gücü: {rf_power.toString()}\n , () =>\n Cihaz Adı: {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 Eşleştir'}\n onClick={onReMatchClick}\n disabled={searchInProgress}/>,\n )\n }\n
\n
\n
\n );\n});\n\nexport const SetupMatchScreen = memo(function SetupMatchScreen() {\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_SEARCH_TEXT_IN_PROGRESS : MANUAL_SEARCH_TEXT, [manualSearchInProgress]);\n\n const automaticSearchText = useMemo(() =>\n automaticSearchInProgress ? AUTOMATIC_SEARCH_TEXT_IN_PROGRESS : AUTOMATIC_SEARCH_TEXT, [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('Sadece bir gateway kurulum modunda olabilir. Diğer gatewayleri ev moduna almak istiyor musunuz?', () => {\n job();\n });\n return;\n }\n\n job();\n }, [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: () => MOD DEĞİŞTİR
EV
,\n onClick: enableSetupModePressed,\n className: 'gray',\n hidden: setupMode,\n },\n {\n renderContent: () => MOD DEĞİŞTİR
KURULUM
,\n onClick: disableSetupModePressed,\n className: 'gray',\n hidden: !setupMode,\n },\n {\n text: manualSearchText,\n onClick: manualSearchPressed,\n className: 'red',\n },\n {\n text: automaticSearchText,\n onClick: automaticSearchPressed,\n className: 'green',\n },\n ], [\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 name: 'Eşleştirme',\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 name: 'GATEWAY OLUŞTUR',\n routerLink: '/settings/gateway/edit',\n component: GatewayEditScreen,\n },\n {\n name: 'GATEWAY DÜZENLE',\n routerLink: '/settings/gateway/edit/:id',\n component: GatewayEditScreen,\n },\n {\n name: 'GATEWAY AYARLARI',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kamera Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Marka',\n key: 'camera_brand_id',\n },\n];\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\n const [selectedCamera, setSelectedCamera] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: 'DÜZENLE',\n url: `/settings/camera/edit/${selectedCamera ? selectedCamera.id : ''}`,\n className: 'orange',\n hidden: !(selectedCamera),\n },\n {\n text: 'Kamera OLUŞTUR',\n url: '/settings/camera/edit',\n className: 'green',\n },\n ], [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 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, isValidURL} 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';\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 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('Lütfen geçerli bir kamera adı giriniz.');\n\n return false;\n }\n\n if (areaOption?.value == null) {\n failure('Lütfen mahal (alan) seçiniz.');\n\n return false;\n }\n\n if (cameraBrandModel == null || cameraBrandModel.value == null) {\n failure('Lütfen geçerli bir marka/model seçiniz.');\n\n return false;\n }\n\n if(!(useMJPEG || useVideoCGI || useRTSP)){\n failure('Lütfen en az bir protokol seçiniz.');\n\n return false;\n }\n\n if (!isValidIP(ip)) {\n failure('Lütfen geçerli bir IP adresi giriniz.');\n\n return false;\n }\n\n if (cameraBrandModel.value.authentication_required) {\n if (!isValidString(username)) {\n failure('Lütfen geçerli bir kullanıcı adı giriniz.');\n\n return false;\n }\n\n if (!isValidString(password)) {\n failure('Lütfen geçerli bir şifre giriniz.');\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.rtsp && useRTSP) {\n if (!isValidPort(rtspPort)) {\n failure('Lütfen geçerli bir RTSP portu giriniz.');\n\n return false;\n }\n\n if (!isValidPort(rtspRemotePort)) {\n failure('Lütfen geçerli bir RTSP Remote portu giriniz.');\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.mjpeg && useMJPEG) {\n if (!isValidPort(mjpegPort)) {\n failure('Lütfen geçerli bir MJPEG portu giriniz.');\n\n return false;\n }\n\n if (!isValidPort(mjpegRemotePort)) {\n failure('Lütfen geçerli bir MJPEG Remote portu giriniz.');\n\n return false;\n }\n }\n\n if (cameraBrandModel.value.video_cgi && useVideoCGI) {\n if (!isValidPort(videoCGIPort)) {\n failure('Lütfen geçerli bir VideoCGI portu giriniz.');\n\n return false;\n }\n\n if (!isValidPort(videoCGIRemotePort)) {\n failure('Lütfen geçerli bir VideoCGI Remote portu giriniz.');\n\n return false;\n }\n }\n return true;\n }, [\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('Cihaz başarılı bir şekilde ' + (cameraModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n }, [\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('Silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteCamera(selected.id)\n .then(() => {\n success('Kamera başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'KAMERA OLUŞTUR',\n routerLink: '/settings/camera/edit',\n component: CameraEditScreen,\n },\n {\n name: 'KAMERA DÜZENLE',\n routerLink: '/settings/camera/edit/:id',\n component: CameraEditScreen,\n },\n {\n name: 'KAMERA AYARLARI',\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\n if (occupiedBySelected || !occupied) {\n list.push({\n value: 0,\n label: bridgeDeviceType.has_home_page === true ?\n 'Anasayfa' :\n '0',\n });\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, 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';\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: 'Kapat(Dur)',\n },\n {\n value: 1,\n label: 'Aç(Yukarı)',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n {\n value: 3,\n label: 'Aç/Kapat',\n },\n ],\n simple: [\n {\n value: 0,\n label: 'Kapat',\n },\n {\n value: 1,\n label: 'Aç',\n },\n ],\n three_phase: [\n {\n value: 0,\n label: 'Dur',\n },\n {\n value: 1,\n label: 'Yukarı',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n ],\n two_phase: [\n {\n value: 1,\n label: 'Yukarı',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n ],\n pulse: [\n {\n value: 0,\n label: 'Pasif',\n },\n {\n value: 1,\n label: 'Aktif',\n },\n ],\n};\n\nconst ALARM_LEVEL_LIST: SelectItem[] = [\n {\n value: 1,\n label: 'Seviye 1',\n },\n {\n value: 2,\n label: 'Seviye 2',\n },\n {\n value: 3,\n label: 'Seviye 3',\n },\n];\n\nconst SIREN_LEVEL_LIST: SelectItem[] = [\n {\n value: 0,\n label: 'Hepsi',\n },\n {\n value: 1,\n label: 'Seviye 1',\n },\n {\n value: 2,\n label: 'Seviye 2',\n },\n {\n value: 3,\n label: 'Seviye 3',\n },\n];\n\nconst SIREN_LIST: SelectItem[] = [\n {\n value: 0,\n label: 'İnaktif',\n },\n {\n value: 1,\n label: 'Fasılalı',\n },\n {\n value: 2,\n label: 'Sürekli',\n },\n];\n\nconst HEATING_MODE_LIST: SelectItem[] = [\n {\n value: 1,\n label: 'Isıtma',\n },\n {\n value: 2,\n label: 'Soğutma',\n },\n {\n value: 3,\n label: 'Isıtma/Soğutma',\n },\n];\n\nexport const NO_OUTPUT_OPTION: SelectItem = {value: 99, label: 'Çıkış Verme'};\n\ntype ALARM_CONTROL_VALUE = {\n id: string;\n isVirtual: boolean;\n};\n\nexport const ControlEditScreen = memo(function ControlEditScreen() {\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 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: 'Çıkış verme', value: {\n id: undefined,\n isVirtual: false,\n bridgeDeviceId: '',\n glassControlParameters: undefined,\n control: undefined,\n },\n });\n\n return controls;\n },\n [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);\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: `Çıkış ${i.toString()}${isUsedOutput ? '*' : ''}`});\n }\n\n return list;\n }, [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);\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({value: i, label: `Çıkış ${i.toString()} - ${(i + 1).toString()}${isUsedOutput ? '*' : ''}`});\n }\n\n return list;\n }, [bridgeDeviceType, usedOutputList, selected?.parameters]);\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 const thermostatBridgeDeviceType = useMemo(() => thermostatBridgeDevice == null ? null : bridgeDeviceTypeSet[thermostatBridgeDevice.value.type_id],\n [thermostatBridgeDevice, bridgeDeviceTypeSet]);\n // noinspection JSUnusedLocalSymbols\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 || '');\n const [minValue, setMinValue] = useState((selected?.parameters as DimmerControlParameters)?.min_limit?.toString()\n || '');\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 [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 [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 [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\n const defaultValueOptionList = useMemo(() => {\n if (!controlType) {\n return [];\n }\n\n return CONTROL_TYPE_VALUE_MAP[controlType.value.render_type];\n }, [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('Kontrol başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n }, [failure, rpc, success, onBackPressed, selected?.id]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure('Lütfen kontrol adı giriniz.');\n\n return false;\n }\n\n if (bridgeDevice?.value == null) {\n failure('Lütfen cihaz seçiniz.');\n\n return false;\n }\n\n if (controlType == null) {\n failure('Lütfen kontrol tipi seçiniz.');\n\n return false;\n }\n\n if (areaOption?.value == null) {\n failure('Lütfen alan seçiniz.');\n\n return false;\n }\n\n if (controlType.value.id === CONTROL_TYPE_ID_ALARM) {\n if (alarmControlOption?.value == null) {\n failure('Lütfen kontrol seçiniz.');\n\n return false;\n }\n\n if (alarmSirenOption?.value == null) {\n failure('Lütfen siren seçiniz.');\n\n return false;\n }\n\n if (alarmLevelOption?.value == null) {\n failure('Lütfen alarm seviyesi seçiniz.');\n\n return false;\n }\n\n if (!isValidDuration(alarmDelaySeconds)) {\n failure('Lütfen geçerli gecikme süresi giriniz.');\n\n return false;\n }\n } else if (controlType.value.id === CONTROL_TYPE_ID_SIREN) {\n if (outputNumber?.value == null) {\n failure('Lütfen çıkış no seçiniz.');\n\n return false;\n }\n\n if (sirenLevelOption?.value == null) {\n failure('Lütfen alarm seviyesi seçiniz.');\n\n return false;\n }\n } else if (controlType.value.id === CONTROL_TYPE_ID_THERMOSTAT) {\n if (isBridgeDeviceTypeIO && thermostatBridgeDevice?.value == null) {\n failure('Lütfen sensöz cihazı seçiniz.');\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(`${bridgeDevice.value.name} adlı cihaza daha önce termostat (${foundControl.control.name}) eklendi.`);\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('Lütfen soğuk çıkış no seçiniz.');\n\n return false;\n }\n }\n\n\n if (heatingModeOption?.value === 1 || heatingModeOption?.value === 3) {\n if (outputNumber?.value == null) {\n failure('Lütfen sıcak çıkış no seçiniz.');\n\n return false;\n }\n }\n } else {\n if (outputNumber?.value == null) {\n failure('Lütfen çıkış no seçiniz.');\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('Lütfen çıkış no seçiniz.');\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure('Lütfen varsayılan değer seçiniz.');\n\n return false;\n }\n break;\n case 'two_phase':\n case 'three_phase':\n if (outputNumber?.value == null) {\n failure('Lütfen yukarı çıkış no seçiniz.');\n\n return false;\n }\n\n if (downOutputNumber?.value == null) {\n failure('Lütfen aşağı çıkış no seçiniz.');\n\n return false;\n }\n\n if (outputNumber.value !== NO_OUTPUT_OPTION.value &&\n outputNumber.value === downOutputNumber.value) {\n failure('Yukarı ve aşağı çıkış numaraları aynı olamaz.');\n\n return false;\n }\n\n if (!isValidDuration(outputDurationLimitSeconds)) {\n failure('Lütfen geçerli bir çıkış süre limiti yazınız.');\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure('Lütfen varsayılan değer seçiniz.');\n\n return false;\n }\n\n break;\n case 'pulse':\n if (outputNumber?.value == null) {\n failure('Lütfen yukarı çıkış no seçiniz.');\n\n return false;\n }\n\n if (!isValidPulseDuration(pulseDuration)) {\n failure('Lütfen geçerli pulse süresi giriniz.');\n\n return false;\n }\n\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure('Lütfen varsayılan değer seçiniz.');\n\n return false;\n }\n\n break;\n case 'complex':\n if (!rememberLastValue && defaultValueOption?.value == null) {\n failure('Lütfen varsayılan değer seçiniz.');\n\n return false;\n }\n\n failure('Tanımsız kontrol tipi.');\n\n return false;\n default:\n break;\n }\n } else {\n if (bridgeDeviceType?.button_count > 0) {\n if (buttonNumber?.value == null) {\n failure('Lütfen buton numarası seçiniz.');\n\n return false;\n }\n }\n\n switch (controlType.value.render_type) {\n case 'simple':\n if (outputNumber?.value == null) {\n failure('Lütfen çıkış no seçiniz.');\n\n return false;\n }\n\n break;\n case 'two_phase':\n case 'three_phase':\n if (doubledOutputNumber?.value == null) {\n failure('Lütfen çıkış no seçiniz.');\n\n return false;\n }\n\n if (!isValidDuration(outputDurationLimitSeconds)) {\n failure('Lütfen geçerli bir çıkış süre limiti yazınız.');\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('Lütfen çıkış no seçiniz.');\n\n return false;\n }\n\n if (!isValidMaxDimmerValue(maxValue)) {\n failure('Lütfen geçerli maksimum değer giriniz.');\n\n return false;\n }\n\n if (!isValidMinDimmerValue(minValue)) {\n failure('Lütfen geçerli minimum değer giriniz.');\n\n return false;\n }\n\n if (Number(maxValue) <= Number(minValue)) {\n failure('Maksimum değer minimum değerden büyük olmak zorundadır.');\n\n return false;\n }\n } else {\n failure('Tanımsız kontrol tipi.');\n\n return false;\n }\n\n break;\n default:\n break;\n }\n }\n }\n\n return true;\n }, [\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) {\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('Tanımsız kontrol tipi.');\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('Kontrol başarılı bir şekilde ' + (selected?.id == null ? 'kaydedildi.' : 'düzenlendi.'));\n onBackPressed();\n }\n })\n .catch(failure);\n }, [\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 `${selected?.name} ile beraber ${message} silinecektir. Devam edilsin mi?`}\n onPress={onDeletePressed}/>,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 }, [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 && 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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kontrol Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Cihaz',\n key: 'bridge_device_id',\n },\n {\n length: 3,\n name: 'Kontrol Tipi',\n key: 'type_id',\n },\n {\n length: 1,\n name: 'Çıkış',\n key: 'output_number',\n },\n];\n\nconst keyExtractor = (item: ControlModel) => item.id;\n\nexport const ControlListScreen = memo(function ControlListScreen() {\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: 'KOPYALA',\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedControl),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/control/edit/${selectedControl ? selectedControl.id : ''}`,\n className: 'orange',\n hidden: !(selectedControl),\n },\n {\n text: 'Kontrol OLUŞTUR',\n url: '/settings/control/edit',\n className: 'green',\n },\n ], [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 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 name: 'KONTROL OLUŞTUR',\n routerLink: '/settings/control/edit',\n component: ControlEditScreen,\n },\n {\n name: 'KONTROL DETAY',\n routerLink: '/settings/control/edit/:id',\n component: ControlEditScreen,\n },\n {\n name: 'KONTROL AYARLARI',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'İnterkom Adı',\n key: 'name',\n },\n {\n length: 1,\n name: 'SIP',\n key: 'sip_id',\n },\n {\n length: 3,\n name: 'Kapılar',\n key: 'door_id_list',\n },\n];\n\nconst keyExtractor = (item: IntercomModel) => item.id;\n\nexport const IntercomListScreen = memo(function IntercomListScreen() {\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: 'DÜZENLE',\n url: `/settings/intercom/edit/${selectedIntercom ? selectedIntercom.id : ''}`,\n className: 'orange',\n hidden: !(selectedIntercom),\n },\n {\n text: 'İnterkom OLUŞTUR',\n url: '/settings/intercom/edit',\n className: 'green',\n },\n ], [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 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';\n\nconst BACK_URL = '/settings/intercom';\n\nexport const IntercomEditScreen = memo(function IntercomEditScreen() {\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('Lütfen geçerli bir interkom adı giriniz.');\n\n return false;\n }\n\n if (cameraOption?.value == null) {\n failure('Lütfen geçerli bir kamera seçiniz.');\n\n return false;\n }\n\n if (!isValidSIPNo(sipID)) {\n failure('Lütfen geçerli bir SİP no giriniz.');\n\n return false;\n }\n\n if (selectedDoorOptionList.length === 0) {\n failure('Lütfen kapı seçiniz.');\n\n return false;\n }\n\n return true;\n }, [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('İnterkom başarılı bir şekilde ' + (intercomModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n }, [\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('İnterkom silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteIntercom(selected.id)\n .then(() => {\n success('İnterkom başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'İNTERKOM AYARLARI',\n routerLink: '/settings/intercom',\n component: IntercomListScreen,\n },\n {\n name: 'İNTERKOM DÜZENLE',\n routerLink: '/settings/intercom/edit/:id',\n component: IntercomEditScreen,\n },\n {\n name: 'İNTERKOM OLUŞTUR',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kapı Adı',\n key: 'name',\n },\n {\n length: 1,\n name: 'Marka',\n key: 'door_brand_id',\n },\n {\n length: 2,\n name: 'URL',\n key: 'door_path',\n },\n];\n\nconst keyExtractor = (item: DoorModel) => item.id;\n\nexport const DoorListScreen = memo(function DoorListScreen() {\n const [rpc] = useRPC();\n\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: 'TEST',\n onClick: onTestClick,\n className: 'blue',\n hidden: !(selectedDoor),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/door/edit/${selectedDoor ? selectedDoor.id : ''}`,\n className: 'orange',\n hidden: !(selectedDoor),\n },\n {\n text: 'Kapı OLUŞTUR',\n url: '/settings/door/edit',\n className: 'green',\n },\n ], [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 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';\n\nconst BACK_URL = '/settings/door';\n\nexport const DoorEditScreen = memo(function DoorEditScreen() {\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('Lütfen geçerli bir kapı adı giriniz.');\n\n return false;\n }\n\n if (doorBrandOption == null) {\n failure('Lütfen geçerli bir kapı markası seçiniz.');\n\n return false;\n }\n\n if (doorPath == null || doorPath.length === 0) {\n failure('Lütfen geçerli bir URL giriniz.');\n\n return false;\n }\n\n if (!isValidDoorNumber(doorNumber)) {\n failure('Lütfen geçerli bir kapı numarası giriniz.');\n\n return false;\n }\n\n if (username == null || username.length === 0) {\n failure('Lütfen geçerli bir kullanıcı adı giriniz.');\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure('Lütfen geçerli bir şifre giriniz.');\n\n return false;\n }\n\n return true;\n }, [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('Kapı başarılı bir şekilde ' + (doorModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n }, [\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('Kapı başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n }, [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 `${selected?.name} ile birlikte ${message} silinecektir. Devam edilsin mi?`}\n onPress={onDeletePressed}/>,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n }], [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 name: 'KAPI AYARLARI',\n routerLink: '/settings/door',\n component: DoorListScreen,\n },\n {\n name: 'KAPI DÜZENLE',\n routerLink: '/settings/door/edit/:id',\n component: DoorEditScreen,\n },\n {\n name: 'KAPI OLUŞTUR',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Oda Adı',\n key: 'name',\n },\n {\n length: 3,\n name: 'Kat Adı',\n key: 'floorName',\n },\n];\n\nconst keyExtractor = (item: AreaModel) => item.id;\n\nexport const RoomListScreen = memo(function RoomListScreen() {\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: 'DÜZENLE',\n url: `/settings/floor/${selectedFloor.id}/room/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: 'ODA OLUŞTUR',\n url: `/settings/floor/${selectedFloor.id}/room/edit`,\n className: 'green',\n },\n ], [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 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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Alan Adı',\n key: 'name',\n },\n {\n length: 3,\n name: 'Tipi',\n key: 'type',\n },\n];\n\nconst keyExtractor = (item: AreaModel) => item.id;\n\nexport const AREA_TYPES = {\n 'floor': 'Kat',\n 'place': 'Mahal',\n};\n\nexport const AreaListScreen = memo(function AreaListScreen() {\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: 'ODA LİSTESİ',\n className: 'blue',\n url: selected != null ? `/settings/floor/${selected.id}/room` : '',\n hidden: !(selected && selected.type === 'floor'),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/area/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: 'ALAN OLUŞTUR',\n url: '/settings/area/edit',\n className: 'green',\n },\n ], [selected]);\n\n const displayNameExtractor = useCallback((item: AreaModel, column: ColumnModel) => {\n if (column.key === 'type') {\n return AREA_TYPES[item.type] || '-';\n }\n\n return item[column.key];\n }, []);\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';\n\nexport const RoomEditScreen = memo(function RoomEditScreen() {\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('Lütfen geçerli bir ad giriniz.');\n\n return false;\n }\n\n if (floor == null || floor.value == null) {\n failure('Lütfen kat seçiniz.');\n\n return false;\n }\n\n return true;\n }, [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('Oda başarılı bir şekilde ' + (areaModel.id == null ? 'oluşturuldu.' : 'düzenlendi.'));\n onBackPressed();\n }).catch(failure);\n }, [\n selected,\n isFieldsValid,\n name,\n floor,\n success,\n failure,\n onBackPressed,\n rpc,\n ]);\n\n const onDeletePressed = useCallback(() => {\n question('Odayı silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteArea(selected.id)\n .then(() => {\n success(`Oda başarılı bir şekilde silindi.`);\n onBackPressed();\n })\n .catch(failure);\n });\n }, [failure, onBackPressed, question, rpc, selected, success]);\n\n const buttons = useMemo(() =>\n [\n {\n text: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: backURL,\n },\n ], [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';\n\nconst BACK_URL = '/settings/project-information';\n\nconst TYPE_OPTION_LIST: SelectItem[] =\n Object.entries(AREA_TYPES).map(([type, name]) => ({value: type, label: name}));\n\nexport const AreaEditScreen = memo(function AreaEditScreen() {\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('Lütfen tip seçiniz.');\n\n return false;\n }\n\n if (name == null || name.length === 0) {\n failure('Lütfen geçerli bir ad giriniz.');\n\n return false;\n }\n\n return true;\n }, [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(`${type.label} başarı bir şekilde ${areaModel.id == null ? 'oluşturuldu' : 'düzenlendi'}.`);\n onBackPressed();\n }).catch(failure);\n }, [\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(`${selected.name} başarılı bir şekilde silindi.`);\n onBackPressed();\n })\n .catch(failure);\n }, [failure, onBackPressed, rpc, selected, success]);\n\n const buttons = useMemo(() => [\n {\n component: selected == null ? null :\n `${selected?.name} ile birlikte ${message} silinecektir. Devam edilsin mi?`}\n onPress={onDeletePressed}/>,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n }], [selected, onSavePressed, onDeletePressed],\n );\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 name: 'Proje Bilgileri',\n routerLink: '/settings/project-information',\n component: AreaListScreen,\n },\n {\n name: 'Alan Oluştur',\n routerLink: '/settings/area/edit',\n component: AreaEditScreen,\n },\n {\n name: 'Alan Detay',\n routerLink: '/settings/area/edit/:id',\n component: AreaEditScreen,\n },\n {\n name: 'Oda Listesi',\n routerLink: '/settings/floor/:id/room',\n component: RoomListScreen,\n },\n {\n name: 'Oda Oluştur',\n routerLink: '/settings/floor/:floor_id/room/edit',\n component: RoomEditScreen,\n },\n {\n name: 'Oda Detay',\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';\n\ntype MediaInputExtendedModel = MediaInputModel & { bridge_device_name: string; };\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kumanda Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Slot',\n key: 'slot',\n },\n {\n length: 3,\n name: 'Cihaz Adı',\n key: 'bridge_device_name',\n },\n];\n\nconst keyExtractor = (item: MediaInputExtendedModel) => item.id;\n\nexport const MediaInputListScreen = memo(function MediaInputListScreen() {\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: 'DÜZENLE',\n url: `/settings/media/edit/${selectedMediaInput ? selectedMediaInput.id : ''}`,\n className: 'orange',\n hidden: !(selectedMediaInput),\n },\n {\n text: 'KUMANDA OLUŞTUR',\n url: '/settings/media/edit',\n className: 'green',\n },\n ], [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 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';\n\nconst BACK_URL = '/settings/media';\n\nconst CONTROL_TYPE_VALUE_MAP: Record[]> = {\n complex: [\n {\n value: 0,\n label: 'Kapat(Dur)',\n },\n {\n value: 1,\n label: 'Aç(Yukarı)',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n {\n value: 3,\n label: 'Aç/Kapat',\n },\n ],\n simple: [\n {\n value: 0,\n label: 'Kapat',\n },\n {\n value: 1,\n label: 'Aç',\n },\n {\n value: 3,\n label: 'Aç/Kapat',\n },\n ],\n three_phase: [\n {\n value: 0,\n label: 'Dur',\n },\n {\n value: 1,\n label: 'Yukarı',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n ],\n two_phase: [\n {\n value: 1,\n label: 'Yukarı',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n ],\n pulse: [\n {\n value: 0,\n label: 'Pasif',\n },\n {\n value: 1,\n label: 'Aktif',\n }],\n};\n\nexport const MediaInputEditScreen = memo(function MediaInputEditScreen() {\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('Kumandayı silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteMediaInput(selected.id)\n .then(() => {\n success('Kumanda başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [success, failure, onBackPressed, question, rpc, selected]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (name == null || name.length === 0) {\n failure('Lütfen geçerli bir kumanda isim giriniz.');\n\n return false;\n }\n\n if (bridgeDevice == null) {\n failure('Lütfen geçerli bir cihaz seçiniz');\n\n return false;\n }\n\n if (control == null) {\n failure('Lütfen geçerli bir kontrol seçiniz');\n\n return false;\n }\n\n if (value == null) {\n failure('Lütfen geçerli bir değer seçiniz');\n\n return false;\n }\n\n return true;\n }, [\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('Kumanda başarılı bir şekilde ' + (selected != null ? 'düzenlendi.' : 'kaydedildi.'));\n onBackPressed();\n })\n .catch(e => {\n if (e !== 'cant_read') {\n failure(e);\n }\n });\n }, [\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: 'SİNYAL KAYDET',\n className: 'blue',\n onClick: onRegisterSignalPressed,\n hidden: !(selected),\n doNotBlockUI: true,\n },\n {\n text: 'KUMANDA SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n doNotBlockUI: true,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [onRegisterSignalPressed, onCreatePressed, onDeletePressed, selected]);\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]);\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 name: 'Kumandalar',\n routerLink: '/settings/media',\n component: MediaInputListScreen,\n },\n {\n name: 'Kumanda Düzenle',\n routerLink: '/settings/media/edit/:id',\n component: MediaInputEditScreen,\n },\n {\n name: 'Kumanda Oluştur',\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';\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\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('Evdeyim sayaç süresi geçersiz.');\n\n return;\n }\n\n const outsideTimerValue = Number(outsideTimer);\n if (isNaN(outsideTimerValue) || outsideTimerValue < 0) {\n failure('Dışardayım sayaç süresi geçersiz.');\n\n return;\n }\n\n const firstLevelAlarmCountdownDurationValue = Number(firstLevelAlarmCountdownDuration);\n if (isNaN(firstLevelAlarmCountdownDurationValue) || firstLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 1. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const secondLevelAlarmCountdownDurationValue = Number(secondLevelAlarmCountdownDuration);\n if (isNaN(secondLevelAlarmCountdownDurationValue) || secondLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 2. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const thirdLevelAlarmCountdownDurationValue = Number(thirdLevelAlarmCountdownDuration);\n if (isNaN(thirdLevelAlarmCountdownDurationValue) || thirdLevelAlarmCountdownDurationValue < 0) {\n failure('Alarm 3. seviye geri sayım süresi geçersiz.');\n\n return;\n }\n\n const reactivationDurationAfterResetValue = Number(reactivationDurationAfterReset);\n if (isNaN(reactivationDurationAfterResetValue) || reactivationDurationAfterResetValue < 0) {\n failure('Alarm reset sonrası tekrar aktifleşme süresi geçersiz.');\n\n return;\n }\n\n const sirenIntervalOnDurationValue = Number(sirenIntervalOnDuration);\n if (isNaN(sirenIntervalOnDurationValue) || sirenIntervalOnDurationValue < 0) {\n failure('Siren fasıla on süresi geçersiz.');\n\n return;\n }\n\n const sirenIntervalOffDurationValue = Number(sirenIntervalOffDuration);\n if (isNaN(sirenIntervalOffDurationValue) || sirenIntervalOffDurationValue < 0) {\n failure('Siren fasıla off süresi geçersiz.');\n\n return;\n }\n\n const sirenRepeatCountValue = Number(sirenRepeatCount);\n if (isNaN(sirenRepeatCountValue) || sirenRepeatCountValue < 0) {\n failure('Siren tekrar miktarı geçersiz.');\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 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('Başarılı bir şekilde düzenlendi.');\n onBackPressed();\n });\n }, [\n save,\n success,\n onBackPressed,\n ]);\n\n const onApplyPressed = useCallback(() => {\n const count = bridgeDeviceList.length;\n question(`${count.toString()} cihaza bu ayarlar uygulanacaktır. Devam edilsin mi?`, () => {\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('Başarılı bir şekilde düzenlendi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\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: 'UYGULA',\n className: 'blue',\n onClick: onApplyPressed,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\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 ALARM GERİ SAYIM SÜRELERİ\n
\n \n \n \n
\n ALARM RESET SONRASI DEVREYE GİRME\n
\n \n
\n
\n
\n SİREN FASILA\n
\n \n \n \n
\n ALARM KURULUM SAYAÇ SÜRELERİ\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 name: 'Alarm',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Tip',\n key: 'type',\n },\n {\n length: 3,\n name: 'Sıra',\n key: 'order',\n },\n];\n\nexport const TYPE_NAME_MAP: Record = {\n control: 'Kontrol',\n scenario: 'Senaryo',\n sensor: 'Sensör',\n media: 'Medya',\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\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: 'DÜZENLE',\n url: `/settings/homepage/edit/${selectedHomepageItem ? selectedHomepageItem.id : ''}`,\n className: 'orange',\n hidden: !(selectedHomepageItem),\n },\n {\n text: 'EKLE',\n url: '/settings/homepage/edit',\n className: 'green',\n },\n ], [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 TYPE_NAME_MAP[item.type] || '-';\n } else if (column.key === 'order') {\n return ;\n }\n\n return item[column.key] || '-';\n }, [controlSet, inputSet, scenarioSet, mediaSet, onUpClick, homepageItemModelListSorted.length, onDownClick]);\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';\n\nconst BACK_URL = '/settings/homepage';\n\nconst TYPE_OPTION_LIST: SelectItem[] =\n (Object.entries(TYPE_NAME_MAP) as [HomepageItemType, string][])\n .map(([type, name]) => ({label: name, value: type}));\n\nexport const HomepageEditScreen = memo(function HomepageEditScreen() {\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('Silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteHomepageItem(selectedHomepageItem.id)\n .then(() => {\n success('Başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\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('Lütfen geçerli bir tip seçiniz.');\n\n return false;\n }\n\n if (selectedType.value === 'control' && selectedControlOption == null) {\n failure('Lütfen geçerli bir kontrol seçiniz.');\n\n return false;\n }\n\n if (selectedType.value === 'scenario' && selectedScenarioOption == null) {\n failure('Lütfen geçerli bir senaryo seçiniz.');\n\n return false;\n }\n\n if (selectedType.value === 'sensor' && selectedSensorOption == null) {\n failure('Lütfen geçerli bir sensör seçiniz.');\n\n return false;\n }\n\n if (selectedType.value === 'media' && selectedMediaOption == null) {\n failure('Lütfen geçerli bir kumanda seçiniz.');\n\n return false;\n }\n\n return true;\n }, [\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('Başarılı bir şekilde ' + (homepageItemModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n }, [\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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selectedHomepageItem),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [onCreatePressed, onDeletePressed, selectedHomepageItem]);\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 name: 'Ana Sayfa',\n routerLink: '/settings/homepage',\n component: HomepageListScreen,\n },\n {\n name: 'Ana Sayfa Düzenle',\n routerLink: '/settings/homepage/edit/:id',\n component: HomepageEditScreen,\n },\n {\n name: 'Ana Sayfa ekle',\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 {useSetSelector} from '../../../../../hooks/set-selector';\nimport {useFilterSelector} from '../../../../../hooks/filter-selector';\nimport {useSelector} from 'react-redux';\nimport {SettingInputComponent} from '../../../../../components/Settings/SettingInputComponent';\nimport {SettingReadOnlyRowComponent} from '../../../../../components/Settings/SettingReadOnlyRowComponent';\n\nconst BACK_URL = '/settings/gateway';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'WiFi Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Kanal',\n key: 'channel',\n },\n {\n length: 2,\n name: 'Sinyal Gücü',\n key: 'signal',\n },\n {\n length: 3,\n name: 'Güvenlik',\n key: 'security',\n },\n];\n\nconst keyExtractor = (item: WifiNetworkModel) => item.name;\n\nexport const WiFiListScreen = memo(function WiFiListScreen() {\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('Bağlantı kesildi.');\n }).catch(failure);\n }, [failure, rpc, success, currentGatewayId]);\n\n const buttons = useMemo(() => [\n {\n text: 'BAĞLANTIYI KES',\n className: 'red',\n onClick: onDisconnectPress,\n hidden: !(selectedGateway?.settings?.wifi_settings?.ssid !== '') || !hasWifi,\n },\n {\n text: 'BAĞLAN',\n url: `/settings/gateway/${currentGatewayId != null ? currentGatewayId : ''}/wifi/${selectedWiFiNetwork != null ? selectedWiFiNetwork.name : ''}`,\n className: 'blue',\n hidden: !(selectedWiFiNetwork) || !hasWifi,\n },\n {\n text: 'MANUEL BAĞLAN',\n url: `/settings/gateway/${currentGatewayId != null ? currentGatewayId : ''}/wifi/connect-manuel`,\n className: 'blue',\n hidden: !hasWifi,\n },\n {\n text: 'TARA',\n onClick: onScanClick,\n className: 'green',\n hidden: !hasWifi,\n },\n ], [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 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 name: 'WiFi',\n routerLink: '/settings/gateway/:id/wifi',\n component: WiFiListScreen,\n },\n {\n name: 'WiFi Bağlan',\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';\n\nexport const WiFiConnectScreen = memo(function WiFiConnectScreen() {\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('Lütfen geçerli bir ağ adı giriniz.');\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure('Lütfen geçerli bir şifre giriniz.');\n\n return false;\n }\n\n return true;\n }, [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('Bağlanıldı.');\n onBackPressed();\n })\n .catch(failure);\n }, [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: 'BAĞLAN',\n className: 'green',\n onClick: onConnectPress,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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';\n\nexport const SoundEditScreen = memo(function SoundEditScreen() {\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 name: 'Sound',\n routerLink: '/settings/sound',\n component: SoundEditScreen,\n },\n];\n","import {RouteDefinition} from '../../../routes';\nimport React, {memo} from 'react';\nimport {PasswordContainer} from '../../../components/PasswordContainer';\nimport {SettingsPageContainer} from '../../../components/Settings/SettingsPageContainer';\n\n// todo gecici (don't forget tsx -> ts)\nexport const LanguageSettingsRoutes: RouteDefinition[] = [\n {\n name: 'Language',\n routerLink: '/settings/language',\n component: memo(\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 {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';\n\nconst BACK_URL = '/settings';\n\nexport const LocationEditScreen = memo(function LocationEditScreen() {\n\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('Lütfen bir şehir seçiniz');\n\n return;\n }\n\n return true;\n }, [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('Kaydedildi.');\n onBackPressed();\n })\n .catch(failure);\n }, [city?.value, config, failure, isFieldsValid, onBackPressed, rpc, success, town?.value]);\n\n const buttons = useMemo(() => [\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'Time',\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 name: 'Database',\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';\n\nexport const DatabaseScreen = memo(function TestScreen() {\n const [rpc] = useRPC();\n const {success, failure} = useMessage();\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 rpc.resetDB()\n .then(() => {\n success('');\n })\n .catch(failure);\n }, [rpc, success, failure]);\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 ? 'İNDİRİLİYOR...' : 'VERİTABANI İNDİR'}\n
\n
\n {uploading ? `${fileNameToUpload} YÜKLENİYOR...` : 'VERİTABANI YÜKLE'}\n \n
\n
\n
\n
\n
\n
\n VERİTABANI RESETLE\n
\n
\n
\n
\n \n
\n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {SystemInfoScreen} from './SystemInfoScreen';\n\nexport const SystemInfoSettingsRoutes: RouteDefinition[] = [\n {\n name: 'System Info',\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';\n\nconst BACK_URL = '/settings';\n\nexport const SystemInfoScreen = memo(function SystemInfoScreen() {\n\n const [rpc] = useRPC();\n const {failure} = useMessage();\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: 'YENİLE',\n className: 'green',\n onClick: onRefreshPressed,\n },\n ], [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';\n\nconst columns: ColumnModel[] = [\n {\n length: 2,\n name: 'Slot',\n key: 'slot',\n },\n {\n length: 3,\n name: 'Cihaz Adı',\n key: 'bridge_device_name',\n },\n {\n length: 3,\n name: 'Kontrol Adı',\n key: 'control_name',\n },\n];\n\nconst keyExtractor = (item: VirtualControlModel) => item.id;\n\nexport const VirtualControlListScreen = memo(function VirtualControlListScreen() {\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: 'KOPYALA',\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedVirtualControl),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/virtual-control/edit/${selectedVirtualControl ? selectedVirtualControl.id : ''}`,\n className: 'orange',\n hidden: !(selectedVirtualControl),\n },\n {\n text: 'SANAL K. OLUŞTUR',\n url: '/settings/virtual-control/edit',\n className: 'green',\n },\n ], [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 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';\n\nconst BACK_URL = '/settings/virtual-control';\n\nexport const VirtualControlEditScreen = memo(function VirtualControlEditScreen() {\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('Sanal Kontrol silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteVirtualControl(selected.id)\n .then(() => {\n success('Sanal Kontrol başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [success, failure, onBackPressed, question, rpc, selected]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (bridgeDevice == null) {\n failure('Lütfen geçerli bir cihaz seçiniz');\n\n return false;\n }\n\n if (control == null) {\n failure('Lütfen geçerli bir kontrol seçiniz');\n\n return false;\n }\n\n if (bridgeDeviceType?.button_count > 0) {\n if (buttonNumber?.value == null) {\n failure('Lütfen buton numarası seçiniz.');\n\n return false;\n }\n }\n\n return true;\n }, [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('Sanal kontrol başarılı bir şekilde ' + (selected != null ? 'düzenlendi.' : 'kaydedildi.'));\n onBackPressed();\n }\n }).catch(failure);\n }, [\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: 'SANAL KONTROL SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected) || location.state,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'Sanal Kontrol',\n routerLink: '/settings/virtual-control',\n component: VirtualControlListScreen,\n },\n {\n name: 'Sanal Kontrol Oluştur',\n routerLink: '/settings/virtual-control/edit',\n component: VirtualControlEditScreen,\n },\n {\n name: 'Sanal Kontrol Düzenle',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kapı Marka Adı',\n key: 'name',\n },\n];\n\nconst keyExtractor = (item: DoorBrandModel) => item.id;\n\nexport const DoorBrandListScreen = memo(function DoorBrandListScreen() {\n const doorBrandList = useSelector(state => state.control.doorBrandList);\n\n const [selectedDoorBrand, setSelectedDoorBrand] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: 'DÜZENLE',\n url: `/developer/door-brand/edit/${selectedDoorBrand?.id || ''}`,\n className: 'orange',\n hidden: !(selectedDoorBrand),\n },\n {\n text: 'Kapı Marka OLUŞTUR',\n url: '/developer/door-brand/edit',\n className: 'green',\n },\n ], [selectedDoorBrand]);\n\n const displayNameExtractor = useCallback((item: DoorBrandModel, column: ColumnModel) => {\n return item[column.key] || '-';\n }, []);\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';\n\nconst BACK_URL = '/developer/door-brand';\n\nexport const DoorBrandEditScreen = memo(function DoorBrandEditScreen() {\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('Lütfen geçerli bir kamera adı giriniz.');\n\n return false;\n }\n\n return true;\n }, [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('Kapı markası başarılı bir şekilde ' + (doorBrandModel.id ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n }, [\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(`${filteredDoorList[0].name} isimli kapı bu markayı kullanıyor. Lütfen kapıyı güncelleyip tekrar deneyiniz.`);\n } else {\n failure(`${filteredDoorList[0].name} isimli kapı ve diğer kapılar (${filteredDoorList.length - 1} adet) bu markayı kullanıyor. Lütfen kapıları güncelleyip tekrar deneyiniz.`);\n }\n\n return;\n }\n\n question('Silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteDoorBrand(selected.id)\n .then(() => {\n success('Kapı markası başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'KAPI MARKA AYARLARI',\n routerLink: '/developer/door-brand',\n component: DoorBrandListScreen,\n },\n {\n name: 'KAPI MARKA DÜZENLE',\n routerLink: '/developer/door-brand/edit/:id',\n component: DoorBrandEditScreen,\n },\n {\n name: 'KAPI MARKA OLUŞTUR',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'İnput Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Cihaz',\n key: 'bridge_device_id',\n },\n {\n length: 2,\n name: 'Tipi',\n key: 'type_id',\n },\n {\n length: 1,\n name: 'Giriş',\n key: 'input_number',\n },\n];\n\nconst keyExtractor = (item: InputModel) => item.id;\n\nexport const InputListScreen = memo(function InputListScreen() {\n\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: 'KOPYALA',\n onClick: onCopyClick,\n className: 'blue',\n hidden: !(selectedInput),\n },\n {\n text: 'DÜZENLE',\n url: `/settings/input/edit/${selectedInput ? selectedInput.id : ''}`,\n className: 'orange',\n hidden: !(selectedInput),\n },\n {\n text: 'İnput OLUŞTUR',\n url: '/settings/input/edit',\n className: 'green',\n },\n ], [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 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, useLocation} 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';\n\nconst BACK_URL = '/settings/input';\n\nconst DIRECTION_OPTION_LIST: SelectItem[] = [\n {\n value: 0,\n label: 'Kapat(Dur)',\n },\n {\n value: 1,\n label: 'Aç(Yukarı)',\n },\n {\n value: 2,\n label: 'Aşağı',\n },\n {\n value: 3,\n label: 'Aç/Kapat',\n },\n];\n\ntype CONTROL_VALUE = {\n id: string;\n isVirtual: boolean;\n};\n\nexport const InputEditScreen = memo(function InputEditScreen() {\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: 'GİRİŞ ' + i.toString()});\n }\n\n return list;\n }, [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, 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('İnputu silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteInput(selected.id)\n .then(() => {\n success('İnput başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\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('Lütfen isim giriniz.');\n\n return false;\n }\n\n if (bridgeDevice?.value == null) {\n failure('Lütfen cihaz seçiniz.');\n\n return false;\n }\n\n if (inputType?.value == null) {\n failure('Lütfen input tipi seçiniz.');\n\n return false;\n }\n\n if (inputNumber?.value == null) {\n failure('Lütfen giriş seçiniz.');\n\n return false;\n }\n\n if (inputType.value.id !== INPUT_TYPE_ID_SCENARIO) {\n if (direction?.value == null) {\n failure('Lütfen yön seçiniz.');\n\n return false;\n }\n\n if (controlOption?.value == null) {\n failure('Lütfen kontrol seçiniz.');\n\n return false;\n }\n\n if (inputType.value.id === INPUT_TYPE_ID_SENSOR) {\n if (sensorTypeOption?.value == null) {\n failure('Lütfen sensör tipi seçiniz.');\n\n return false;\n }\n }\n }\n\n return true;\n }, [\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('Kontrol başarılı bir şekilde kaydedildi.');\n }\n\n onBackPressed();\n }, [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 'İnput başarılı bir şekilde düzenlendi.' :\n previousLocationSelectedControl?.id == null ?\n 'İnput başarılı bir şekilde kaydedildi.' :\n 'Kontrol ve input başarılı bir şekilde kaydedildi.';\n success(message);\n onBackPressed();\n }).catch(failure);\n }, [\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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selected?.id),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n onClick: onGoBackPressed,\n },\n ], [\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 ' sensörü' :\n ' anahtarı';\n setName(previousLocationSelectedControl.name + nameSuffix);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [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 name: 'İNPUT OLUŞTUR',\n routerLink: '/settings/input/edit',\n component: InputEditScreen,\n },\n {\n name: 'İNPUT DETAY',\n routerLink: '/settings/input/edit/:id',\n component: InputEditScreen,\n },\n {\n name: 'İNPUT AYARLARI',\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';\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 return (\n \n
\n \"\"/\n {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: 'Kapı Markaları',\n requiredRole: 'developer',\n routerLink: '/door-brand',\n },\n {\n icon: iconDevices,\n title: 'Kontrol Tipleri',\n requiredRole: 'developer',\n routerLink: '/control-type',\n },\n {\n icon: iconDevices,\n title: 'Cihaz Tipleri',\n requiredRole: 'developer',\n routerLink: '/bridge-device-type',\n },\n {\n icon: iconDevices,\n title: 'İnput Tipleri',\n requiredRole: 'developer',\n routerLink: '/input-type',\n },\n {\n icon: iconDevices,\n title: 'Kmr. Markaları',\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',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kontrol Tip Adı',\n key: 'name',\n },\n {\n length: 2,\n name: 'Render Type',\n key: 'render_type',\n },\n {\n length: 2,\n name: 'Anasayfada Gör.',\n key: 'show_on_homepage',\n },\n {\n length: 2,\n name: 'Kontrol Sayısı',\n key: 'bridge_device_type_count',\n },\n];\n\nconst keyExtractor = (item: ControlTypeModel) => item.id;\n\nexport const ControlTypeListScreen = memo(function ControlTypeListScreen() {\n\n const controlTypeList = useSelector(state => state.control.controlTypeList);\n\n const [selectedControlType, setSelectedControlType] = useState>(null);\n\n const buttons = useMemo(() => [\n {\n text: 'DÜZENLE',\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 ], [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 ? 'Evet' : 'Hayır';\n }\n\n return item[column.key] || '-';\n }, []);\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';\n\nconst BACK_URL = '/developer/control-type';\n\nconst GLASS_DEVICE_INTERNAL_ICON_ID_OPTION_LIST: SelectItem[] = [\n {\n label: 'İKON YOK',\n value: -1,\n },\n {\n label: 'blinds',\n value: 0,\n },\n {\n label: 'combi boiler',\n value: 1,\n },\n {\n label: 'dimmer',\n value: 2,\n },\n {\n label: 'aircond energy',\n value: 3,\n },\n {\n label: 'light',\n value: 7,\n },\n {\n label: 'plug',\n value: 8,\n },\n {\n label: 'irrigation',\n value: 9,\n },\n {\n label: 'contactor',\n value: 12,\n },\n {\n label: 'water valve',\n value: 13,\n },\n {\n label: 'Gas Valve',\n value: 32,\n },\n];\n\nexport const ControlTypeEditScreen = memo(function ControlTypeEditScreen() {\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\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('Lütfen isim giriniz.');\n\n return false;\n }\n\n if (glassDeviceInternalIconId.value == null) {\n failure('Lütfen cam cihaz ikon seçiniz.');\n\n return false;\n }\n\n return true;\n }, [\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('Kontrol tipi başarılı bir şekilde ' + (selected == null ? 'kaydedildi.' : 'düzenlendi.'));\n onBackPressed();\n }).catch(failure);\n }, [\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: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'KONTROL TİP OLUŞTUR',\n routerLink: '/developer/control-type',\n component: ControlTypeListScreen,\n },\n {\n name: 'KONTROL OLUŞTUR',\n routerLink: '/developer/control-type/edit',\n component: ControlTypeEditScreen,\n },\n {\n name: 'KONTROL DÜZENLE',\n routerLink: '/developer/control-type/edit/:id',\n component: ControlTypeEditScreen,\n },\n];\n","import React, {memo, useCallback, 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';\n\nconst columns: ColumnModel[] = [\n {\n length: 2,\n name: 'Cihaz Tip Adı',\n key: 'name',\n },\n {\n length: 1,\n name: 'Media?',\n key: 'is_media',\n },\n {\n length: 1,\n name: 'IO / Cam',\n key: 'is_io',\n },\n {\n length: 1,\n name: 'Giriş Sayısı',\n key: 'input_count',\n },\n {\n length: 1,\n name: 'Çıkış Sayısı',\n key: 'output_count',\n },\n];\n\nconst keyExtractor = (item: BridgeDeviceTypeModel) => item.id;\n\nexport const BridgeDeviceTypeListScreen = memo(function BridgeDeviceTypeListScreen() {\n\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 ? 'Evet' : 'Hayır';\n }\n\n return item[column.key];\n }, []);\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 name: 'CİHAZ TİP AYARLARI',\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Kamera Marka Adı',\n key: 'name',\n },\n];\n\nconst keyExtractor = (item: CameraBrandModel) => item.id;\n\nexport const CameraBrandListScreen = memo(function CameraBrandListScreen() {\n\n const cameraBrandList = useSelector(state => state.control.cameraBrandList);\n\n const [selected, setSelected] = useState(null);\n\n const buttons = useMemo(() => [\n {\n text: 'DÜZENLE',\n url: `/developer/camera-brand/edit/${selected ? selected.id : ''}`,\n className: 'orange',\n hidden: !(selected),\n },\n {\n text: 'Kamera Marka OLUŞTUR',\n url: '/developer/camera-brand/edit',\n className: 'green',\n },\n ], [selected]);\n\n const displayNameExtractor = useCallback((item: CameraBrandModel, column: ColumnModel) => {\n return item[column.key] || '-';\n }, []);\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';\n\nconst BACK_URL = '/developer/camera-brand';\n\nexport const CameraBrandEditScreen = memo(function CameraBrandEditScreen() {\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('Lütfen isim giriniz.');\n\n return false;\n }\n\n if (isUSB) {\n return true;\n }\n\n if (!hasRTSP && !hasVideoCGI && !hasMJPEG) {\n failure('Lütfen desteklenen en az bir tip seçin.');\n\n return false;\n }\n\n if (hasRTSP) {\n if (!isValidString(rtsp720p) && !isValidString(rtsp360p)) {\n failure('Lütfen en az bir rtsp stream girin.');\n\n return false;\n }\n }\n\n if (hasVideoCGI) {\n if (!isValidString(videoCGI720p) && !isValidString(videoCGI360p)) {\n failure('Lütfen en az bir video cgi stream girin.');\n\n return false;\n }\n }\n\n if (hasMJPEG) {\n if (!isValidString(mjpeg720p) && !isValidString(mjpeg360p)) {\n failure('Lütfen en az bir mjpeg stream girin.');\n\n return false;\n }\n\n const delayMS = parseInt(mjpegDelayMS);\n if (delayMS < 100) {\n failure('Delay ms 100ms den küçük olamaz.');\n\n return false;\n }\n }\n\n return true;\n }, [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('Kamera markası başarılı bir şekilde ' + (selected?.id == null ? 'kaydedildi.' : 'düzenlendi.'));\n onBackPressed();\n }).catch(failure);\n }, [\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: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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 name: 'Kamera Marka OLUŞTUR',\n routerLink: '/developer/camera-brand/edit',\n component: CameraBrandEditScreen,\n },\n {\n name: 'Kamera Marka DETAY',\n routerLink: '/developer/camera-brand/edit/:id',\n component: CameraBrandEditScreen,\n },\n {\n name: 'Kamera Marka AYARLARI',\n routerLink: '/developer/camera-brand',\n component: CameraBrandListScreen,\n },\n];\n","import React, {memo, useCallback, 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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'İnput Tip Adı',\n key: 'name',\n },\n];\n\nconst keyExtractor = (item: InputTypeModel) => item.id;\n\nexport const InputTypeListScreen = memo(function InputType() {\n\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 return (\n \n \n \n \n \n );\n});\n","import {RouteDefinition} from '../../../routes';\nimport {InputTypeListScreen} from './InputTypeListScreen';\n\nexport const InputTypeSettingsRoutes: RouteDefinition[] = [\n {\n name: 'İnput Tip AYARLARI',\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 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';\n\nconst BACK_URL = '/settings';\n\nconst MACHINE_OPTIONS: SelectItem[] = [\n {\n label: 'Bu Makine',\n value: true,\n },\n {\n label: 'Başka Makine',\n value: false,\n },\n];\n\nexport const ServerSettingsScreen = memo(function ServerSettingsScreen() {\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 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 }, [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('Lütfen bağlanılacak makine seçiniz.');\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('Lütfen geçerli bir adres ip giriniz.');\n\n return false;\n }\n\n if (username == null || username.length === 0) {\n failure('Lütfen kullanıcı adı giriniz.');\n\n return false;\n }\n\n if (password == null || password.length === 0) {\n failure('Lütfen şifre giriniz.');\n\n return false;\n }\n }\n\n return true;\n }, [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('İşlem gerçekleştiriliyor...');\n })\n .catch(failure);\n }, [isFieldsValid, connectToLocalhost?.value, success, rpc, address, username, password, failure]);\n\n const buttons = useMemo(() => [\n {\n text: 'İPTAL',\n className: 'red',\n onClick: onBackPressed,\n },\n {\n text: 'BAĞLAN',\n onClick: onConnectClick,\n className: 'green',\n },\n ], [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 {ServerSettingsScreen} from './ServerSettingsScreen';\n\nexport const ServerSettingsRoutes: RouteDefinition[] = [\n {\n name: 'SUNUCU AYARLARI',\n routerLink: '/settings/server',\n component: ServerSettingsScreen,\n },\n];\n","import {RouteDefinition} from '../../../routes';\nimport {SetDateTimeScreen} from './SetDateTimeScreen';\n\nexport const SetDateTimeRoutes: RouteDefinition[] = [\n {\n name: 'Set DateTime',\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';\n\nconst BACK_URL = '/settings';\n\nexport const SetDateTimeScreen = memo(function SetDateTimeScreen() {\n\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('Lütfen geçerli bir tarih giriniz.');\n\n return;\n }\n\n const pickedDate = new Date(pickedDateString);\n if (!(pickedDate instanceof Date) || isNaN(pickedDate as unknown as number)) {\n failure('Lütfen geçerli bir tarih giriniz.');\n\n return;\n }\n\n if (pickedTimeString === '') {\n failure('Lütfen geçerli bir zaman giriniz.');\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('Kaydedildi.');\n onBackPressed();\n }).catch(failure);\n }, [pickedDateString, pickedTimeString, rpc, onBackPressed, failure, success]);\n\n const buttons = useMemo(() => [\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [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';\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: 'Interkom',\n value: {\n name: 'intercom',\n iconUrl: intercomIcon,\n canSpecial: true,\n },\n },\n {\n label: 'Senaryo',\n value: {\n name: 'scenario',\n iconUrl: scenarioIcon,\n },\n },\n {\n label: 'Medya',\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: 'Sensör',\n value: {\n name: 'sensor',\n iconUrl: sensorIcon,\n },\n },\n {\n label: 'Perde',\n value: {\n name: 'curtain',\n iconUrl: curtainIcon,\n },\n },\n {\n label: 'Lamba',\n value: {\n name: 'lamp',\n iconUrl: lampIcon,\n },\n },\n {\n label: 'Priz',\n value: {\n name: 'plug',\n iconUrl: plugIcon,\n },\n },\n {\n label: 'Klima',\n value: {\n name: 'airConditioner',\n iconUrl: airConditionerIcon,\n },\n },\n {\n label: 'Kamera',\n value: {\n name: 'camera',\n iconUrl: cameraIcon,\n canSpecial: true,\n },\n },\n {\n label: 'Kontaktör',\n value: {\n name: 'contactor',\n iconUrl: contactorIcon,\n },\n },\n {\n label: 'Isıtma',\n value: {\n name: 'temperature',\n iconUrl: temperatureIcon,\n },\n },\n {\n label: 'Ayarlar',\n value: {\n name: 'settings',\n iconUrl: settingsIcon,\n canSpecial: true,\n },\n },\n];\n\nexport const LeftMenuEditScreen = memo(function LeftMenuEditScreen() {\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('Menüyü silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteMenu(selectedMenuItem.id)\n .then(() => {\n success(`Menü başarılı bir şekilde silindi.`);\n onBackPressed();\n })\n .catch(failure);\n });\n }, [failure, onBackPressed, question, rpc, selectedMenuItem, success]);\n\n const isFieldsValid = useCallback((): boolean => {\n if (menuItemName == null || menuItemName.length === 0 || menuItemName.length > 30) {\n failure('Lütfen geçerli bir ad giriniz.');\n\n return false;\n }\n\n if (menuIcon == null) {\n failure('Lütfen bir icon seçiniz.');\n\n return false;\n }\n\n return true;\n }, [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('Menü başarılı bir şekilde ' + (menuEntity.id == null ? 'oluşturuldu.' : 'düzenlendi.'));\n onBackPressed();\n }).catch(failure);\n }, [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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(selectedMenuItem) || selectedMenuItem.is_special,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onSavePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: BACK_URL,\n },\n ], [onDeletePressed, onSavePressed, selectedMenuItem],\n );\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 = leftMenuIconList.find((icon) => icon.value.name === item.icon);\n\n setSelectedMenuItem(item);\n setMenuItemName(item.name);\n setMenuIcon(icon || null);\n }, [menuList, params.id]);\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Adı',\n key: 'name',\n },\n {\n length: 1,\n name: 'Icon',\n key: 'icon',\n },\n {\n length: 3,\n name: 'Sıra',\n key: 'order',\n },\n];\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\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: 'İÇERİĞİ DÜZENLE',\n url: `/settings/left-menu/${selectedMenuItem ? selectedMenuItem.id : ''}/contents/`,\n className: 'blue',\n hidden: !selectedMenuItem || selectedMenuItem.is_special,\n },\n {\n text: 'DÜZENLE',\n url: `/settings/left-menu/edit/${selectedMenuItem ? selectedMenuItem.id : ''}`,\n className: 'orange',\n hidden: !(selectedMenuItem),\n },\n {\n text: 'EKLE',\n url: '/settings/left-menu/edit/',\n className: 'green',\n },\n ], [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 displayNameExtractor = useCallback((item: MenuEntity, column: ColumnModel, index?: number) => {\n if (column.key === 'order') {\n return ;\n }\n if (column.key === 'icon') {\n const icon = leftMenuIconList.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 }, [menuItemList.length, onUpClick, onDownClick]);\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'İçerik',\n key: 'type',\n },\n {\n length: 2,\n name: 'Tip',\n key: 'relational_id',\n },\n {\n length: 3,\n name: 'Sıra',\n key: 'order',\n },\n];\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\nconst mediaTypeOptionsList = [{label: 'Klima', value: 'air'}, {label: 'Diğer', value: 'other'}];\n\nexport const ContentListScreen = memo(function ContentListScreen() {\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: 'DÜZENLE',\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: 'EKLE',\n url: `/settings/left-menu/${params.id}/contents/edit/`,\n className: 'green',\n },\n ], [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 displayNameExtractor = useCallback((item: MenuContent, column: ColumnModel, index?: number) => {\n if (column.key === 'type') {\n switch (item.type) {\n case 'control':\n return 'Kontrol';\n case 'media':\n return 'Medya';\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 }, [controlTypeOptionList, mediaTypeOptionsList, onUpClick, contentListSorted.length, onDownClick]);\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';\n\nexport const TYPE_NAME_MAP: Record = {\n control: 'Kontrol',\n media: 'Medya',\n};\n\nconst TYPE_OPTION_LIST: SelectItem[] =\n (Object.entries(TYPE_NAME_MAP) as [MenuContentType, string][])\n .map(([type, name]) => ({label: name, value: type}));\n\nexport const ContentEditScreen = memo(function ContentEditScreen() {\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: 'Klima', value: 'air'}, {label: 'Diğer', value: 'other'}], []);\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('Lütfen geçerli bir tip seçiniz.');\n\n return false;\n }\n\n if (selectedType.value === 'control') {\n if (selectedControlOption == null) {\n failure('Lütfen geçerli bir kontrol tipi seçiniz.');\n\n return false;\n }\n }\n\n if (selectedType.value === 'media') {\n if (selectedMediaOption == null) {\n failure('Lütfen geçerli bir medya tipi seçiniz.');\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('Bu menü içeriği önceden eklenmiş!');\n\n return false;\n }\n\n return true;\n }, [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('İçeriği silmek istediğinizden emin misiniz?', () => {\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(`İçerik başarılı bir şekilde silindi.`);\n onBackPressed();\n })\n .catch(failure);\n });\n }, [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('Başarılı bir şekilde ' + (params?.type ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n }).catch(failure);\n },\n [\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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: !(params.type),\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: backUrl,\n },\n ], [onDeletePressed, params.type, onCreatePressed, backUrl],\n );\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 name: 'Sol Menü',\n routerLink: '/settings/left-menu',\n component: LeftMenuListScreen,\n },\n {\n name: 'Sol Menü Düzenle',\n routerLink: '/settings/left-menu/edit/:id',\n component: LeftMenuEditScreen,\n },\n {\n name: 'Sol Menü Ekle',\n routerLink: '/settings/left-menu/edit/',\n component: LeftMenuEditScreen,\n },\n {\n name: 'Sol Menü İçerikleri',\n routerLink: '/settings/left-menu/:id/contents/',\n component: ContentListScreen,\n },\n {\n name: 'Sol Menü İçeriği Ekle',\n routerLink: '/settings/left-menu/:menu_id/contents/edit/',\n component: ContentEditScreen,\n },\n {\n name: 'Sol Menü İçeriği Düzenle',\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 name: 'Gateway Yönet',\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';\n\nexport function GatewayControlScreen() {\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(`${selectedGateway.name} kapatılacaktır. Devam edilsin mi?`, () => {\n success('Kapatılıyor...');\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Shutdown);\n });\n }, [\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n const onRestartClick = useCallback(() => {\n question(`${selectedGateway.name} yeniden başlatılacaktır. Devam edilsin mi?`, () => {\n success('Yeniden başlatılıyor...');\n rpc.manageGateway(selectedGateway.id, GatewayCommand.Reboot);\n });\n }, [\n rpc,\n question,\n selectedGateway,\n success,\n ]);\n\n const onSupervisorRestartClick = useCallback(() => {\n question(`${selectedGateway.name} supervisor yeniden başlatılacaktır. Devam edilsin mi?`, () => {\n success('Supervisor yeniden başlatılıyor...');\n rpc.manageGateway(selectedGateway.id, GatewayCommand.RestartSupervisor);\n });\n }, [\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n const onWorkerRestartClick = useCallback(() => {\n question(`${selectedGateway.name} worker yeniden başlatılacaktır. Devam edilsin mi?`, () => {\n success('Worker yeniden başlatılıyor...');\n rpc.manageGateway(selectedGateway.id, GatewayCommand.RestartWorker);\n });\n }, [\n question,\n rpc,\n selectedGateway.id,\n selectedGateway.name,\n success,\n ]);\n\n return (\n \n \n
\n
\n
\n
\n KAPAT\n
\n
\n YENİDEN BAŞLAT\n
\n
\n SUPERVISORU YENİDEN BAŞLAT\n
\n
\n WORKERI YENİDEN BAŞLAT\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';\n\nconst columns: ColumnModel[] = [\n {\n length: 3,\n name: 'Cihaz Adı',\n key: 'name',\n },\n {\n length: 3,\n name: 'Cihaz Tipi',\n key: 'type',\n },\n];\n\nconst keyExtractor = (item: BridgeDeviceModel) => item.id;\n\nexport function STPEditorListScreen() {\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: 'DÜZENLE',\n url: `/settings/stp-editor/${selectedMenuItem ? selectedMenuItem.id : ''}`,\n className: 'blue',\n hidden: !selectedMenuItem,\n },\n ], [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 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';\n\nconst BACK_URL = '/settings/stp-editor';\n\nconst getColumns = (bridgeDeviceTypeId: string): ColumnModel[] => [\n {\n length: 3,\n name: 'Görünen Ad',\n key: 'display_name',\n },\n {\n length: 3,\n name: 'Tip',\n key: 'type',\n },\n ...(bridgeDeviceTypeId === '23' ? [] :\n [{\n length: 1,\n name: 'Sayfa',\n key: 'page_number',\n }]),\n {\n length: 1,\n name: bridgeDeviceTypeId === '23' ? 'Buton' : 'Satır',\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 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: 'DÜZENLE',\n url: `/settings/stp-editor/${selectedDevice?.id}/content/${selectedUiEntity?.id}`,\n className: 'blue',\n hidden: !selectedUiEntity,\n },\n {\n text: 'EKLE',\n url: `/settings/stp-editor/${selectedDevice?.id}/content`,\n className: 'green',\n },\n ], [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 'Grup Kontrol';\n case 'weather':\n return 'Hava Durumu/Saat';\n case 'scenario':\n return 'Senaryo';\n case 'media':\n return 'Medya';\n case 'air':\n return 'Klima';\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 || 'Kontrol';\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) ? 'Anasayfa' : 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 }, [controlList, controlTypeSet, 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, BRIDGE_DEVICE_TYPE_ID_ST, BRIDGE_DEVICE_TYPE_ID_STPM,\n} from '../../../../types/control';\nimport {useControlSelector} from '../../../../hooks/control-selector';\nimport {useQuestion} from '../../../../hooks/question';\n\nconst CONTENT_TYPES: { label: string, value: STPUIType }[] = [\n {label: 'Hava Durumu/Saat', value: 'weather'},\n {label: 'Grup Kontrol', value: 'group'},\n {label: 'Senaryo', value: 'scenario'},\n {label: 'Medya', value: 'media'},\n {label: 'Klima', value: 'air'},\n];\n\nconst GROUP_CONTROL_TYPES = [\n {label: 'Lamba', value: CONTROL_TYPE_ID_LIGHT},\n {label: 'Perde', value: CONTROL_TYPE_ID_CURTAIN},\n {label: 'Priz', value: CONTROL_TYPE_ID_PLUG},\n {label: 'Klima', value: CONTROL_TYPE_ID_AIR_CONDITIONER},\n {label: 'Su Vanası', value: CONTROL_TYPE_ID_VALVE},\n {label: 'Kontaktör', value: CONTROL_TYPE_ID_CONTACTOR},\n];\n\nexport function STPEditorContentEditScreen() {\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 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 [bridgeDeviceType]);\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('Arayüz öğesini silmek istediğinizden emin misiniz?', () => {\n return rpc.deleteSTPUI(currentSTPUIEntity.id)\n .then(() => {\n success('Arayüz öğesi başarılı bir şekilde silindi.');\n onBackPressed();\n })\n .catch(failure);\n });\n }, [\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('Lütfen geçerli bir görünen ad girin.');\n return false;\n }\n\n if (contentType?.value !== 'group' && pageNumber == null) {\n failure('Lütfen bir sayfa seçin.');\n return false;\n }\n\n if (contentType?.value !== 'media' && contentType?.value !== 'air' && rowNumber == null) {\n failure('Lütfen bir satır seçin.');\n return false;\n }\n\n if (contentType?.value === 'group' && groupType == null) {\n failure('Lütfen grup kontrol tipini seçin.');\n return false;\n }\n\n return true;\n }, [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('Arayüz öğesi başarıyla ' + (currentSTPUIEntity ? 'düzenlendi.' : 'oluşturuldu.'));\n onBackPressed();\n })\n .catch(failure);\n }, [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: 'SİL',\n className: 'mulberry-wood',\n onClick: onDeletePressed,\n hidden: currentControl != null || currentSTPUIEntity == null,\n },\n {\n text: 'KAYDET',\n className: 'green',\n onClick: onCreatePressed,\n },\n {\n text: 'İPTAL',\n className: 'red',\n url: backUrl,\n },\n ], [onDeletePressed, currentSTPUIEntity, onCreatePressed, backUrl, currentControl],\n );\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 {\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 name: 'STP Editör',\n routerLink: '/settings/stp-editor',\n component: STPEditorListScreen,\n },\n {\n name: 'STP Cihazı İçerik Listele',\n routerLink: '/settings/stp-editor/:id',\n component: STPEditorContentListScreen,\n },\n {\n name: 'STP Cihazı İçerik Ekle',\n routerLink: '/settings/stp-editor/:device_id/content/',\n component: STPEditorContentEditScreen,\n },\n {\n name: 'STP Cihazı İçerik Düzenle',\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 name: 'Login',\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 ...SetupRoutes,\n ...SensorSettingsRoutes,\n ...MediaSettingsRoutes,\n ...IntercomSettingsRoutes,\n ...CameraSettingsRoutes,\n ...AlarmSettingsRoutes,\n ...SIPSettingsRoutes,\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 name: 'DEVELOPER',\n routerLink: DEVELOPER_URL,\n component: DeveloperSettingsScreen,\n },\n {\n name: 'TEST',\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';\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 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 Cihaza ulaşılamıyor.\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 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';\n\nexport const SensorScreen = memo(function SensorScreen() {\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';\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 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 'Pazar',\n 'Pazartesi',\n 'Salı',\n 'Çarşamba',\n 'Perşembe',\n 'Cuma',\n 'Cumartesi',\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 {onClickHandler} from '../../utils/onclick';\nimport {useRPC} from '../../hooks/rpc';\n\nexport const DateTime = memo(function DateTime() {\n const [counter, setCounter] = useState(0);\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 {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';\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 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('Çıkış yapmak ister misiniz?', () => {\n rpc.doLogout();\n dispatch(clearUserAction());\n removeSession();\n });\n }, [dispatch, question, rpc]);\n\n return (\n
\n
\n \n \n {isBackButtonOpen ? '' : 'MESAJLAR'}\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 Hoşgeldin, {username}\n
\n
\n Çıkış Yap\n
\n ,\n )\n }\n {\n renderIf(username === 'default' && (history.location.pathname === '/settings' || history.location.pathname === '/developer'))(() =>\n
\n Giriş Yap\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';\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\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 = 'Bilinmeyen numara';\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 + ' nolu numara';\n }\n }\n\n if (cameraId) {\n setCameraId(cameraId);\n setNoImage(false);\n } else {\n setNoImage(true);\n }\n\n setName(name);\n }, []);\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('Kapı zili');\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('Kapı zili');\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';\n\n\nexport const PopupScreen = memo(function PopupScreen() {\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 Hayır\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 İptal Et\n
,\n )\n }\n
\n
,\n )\n }\n
\n );\n});\n","import React, {memo, ReactNode} from 'react';\nimport './index.scss';\nimport {Container} from '../Container';\n\ntype Props = {\n isConnected: boolean;\n retryCount: number;\n children?: ReactNode;\n};\n\nconst ConnectionIndicator = memo(function ConnectionIndicator({retryCount}: { retryCount: number }) {\n return (\n \n
\n Bağlantı kurulmaya çalışılıyor.\n {renderIf(retryCount > 4)(() =>\n <>\n
\n Deneme sayısı: {retryCount}\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';\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 = ['Hepsi', 'Alan', 'Tip', '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) => {\n\n const sec = getNumber(1, delay);\n const min = getNumber(60, delay);\n\n let output = '';\n\n if (min !== '') {\n output += `${min} dk `;\n }\n\n if (sec === '') {\n output += '00 sn';\n } else {\n output += `${sec} 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 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' ? 'Çağır' : '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 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 EV\n
\n
setSelected(info, ALARM_VALUE_OUTSIDE))}>\n DIŞ\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 return (\n
\n {\n renderIf(!isPulse)(() => (\n
\n {scenario.info.controlType.render_type === 'pulse' ? 'Çağır' : '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 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 EV\n
\n
\n DIŞ\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 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('Lütfen senaryo ismi giriniz.');\n\n return;\n }\n\n if (!operations || !operations.length) {\n failure('Aksiyon listesi boş olamaz.');\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('Senaryo başarılı bir şekilde ' + (scenarioId.length === 0 ? ' kaydedildi.' : ' düzenlendi.'));\n close();\n } else {\n return Promise.reject();\n }\n })\n .catch(failure);\n }, [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 İPTAL\n
\n
\n \"\"/\n KAYDET\n
\n
\n
\n
\n {\n options.map((option, index) => (\n
setSelectedOrderOption(index))}>\n {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 EKLE\n
\n
\n ))\n }\n
\n
\n
\n {\n operations.map((scenario, index) => (\n \n
\n
\n Gecikme Süresi\n
\n
addDelay(scenario, -10))}>\n -10\n
\n
addDelay(scenario, -1))}>\n -1\n
\n
\n {getDelay(scenario.delay)}\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';\n\nexport const ScenarioPopupScreen = memo(function ScenarioPopupScreen() {\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 `${selectedScenario.name.toUpperCase()} SENARYOSU SİLİNECEK. ONAYLIYOR MUSUNUZ?` :\n `${selectedScenario.name.toUpperCase()} SENARYOSU İLE BİRLİKTE ${message.toUpperCase()} SİLİNECEK. ONAYLIYOR MUSUNUZ?`;\n question(questionMessage, () => {\n return deleteSelected().finally(() => setDeleting(false));\n }, () => setDeleting(false), positiveButton);\n });\n }, [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 ? 'DURDUR' : 'BAŞLAT'}\n
\n
\n \n DÜZENLE\n
\n
\n \n SİL\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';\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 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('Kayıtlı tuş bilgisini silmek istiyor musunuz?', () => {\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 }, [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 return (\n
\n
\n Kanal Tuşlayınız\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 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 'İlgili kumandayı silmek istiyor musunuz?' :\n `${selectedMedia.name} ile beraber ${message} silinecektir. Devam edilsin mi?`;\n question(questionMessage, () => {\n return rpc.deleteMedia(selectedMedia.id).then(() => {\n close();\n success('Kumanda başarıyla silindi.');\n });\n }, undefined, positiveButton);\n });\n }, [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 KAPAT\n
\n {\n renderIf(editMode)(() =>\n
\n \n {'SİL'}\n
,\n )\n }\n
\n \n {editMode ? 'TAMAM' : 'DÜZENLE'}\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';\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 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([false, false, false, false, false, false, false]);\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 if ((triggerType === 'exact' && !valid(timeStr, true)) || (triggerType !== 'exact' && !valid(diffStr, true))) {\n failure('Lütfen geçerli bir saat girin.');\n return;\n }\n\n if (!triggerName || triggerName.length < 3) {\n failure('Lütfen geçerli bir isim girin.');\n return;\n }\n\n if (selectedDays.length === 0) {\n failure('Lütfen en az bir gün seçin.');\n return;\n }\n\n if (!selectedScenario) {\n failure('Lütfen bir senaryo seçin.');\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: selectedDays.map((selected, index) => selected ? index : -1).filter(index => index !== -1),\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 }, [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 İPTAL\n
\n \n
\n \n KAYDET\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 Önce\n beforeAfterClicked(true))}\n />\n \n astronomicalTimeClicked(true))}\n />\n
\n
\n Sonra\n beforeAfterClicked(false))}\n />\n \n astronomicalTimeClicked(false))}\n />\n
\n
\n
\n
\n\n
\n
\n
\n
\n
dayClicked(1))}>\n
\n Pazartesi\n
\n
dayClicked(2))}>\n
\n Salı\n
\n
dayClicked(3))}>\n
\n Çarşamba\n
\n
dayClicked(4))}>\n
\n Perşembe\n
\n
\n
\n
dayClicked(5))}>\n
\n Cuma\n
\n
dayClicked(6))}>\n
\n Cumartesi\n
\n
dayClicked(0))}>\n
\n Pazar\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';\n\nexport const ScenarioTriggerPopupScreen = memo(function ScenarioTriggerPopupScreen() {\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 DÜZENLE\n
\n
setDeleting(true))}>\n \n SİL\n
\n
\n
\n
\n {\n renderIf(isDeleting)(() =>\n
\n
\n \n {selectedTrigger.name.toUpperCase()} TETİKLEYİCİSİ SİLİNECEK.\n ONAYLIYOR MUSUNUZ?\n \n
\n
setDeleting(false))} className=\"scenario-setup-button\">\n
\n \n
\n İPTAL\n
\n
\n
\n \n
\n SİL\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';\n\nexport const ScenarioTriggerControlUpdateScreen = memo(function ScenarioTriggerControlUpdateScreen() {\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 İPTAL\n
\n {selectedTrigger?.name || selectedSTPUIEntity?.display_name}\n
\n \n KAYDET\n
\n
\n
\n
\n
\n
\n setSelectedScenario(null))}>\n
\n \n Hiçbiri\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';\n\nexport const NotFound404 = memo(function NotFound404() {\n\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 Üzgünüz, aradığınız sayfa bulunamadı.\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';\n\nexport const StpUIMediaScreen = memo(function StpUIMediaScreen() {\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 İPTAL\n
\n {selectedStpUIEntity.display_name}\n
\n \n KAYDET\n
\n
\n
\n
\n
\n
\n setSelectedMedia(null))}>\n
\n \n Hiçbiri\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';\n\nconst routes = getRouteList();\n\nexport const App = memo(function App() {\n const dispatch = useDispatch();\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 ? 'Dışarda alarmı kurulu' :\n (alarmRinging ? 'Alarm çalıyor' :\n (role == null ? 'Giriş yapılmamış' :\n (alarmSettingUp ? 'Alarm kuruluyor' :\n 'Bilinmeyen sebep')\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('Lütfen Kumandanızın ilgili tuşuna basınız', false);\n } else if (mediaStatus === 'succeeded') {\n success('Kayıt işlemi başarılı');\n } else if (mediaStatus === 'failed') {\n failure('Kayıt işlemi gerçekleştirilemedi. Tekrar deneyiniz!');\n }\n }, [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 name?: string;\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 name: 'İNTERKOM',\n routerLink: '/intercom',\n component: IntercomScreen,\n exact: true,\n },\n {\n name: 'KAMERA',\n routerLink: '/camera',\n component: CameraScreen,\n exact: true,\n },\n {\n name: 'ALARM',\n routerLink: '/alarm',\n component: AlarmScreen,\n exact: true,\n },\n {\n name: 'SENARYO',\n routerLink: '/scenario',\n component: ScenarioScreen,\n exact: true,\n },\n {\n name: 'SENSÖRLER',\n routerLink: '/sensor',\n component: SensorScreen,\n exact: true,\n },\n\n {\n name: 'MEDYA EKLE',\n routerLink: '/media-remote/create',\n component: MediaCreateScreen,\n },\n ...SettingsRoutes,\n {\n name: 'AYARLAR',\n routerLink: '/settings',\n component: UserSettingsScreen,\n },\n {\n name: 'Page',\n routerLink: '/page/:id',\n component: PageScreen,\n },\n {\n name: 'MEDYA',\n routerLink: '/media-remote',\n component: MediaListScreen,\n },\n // {\n // name: 'PERDE',\n // iconUrl: curtainIcon,\n // routerLink: '/curtain',\n // component: CurtainScreen,\n // showOnSidebar: true,\n // exact: true,\n // },\n // {\n // name: 'AYDINLATMA',\n // iconUrl: lampIcon,\n // routerLink: '/light',\n // component: LightScreen,\n // showOnSidebar: true,\n // exact: true,\n // },\n // {\n // name: 'PRİZ',\n // iconUrl: plugIcon,\n // routerLink: '/plug',\n // component: PlugScreen,\n // showOnSidebar: true,\n // exact: true,\n // },\n // {\n // name: 'KLİMA',\n // iconUrl: airConditionerIcon,\n // routerLink: '/air',\n // component: AirScreen,\n // showOnSidebar: true,\n // exact: true,\n // },\n // {\n // // name: 'SİSTEM',\n // // iconUrl: contactorIcon,\n // // routerLink: '/system',\n // // component: SystemScreen,\n // // showOnSidebar: true,\n // // exact: true,\n // // },\n // // {\n // // name: 'ISITMA',\n // // iconUrl: temperatureIcon,\n // // routerLink: '/temperature',\n // // component: TemperatureScreen,\n // // showOnSidebar: true,\n // // exact: true,\n // // },\n\n];\n","import {\n CameraBrandModel,\n CameraModel,\n ControlModel,\n ControlTypeModel, GlassControlParameters,\n InputModel, InputTypeModel, MediaModel, 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 },\n homepageItemList: [],\n locationList: [],\n menuList: [],\n stpUIList: [],\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};\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};\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 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';\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":""}