{"version":3,"sources":["webpack:///./.storybook/storybook-init-framework-entry.js","webpack:///./.storybook/generated-stories-entry.js","webpack:///\\.)(","webpack:///./src/Accounts/Accounts.stories.tsx","webpack:///./src/ColourScales/ColourScales.stories.tsx","webpack:///./src/ECharts/eCharts.stories.tsx","webpack:///./src/Jobs/Jobs.stories.tsx","webpack:///./src/Logs/Logs.stories.tsx","webpack:///./src/Timeseries/Timeseries.stories.tsx","webpack:///./src/UserGroups/UserGroups.stories.tsx","webpack:///./src/common/Metadata/Metadata.tsx","webpack:///./src/Auth/Auth.stories.tsx","webpack:///./src/Maps/AnimationLayer/helpers.ts","webpack:///./src/Maps/AnimationLayer/AnimationLayer.ts","webpack:///./src/Maps/AnimationControl/AnimationTimeline.tsx","webpack:///./src/Maps/AnimationControl/AnimationPlaybackControls.tsx","webpack:///./src/Maps/AnimationControl/AnimationControl.tsx","webpack:///./src/Maps/Maps.stories.tsx","webpack:///./src/TreeView/styles.ts","webpack:///./src/TreeView/TreeView.tsx","webpack:///./src/TreeView/treeView.stories.tsx","webpack:///./src/Scenarios/ScenarioList/scenarioListConstants.ts","webpack:///./src/Scenarios/Scenarios.stories.tsx","webpack:///./src/Auth/LoginGate.tsx","webpack:///./src/Auth/AuthService.ts","webpack:///./src/theme.tsx","webpack:///./src/utils/Utils.ts","webpack:///./src/ECharts/BaseChart.tsx","webpack:///./src/api/helpers.ts","webpack:///./src/Accounts/Accounts.tsx","webpack:///./src/ColourScales/ColourScale.tsx","webpack:///./src/Timeseries/TimeseriesExporter/TimeseriesExporter.tsx","webpack:///./src/UserGroups/UserGroups.tsx","webpack:///./src/Jobs/JobList/helpers/StatusCell.tsx","webpack:///./src/Jobs/JobList/helpers/helpers.tsx","webpack:///./src/Jobs/JobList/styles.ts","webpack:///./src/Jobs/JobList/helpers/JobDetail.tsx","webpack:///./src/Jobs/JobList/JobList.tsx","webpack:///./src/Timeseries/TreeView/styles.ts","webpack:///./src/Timeseries/TreeView/TreeView.tsx","webpack:///./src/Timeseries/TimeseriesExplorer/styles.ts","webpack:///./src/Timeseries/TimeseriesExplorer/Timeseries.tsx","webpack:///./src/Logs/LogList/helpers.tsx","webpack:///./src/Logs/LogList/useStyles.ts","webpack:///./src/Logs/LogList/LogList.tsx","webpack:///./src/Scenarios/ScenariosOLD/useStyles.tsx","webpack:///./src/Scenarios/ScenariosOLD/Scenarios.tsx","webpack:///./src/api/Accounts/AccountsApi.ts","webpack:///./src/api/Authentication/AuthenticationApi.ts","webpack:///./src/api/Jobs/JobsApi.ts","webpack:///./src/api/JsonDocuments/JsonDocumentsApi.ts","webpack:///./src/api/Logs/LogsApi.ts","webpack:///./src/api/Scenarios/ScenariosApi.ts","webpack:///./src/api/Timeseries/TimeseriesApi.ts","webpack:///./src/api/UserGroups/UserGroupsApi.ts","webpack:///./src/api/Map/MapApi.ts","webpack:///./src/ColourScales/ColourScaleHelper.tsx","webpack:///./src/Scenarios/ScenarioMenu/ScenarioMenu.tsx","webpack:///./src/Scenarios/ScenarioMenuOLD/ScenarioMenu.tsx","webpack:///./src/Auth/LoginForm/useStyles.tsx","webpack:///./src/Auth/LoginForm/LoginForm.tsx","webpack:///./src/Auth/ResetPasswordForm/useStyles.tsx","webpack:///./src/Auth/ResetPasswordForm/ResetPasswordForm.tsx","webpack:///./src/Auth/UpdatePasswordForm/useStyles.tsx","webpack:///./src/Auth/UpdatePasswordForm/UpdatePasswordForm.tsx","webpack:///./src/Auth/Login/Login.tsx","webpack:///./src/Scenarios/Scenarios/useStyles.tsx","webpack:///./src/Scenarios/Scenarios/Scenarios.tsx","webpack:///./src/Scenarios/ScenarioItem/useStyles.tsx","webpack:///./src/Scenarios/ScenarioItem/ScenarioItem.tsx","webpack:///./src/Scenarios/ScenarioItemOLD/useStyles.tsx","webpack:///./src/Scenarios/ScenarioItemOLD/ScenarioItem.tsx","webpack:///./src/Scenarios/ScenarioList/useStyles.tsx","webpack:///./src/Scenarios/ScenarioList/ScenarioList.tsx","webpack:///./src/Scenarios/ScenarioListOLD/useStyles.tsx","webpack:///./src/Scenarios/ScenarioListOLD/ScenarioList.tsx","webpack:///./src/common/Loading/Loading.tsx","webpack:///./src/common/GeneralDialog/GeneralDialog.tsx","webpack:///./src/common/DateInput/DateInput.tsx","webpack:///./src/common/DateFilter/DateFilter.tsx","webpack:///./src/common/Table/Buttons.tsx","webpack:///./src/common/Table/DefaultColumnsTypeProvider.tsx","webpack:///./src/common/Table/ActionsButtons.tsx","webpack:///./src/common/Table/Dialog.tsx","webpack:///./src/common/Table/DeleteDialog.tsx","webpack:///./src/common/Table/MetadataFilter.tsx","webpack:///./src/common/Table/MetatadaFormatter.tsx","webpack:///./src/common/Table/MetadataEditor.tsx","webpack:///./src/common/Table/Popup.tsx","webpack:///./src/common/Table/PopupEditing.tsx","webpack:///./src/common/Table/UsersFormatter.tsx"],"names":["require","configure","module","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","webpackContextKeys","Object","resolve","exports","parameters","title","component","host","AccountsStory","metadata","key","label","type","options","default","regEx","regExError","userGroupsDefaultSelected","showRememberMe","textFieldVariant","token","accessToken","storySource","source","decorators","ColourScalesStory","mode","intervals","height","markers","borderColour","eChartBase","nameTextStyle","fontSize","padding","text","textStyle","color","palette","primary","main","fontFamily","tooltip","legend","data","xAxis","name","nameLocation","yAxis","series","className","chartHeightFunc","window","innerHeight","JobListStory","dataSources","connection","connectionJobLog","disabledColumns","parameter","dateTimeFormat","startTimeUtc","Date","toISOString","timeZone","translations","noEntriesData","noEntriesFilter","onReceived","console","log","LogListStory","setToken","password","subscribe","res","err","frequency","TimeseriesExporterStory","setData","from","to","ids","variant","exportFileName","caption","timeseries","decimals","TimeseriesExplorerEChart","UserGroupStory","useStyles","makeStyles","theme","FormControl","width","marginTop","spacing","switch","chip","Metadata","onChange","onError","classes","multiText","setMultiText","list","setList","error","setError","multiTextField","handleChange","value","regex","RegExp","test","some","v","meta","TextField","fullWidth","margin","helperText","target","InputLabel","Select","defaultValue","item","index","MenuItem","FormControlLabel","control","Switch","checked","undefined","inputProps","Autocomplete","placeholder","values","multiple","renderInput","props","autoComplete","style","length","Typography","i","Box","alignItems","Chip","marginRight","onDelete","handleChipDelete","newList","filter","inputRef","InputProps","endAdornment","Button","onClick","handleMultiText","current","focus","LoginStory","useState","setState","loginButton","userNamePlaceholder","passwordPlaceholder","rememberMeLabel","resetPasswordLabel","resetPasswordButton","updatePasswordEmailPlaceholder","updatePasswordNewPasswordPlaceholder","updatePasswordConfirmPasswordPlaceholder","showResetPassword","resetPasswordMailTemplate","onSuccess","user","UpdatePasswordStory","showUpdatePassword","subcomponents","convertWGS84ToEPSG3857","lon","lat","x","y","Math","tan","PI","initializeState","quickFetchPipeline","this","createImageRetrievalPipeline","mainFetchPipeline","state","currentTimestamp","getTime","timestepLayers","fetchTimestepData","apiHost","connectionString","filename","timesteps","shadingType","itemNumber","scale","context","viewport","nw","unproject","se","epsg3857se","epsg3857nw","bbox","requestBody","currentTimestepRequest","forEach","timestep","idx","currentTimestepIndex","pipelineInput","requestDataSource","requestConfig","join","bboxWGS84","timestepIndex","next","updateState","oldProps","changeFlags","shouldFetchData","dataChanged","propsChanged","self","fetchPipeline","Subject","pipe","debounceTime","switchMap","imageRequest","response","forkJoin","of","json","request","encodedImages","timestepImageData","entries","imageURL","sort","a","b","image","visible","bounds","layer","endsWith","alreadyUpdatedLayerIndex","findIndex","l","alreadyUpdatedLayer","imageData","finaliseState","renderLayers","isVisible","AnimationTimeline","maxTimestepIndex","timestepLabel","onTimestepIndexChange","isHorizontal","isEnabled","display","flexDirection","justifyContent","textAlign","mx","Slider","min","max","disabled","valueLabelDisplay","_","AnimationPlaybackControls","isPlaying","onSkipToStart","onSkipToEnd","onStepBackward","onStepForward","onPlay","onPause","ToggleButtonGroup","size","ToggleButton","AnimationControl","dateTimes","framesPerSecond","dateTimeDisplayFormat","onDateTimeChange","horizontal","hideControls","dateTimePostfix","timezoneOffsetData","timezoneOffsetDisplay","playing","loop","enabled","setTimestepIndex","setIsPlaying","play","pause","updateTimer","setInterval","stepForward","clearInterval","skipToStart","skipToEnd","keepPlaying","prevTimestepIndex","stepBackward","handleTimestepChange","currentTimestepStr","formatCurrentDate","replace","currentDate","parseISO","addHours","formattedDate","format","flexGrow","INITIAL_VIEW_STATE","longitude","latitude","zoom","pitch","bearing","AnimationLayerStory","setCurrentTimestepIndex","flagBoundingBoxUpdate","setFlagBoundingBoxUpdate","isMapLoaded","layers","minZoom","maxZoom","tileSize","renderSubLayers","tile","west","south","east","north","initialViewState","controller","onLoad","onViewStateChange","prev","position","top","left","backgroundColor","handleDateTimeChange","date","indexOf","TreeViewStyles","root","typography","checkbox","DHITreeView","onExpand","onChecked","selected","setSelected","expanded","setExpanded","onNodeToggle","handleExpanded","event","nodeIds","difference","includes","multiSelect","defaultCollapseIcon","KeyboardArrowDown","defaultExpandIcon","ChevronRight","structureLevel","treeViewList","elements","treeList","children","CircularProgress","Checkbox","checkBoxClicked","removeSelection","push","TreeItem","nodeId","TreeViewStory","setLoading","addChildren","childrenList","group","child","assign","slice","d","topLevel","expand","fetchTreeViewChildren","fetchOnCheck","MENU_ITEMS","condition","field","taskId","STATUS","message","Icon","TRANSLATIONS","executeConfirmation","terminateConfirmation","cloneConfirmation","deleteConfirmation","cancelLabel","confirmLabel","ScenariosStory","newScenario","setNewScenario","onAddScenario","queryDates","addDays","align","marginBottom","fontWeight","LoginGate","startIcon","scenarioConnection","jobConnection","dataFilterbyProperty","nameField","descriptionFields","dataType","extraFields","menuItems","onContextMenuClick","menuItem","scenario","onScenarioSelected","onScenarioReceived","onScenariosReceived","scenarios","showDate","showHour","showMenu","showStatus","status","addScenario","ScenariosJSONStory","fullName","dateTime","permissions","principals","operation","actionButton","handleActionButton","Scenarios","signalRConnectionHubUrl","highlightNameOnStatus","debug","AuthService","login","form","onOtpRequired","Array","isArray","firstResponse","accessTokenList","otp","otpAuthenticator","otpRequired","loggedInUser","roles","split","role","trim","setSession","rememberMe","requestResetPassword","mailBody","emailAddress","confirmResetPassword","newPassword","getSession","storage","localStorage","getItem","sessionStorage","userStorage","refreshToken","JSON","parse","expiration","authResult","useLocalStorage","setItem","stringify","isAuthenticated","expirationStorage","expiresAt","logout","removeItem","DHITheme","secondary","dataObjectToArray","getObjectProperty","objectItem","property","query","setObjectProperty","newValue","apply","getDescriptions","scenarioData","descriptions","checkCondition","formattedValue","utcToTz","isInverse","checkConditions","conditions","check","dtoProperty","val","checkStatus","scenarioOLD","scenarioStatus","progress","Number","currentStatus","find","s","queryProp","uniqueId","s4","floor","random","toString","substring","passwordStrength","score","match","calcTimeDifference","beginDate","endDate","hour","minute","isNaN","zonedTimeFromUTC","tzToUtc","utcNow","offsetHours","toISOLocal","z","n","off","getTimezoneOffset","abs","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","zz","getMilliseconds","recursive","obj","fetched","BaseChart","getRefFunc","chartSize","setChartSize","handleResize","addEventListener","removeEventListener","raw","ref","option","DEFAULT_OPTIONS","headers","fetchUrl","endPoint","mergedOptions","additionalHeaders","fetch","statusText","then","DEFAULT_COLUMNS","Accounts","rows","setRows","userGroups","setUserGroups","deletedDialog","setDeletedDialog","deleteRow","setDeleteRow","filteringColumnExtensions","setFilteringColumnExtensions","metadataHeader","reduce","acc","cur","columns","concat","metadataColumnsArray","metadataColumns","usersColumn","defaultColumnsNameArray","column","fetchData","body","ug","selectedRow","showDialog","closeDialog","handleDelete","row","getRowId","columnExtensions","defaultSorting","columnName","direction","onCommitChanges","commitChanges","changedRows","added","changed","deleted","startingAddedId","deletedSet","Set","has","for","showSortingControls","cellComponent","showAddCommand","showEditCommand","showDeleteCommand","commandComponent","popupComponent","allUsers","defaultColumns","onSave","handleSubmit","isNew","hasPassword","ColourScale","colours","fillColor","intervalBreak","intervalIndex","markerStrip","c","flex","border","background","TimeseriesExporter","exportTable","table","datetime","cells","dateTimeLookup","found","toFixed","csv","link","document","createElement","setAttribute","encodeURI","appendChild","click","UserGroups","users","setUsers","usersOnly","StatusCell","Tooltip","CheckCircle","green","blue","thickness","bottom","right","HourglassEmpty","yellow","red","Cancel","CancelScheduleSend","HelpOutline","GroupCellContent","Cell","requested","started","differenceInMinutes","delayColor","placement","TransitionComponent","Zoom","noWrap","dateGroupCriteria","JobDetailStyles","paper","button","cursor","textarea","minHeight","overflow","whiteSpace","JobDetail","detail","textareaScrolled","onClose","structuredLogs","setStructuredLogs","scrollHeight","setScrollHeight","formatLog","logs","logLevel","textareaInputRef","node","scrollTop","Grid","xs","Paper","displayBlock","JobList","initialDateState","initialJobData","accountId","hostId","duration","delay","finished","job","setJob","JobPanelStyles","loadingDetail","wrapper","loadJobDetail","zIndex","jobPanel","transition","transform","boxShadow","visibility","jobsData","setJobsData","loading","windowHeight","setWindowHeight","setTextareaScrolled","setDate","setSelectedRow","tableColumnExtensions","latestJobs","tableGroupColumnExtension","showWhenGrouped","integratedGroupingColumnExtensions","criteria","parameterHeader","clearDateFilter","fetchJobList","queryOperator","rawJobs","dataMapping","jobUpdated","dataUpdated","jobs","updatedJob","Id","Started","Finished","HostId","Status","Requested","Progress","jobAdded","dataAdded","addedJob","TaskId","AccountId","ScenarioId","Parameters","priority","Priority","requestedUtc","ConnectionJobLog","connectToSignalR","withUrl","accessTokenFactory","configureLogging","Information","withAutomaticReconnect","build","start","on","invoke","Item","QueryOperator","Value","Loading","defaultFilters","rowComponent","TableRow","Row","expandWithData","sources","tableRow","contentComponent","rootComponent","ToolbarRootComponent","DateFilter","onSetDate","onClearDateFilter","showGroupingControls","defaultHiddenColumnNames","closeTab","TimeseriesStyles","sidebar","skeleton","opacity","NAME_TEXT_STYLE","DATA_ZOOM","labelFormatter","GRID","TEXT_STYLE","AXIS_LABEL","X_AXIS","axisLabel","Y_AXIS","LEGEND_STYLE","borderRadius","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","TimeseriesExplorer","legendPosition","legendPositionOffset","setIds","grid","dataZoom","setOptions","handleOnExpand","symbol","updatedOptions","formatter","fetchTopLevelTreeView","container","sm","notMerge","Skeleton","animation","LogLevelFilterCell","onFilter","TableCell","labelId","columnType","FilterCellRow","CustomCell","cellIcon","BugReportOutlined","InfoOutlined","blueGrey","ErrorOutlineOutlined","WarningOutlined","NewReleases","borderBottom","paddingLeft","lineHeight","letterSpacing","dangerouslySetInnerHTML","__html","styles","withTheme","LogList","startDateUtc","setStartDateUtc","logsData","setLogsData","wordWrapEnabled","onLogsRecieved","fetchLogsList","dateTimeValue","rawLogs","utcToZonedTime","utcDateFormated","zonedTimeToUtc","shift","interval","ScenariosOLD","jobParameters","hostGroup","selectedScenarioId","dialog","setDialog","setScenarios","setScenario","loadedScenario","setLoadedScenario","fetchScenariosByDateList","fetchScenariosList","dataSelectors","descriptionField","newScenarios","getScenario","resultCallback","executeDialog","dialogId","onConfirm","onExecuteScenario","terminateDialog","onTerminateScenario","lastJobId","cloneDialog","cloneTitle","onCloneScenario","clonedScenario","clonedNamed","onDeleteScenario","ok","printedScenarios","printedDialog","ScenarioList","onScenarioSelectedHandler","onContextMenuClickHandler","deleteDialog","deleteTitle","GeneralDialog","onCancel","fetchAccount","method","Authorization","fetchAccounts","deleteAccount","username","tap","updateAccount","createAccount","resetPassword","updatePassword","fetchToken","executeJobQuery","requests","flat","executeJob","dataSource","cancelJob","fetchJsonDocuments","dataSelector","fetchJsonDocument","postJsonDocuments","deleteJsonDocument","fetchLogs","fc","fetchScenario","fetchScenarios","fetchScenariosByDate","deleteScenario","softDelete","postScenario","updateScenario","fetchTimeseriesValues","onlyLast","dataSourcesArray","url","fetchTimeseriesFullNames","flatMap","ts","fetchUserGroups","createUserGroup","updateUserGroups","deleteUserGroup","fetchMapAnimationFiles","config","IntensityColours","InterpolateIntensityColor","weight","rgbs","hex","bigint","parseInt","r","g","rgb","ScenarioMenu","menu","setShowMenuState","showElement","setshowElementState","setShowMenu","isShow","elementId","setContextMenu","handlePDF","pdf","handleEdit","edit","currentTarget","anchorEl","open","ScenarioMenuOLD","labels","float","rememberMeLink","submit","shrink","paddingRight","LoginForm","onResetPassword","rememberMeLabelText","resetPasswordLabelText","loginButtonText","backButtonText","otpAuthPlaceholder","twoFA","setTwoFA","otpAuthenticatorIds","setOtpAuthenticatorIds","setForm","auth","handleDefaultAuthenticator","onSubmit","preventDefault","validate","otpInfo","Alert","severity","required","handleBack","resetBox","messages","backButton","ResetPasswordForm","mailTemplate","onBackToLogin","resetPasswordButtonText","errorText","successText","success","setSuccess","UpdatePasswordForm","onPasswordUpdated","newPasswordPlaceholder","confirmPasswordPlaceholder","updatePasswordButtonText","submitted","setSubmitted","confirmPassword","passwordsMatch","Login","resetPasswordToken","showingResetPassword","setShowingResetPassword","togglePasswordResetForm","ThemeProvider","resetPasswordError","updatePasswordConfirmButton","clear","queryBody","latestScenarios","rawScenarios","updatedScenarios","latestJob","filterToLastJob","sce","lastJob","modalMessage","action","editDialog","onEditScenario","updatedScenario","JsonDocumentAddedScenario","session","justify","dayText","hourText","scenarioHour","scenarioTitle","textOverflow","scenarioProgress","scenarioDetails","buttonLabel","textTransform","textFields","actions","icon","verticalLine","marginLeft","borderLeft","alignSelf","paddingTop","ScenarioItem","isSelected","nameAccentColour","description","hover","setHover","onMouseOver","onMouseOut","onFocus","onBlur","paddingBottom","showSpinner","rowIcon","endIcon","ScenarioItemOLD","listBlock","dateBlock","dateArea","divider","listItem","selectedItem","groupedScenarios","setGroupedScenarios","selectedId","setSelectedId","groupScenarios","buildMenu","buildScenariosList","reverse","itemStatus","onScenarioClick","onKeyPress","buildDateArea","isoDate","dateObject","borderTop","ScenarioListOLD","day","dayName","monthName","dateBlockwidth","Divider","shading","setCancel","setConfirm","DateInput","dateFormat","dateSelected","defaultDate","setValue","utils","maxDate","strictCompareDates","autoOk","newDate","isValid","handleInputChange","AddButton","onExecute","EditButton","IconButton","DeleteButton","commandComponents","add","delete","Command","CommandButton","DefaultColumnsFormatter","DefaultColumnsTypeProvider","formatterComponent","ActionsButtons","cancelButtonText","confirmButtonText","isEditing","DialogActions","Dialog","DialogTitle","DialogContent","DialogContentText","DeleteDialog","InputFilterCell","Input","BooleanFilterCell","metadataFilterService","predicate","toLowerCase","arrayToLowerCase","result","myBooleanValue","filterRules","MetadataFormatter","MetadataTypeProvider","MetadataEditor","onListChange","re","NoBorderTextField","withStyles","Popup","onMetadataChange","onApplyChanges","onCancelChanges","passwordStrengthColor","setPasswordStrengthColor","passwordValid","setPasswordValid","duplicatedId","setDuplicatedId","InputAdornment","FiberManualRecord","repeatPassword","updatePasswordStrengthIndicator","strengthColor","FormGroup","handleOnChange","defaultUsersSelection","userId","currentValues","f","getOptionSelected","getOptionLabel","PopupEditing","memo","editedRow","rowId","addedRows","editingRowIds","createRowChange","rowChanges","changeRow","changeAddedRow","commitChangedRows","commitAddedRows","stopEditRows","cancelAddedRows","cancelChangedRows","targetRow","rowIds","processValueChange","changeArgs","change","processListChange","isMetadata","changeData","processMetadataChange","applyChanges","cancelChanges","UsersFormatter","UsersTypeProvider"],"mappings":"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","file":"main.a7f88cea.iframe.bundle.js","sourcesContent":["import '@storybook/react';","\"use strict\";\n\nvar _frameworkImportPath = require(\"@storybook/react\");\n\n/* eslint-disable import/no-unresolved */\n(0, _frameworkImportPath.configure)([require.context('../src', true, /^\\.(?:(?:^|[\\\\/]|(?:(?:(?!(?:^|[\\\\/])\\.).)*?)[\\\\/])(?!\\.)(?=.)[^\\\\/]*?\\.stories\\.tsx)$/)], module, false);","var map = {\n\t\"./Accounts/Accounts.stories.tsx\": 1242,\n\t\"./Auth/Auth.stories.tsx\": 1272,\n\t\"./ColourScales/ColourScales.stories.tsx\": 1259,\n\t\"./ECharts/eCharts.stories.tsx\": 1260,\n\t\"./Jobs/Jobs.stories.tsx\": 1261,\n\t\"./Logs/Logs.stories.tsx\": 1262,\n\t\"./Maps/Maps.stories.tsx\": 1273,\n\t\"./Scenarios/Scenarios.stories.tsx\": 1278,\n\t\"./Timeseries/Timeseries.stories.tsx\": 1268,\n\t\"./TreeView/treeView.stories.tsx\": 1275,\n\t\"./UserGroups/UserGroups.stories.tsx\": 1269\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1241;","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { Accounts } from './Accounts';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Accounts',\\\\\\\\n component: Accounts,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const AccountsStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"AccountsStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 } } };\\\\r\\\\nimport * as React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { Accounts } from './Accounts';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { Accounts } from './Accounts';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Accounts',\\\\\\\\n component: Accounts,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const AccountsStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"accounts-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 } } } }, },\\\\r\\\\n title: 'Accounts',\\\\r\\\\n component: Accounts,\\\\r\\\\n};\\\\r\\\\nconst host = process.env.ENDPOINT_URL;\\\\r\\\\nexport const AccountsStory = () => {\\\\r\\\\n const metadata = [\\\\r\\\\n {\\\\r\\\\n key: 'myChoice',\\\\r\\\\n label: 'My Choice',\\\\r\\\\n type: 'SingleChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: 'B',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myBoolean',\\\\r\\\\n label: 'My Boolean',\\\\r\\\\n type: 'Boolean',\\\\r\\\\n default: true,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myText',\\\\r\\\\n label: 'My Text',\\\\r\\\\n type: 'Text',\\\\r\\\\n default: 'description',\\\\r\\\\n regEx: '[a-zA-Z]*:',\\\\r\\\\n regExError: 'The string must have a colon in it',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myOptions',\\\\r\\\\n label: 'My Options',\\\\r\\\\n type: 'MultiChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: ['A', 'C'],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myMultiText',\\\\r\\\\n label: 'Multi Text',\\\\r\\\\n type: 'MultiText',\\\\r\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\r\\\\n return (\\\\n {({ token }) => ()}\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"AccountsStory\\\":{\\\"startLoc\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":56},\\\"startBody\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":56}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AccountsStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } };\\r\\nimport * as React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { Accounts } from './Accounts';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { Accounts } from './Accounts';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Accounts',\\\\\\\\n component: Accounts,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const AccountsStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"AccountsStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 } } };\\\\r\\\\nimport * as React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { Accounts } from './Accounts';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { Accounts } from './Accounts';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Accounts',\\\\\\\\n component: Accounts,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const AccountsStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"accounts-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 66 } } } }, },\\\\r\\\\n title: 'Accounts',\\\\r\\\\n component: Accounts,\\\\r\\\\n};\\\\r\\\\nconst host = process.env.ENDPOINT_URL;\\\\r\\\\nexport const AccountsStory = () => {\\\\r\\\\n const metadata = [\\\\r\\\\n {\\\\r\\\\n key: 'myChoice',\\\\r\\\\n label: 'My Choice',\\\\r\\\\n type: 'SingleChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: 'B',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myBoolean',\\\\r\\\\n label: 'My Boolean',\\\\r\\\\n type: 'Boolean',\\\\r\\\\n default: true,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myText',\\\\r\\\\n label: 'My Text',\\\\r\\\\n type: 'Text',\\\\r\\\\n default: 'description',\\\\r\\\\n regEx: '[a-zA-Z]*:',\\\\r\\\\n regExError: 'The string must have a colon in it',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myOptions',\\\\r\\\\n label: 'My Options',\\\\r\\\\n type: 'MultiChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: ['A', 'C'],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myMultiText',\\\\r\\\\n label: 'Multi Text',\\\\r\\\\n type: 'MultiText',\\\\r\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\r\\\\n return (\\\\n {({ token }) => ()}\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"accounts-story\\\":{\\\"startLoc\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":56},\\\"startBody\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":56}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"accounts-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } } }, },\\r\\n title: 'Accounts',\\r\\n component: Accounts,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const AccountsStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n const userGroupsDefaultSelected = ['Editors'];\\r\\n return (\\n {({ token }) => ()}\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"AccountsStory\":{\"startLoc\":{\"col\":29,\"line\":23},\"endLoc\":{\"col\":1,\"line\":64},\"startBody\":{\"col\":29,\"line\":23},\"endBody\":{\"col\":1,\"line\":64}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AccountsStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } };\\r\\nimport * as React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { Accounts } from './Accounts';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"accounts-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } } }, },\\r\\n title: 'Accounts',\\r\\n component: Accounts,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const AccountsStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n const userGroupsDefaultSelected = ['Editors'];\\r\\n return (\\n {({ token }) => ()}\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"AccountsStory\":{\"startLoc\":{\"col\":29,\"line\":15},\"endLoc\":{\"col\":1,\"line\":56},\"startBody\":{\"col\":29,\"line\":15},\"endBody\":{\"col\":1,\"line\":56}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport * as React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { MetadataProps } from '../common/Metadata/types';\\nimport { Accounts } from './Accounts';\\n\\nexport default {\\n title: 'Accounts',\\n component: Accounts,\\n} as Meta;\\n\\nconst host = process.env.ENDPOINT_URL;\\n\\nexport const AccountsStory = () => {\\n const metadata = [\\n {\\n key: 'myChoice',\\n label: 'My Choice',\\n type: 'SingleChoice',\\n options: ['A', 'B', 'C'],\\n default: 'B',\\n },\\n {\\n key: 'myBoolean',\\n label: 'My Boolean',\\n type: 'Boolean',\\n default: true,\\n },\\n {\\n key: 'myText',\\n label: 'My Text',\\n type: 'Text',\\n default: 'description',\\n regEx: '[a-zA-Z]*:',\\n regExError: 'The string must have a colon in it',\\n },\\n {\\n key: 'myOptions',\\n label: 'My Options',\\n type: 'MultiChoice',\\n options: ['A', 'B', 'C'],\\n default: ['A', 'C'],\\n },\\n {\\n key: 'myMultiText',\\n label: 'Multi Text',\\n type: 'MultiText',\\n default: ['127.0.0.1', '0.0.0.10'],\\n },\\n ] as MetadataProps[];\\n\\n const userGroupsDefaultSelected = ['Editors'];\\n\\n return (\\n \\n {({ token }) => (\\n \\n )}\\n \\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"AccountsStory\": { \"startLoc\": { \"col\": 29, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 66 }, \"startBody\": { \"col\": 29, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 66 } } };\r\nimport * as React from 'react';\r\nimport { LoginGate } from '../Auth/LoginGate';\r\nimport { Accounts } from './Accounts';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AccountsStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } };\\r\\nimport * as React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { Accounts } from './Accounts';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { Accounts } from './Accounts';\\\\n\\\\nexport default {\\\\n title: 'Accounts',\\\\n component: Accounts,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const AccountsStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n const userGroupsDefaultSelected = ['Editors'];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => (\\\\n \\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"accounts-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 66 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 66 } } } }, },\\r\\n title: 'Accounts',\\r\\n component: Accounts,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const AccountsStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n const userGroupsDefaultSelected = ['Editors'];\\r\\n return (\\n {({ token }) => ()}\\n );\\r\\n};\\r\\n\",\"locationsMap\":{\"accounts-story\":{\"startLoc\":{\"col\":29,\"line\":15},\"endLoc\":{\"col\":1,\"line\":56},\"startBody\":{\"col\":29,\"line\":15},\"endBody\":{\"col\":1,\"line\":56}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport * as React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { MetadataProps } from '../common/Metadata/types';\\nimport { Accounts } from './Accounts';\\n\\nexport default {\\n title: 'Accounts',\\n component: Accounts,\\n} as Meta;\\n\\nconst host = process.env.ENDPOINT_URL;\\n\\nexport const AccountsStory = () => {\\n const metadata = [\\n {\\n key: 'myChoice',\\n label: 'My Choice',\\n type: 'SingleChoice',\\n options: ['A', 'B', 'C'],\\n default: 'B',\\n },\\n {\\n key: 'myBoolean',\\n label: 'My Boolean',\\n type: 'Boolean',\\n default: true,\\n },\\n {\\n key: 'myText',\\n label: 'My Text',\\n type: 'Text',\\n default: 'description',\\n regEx: '[a-zA-Z]*:',\\n regExError: 'The string must have a colon in it',\\n },\\n {\\n key: 'myOptions',\\n label: 'My Options',\\n type: 'MultiChoice',\\n options: ['A', 'B', 'C'],\\n default: ['A', 'C'],\\n },\\n {\\n key: 'myMultiText',\\n label: 'Multi Text',\\n type: 'MultiText',\\n default: ['127.0.0.1', '0.0.0.10'],\\n },\\n ] as MetadataProps[];\\n\\n const userGroupsDefaultSelected = ['Editors'];\\n\\n return (\\n \\n {({ token }) => (\\n \\n )}\\n \\n );\\n};\\n\", \"locationsMap\": { \"accounts-story\": { \"startLoc\": { \"col\": 29, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 66 }, \"startBody\": { \"col\": 29, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 66 } } } }, },\r\n title: 'Accounts',\r\n component: Accounts,\r\n};\r\nconst host = process.env.ENDPOINT_URL;\r\nexport const AccountsStory = () => {\r\n const metadata = [\r\n {\r\n key: 'myChoice',\r\n label: 'My Choice',\r\n type: 'SingleChoice',\r\n options: ['A', 'B', 'C'],\r\n default: 'B',\r\n },\r\n {\r\n key: 'myBoolean',\r\n label: 'My Boolean',\r\n type: 'Boolean',\r\n default: true,\r\n },\r\n {\r\n key: 'myText',\r\n label: 'My Text',\r\n type: 'Text',\r\n default: 'description',\r\n regEx: '[a-zA-Z]*:',\r\n regExError: 'The string must have a colon in it',\r\n },\r\n {\r\n key: 'myOptions',\r\n label: 'My Options',\r\n type: 'MultiChoice',\r\n options: ['A', 'B', 'C'],\r\n default: ['A', 'C'],\r\n },\r\n {\r\n key: 'myMultiText',\r\n label: 'Multi Text',\r\n type: 'MultiText',\r\n default: ['127.0.0.1', '0.0.0.10'],\r\n },\r\n ];\r\n const userGroupsDefaultSelected = ['Editors'];\r\n return (\n {({ token }) => ()}\n );\r\n};\r\n\n\n\nAccountsStory.parameters = { storySource: { source: \"() => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n const userGroupsDefaultSelected = ['Editors'];\\r\\n return (\\n {({ token }) => ()}\\n );\\r\\n}\" }, ...AccountsStory.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { ColourScale } from './ColourScale';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Colour Scale Components',\\\\\\\\n component: ColourScale,\\\\\\\\n decorators: [withKnobs],\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ColourScalesStory = () => {\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"ColourScalesStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 } } };\\\\r\\\\nimport { withKnobs } from '@storybook/addon-knobs';\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { ColourScale } from './ColourScale';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { ColourScale } from './ColourScale';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Colour Scale Components',\\\\\\\\n component: ColourScale,\\\\\\\\n decorators: [withKnobs],\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ColourScalesStory = () => {\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"colour-scales-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 } } } }, },\\\\r\\\\n title: 'Colour Scale Components',\\\\r\\\\n component: ColourScale,\\\\r\\\\n decorators: [withKnobs],\\\\r\\\\n};\\\\r\\\\nexport const ColourScalesStory = () => {\\\\r\\\\n return ();\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"ColourScalesStory\\\":{\\\"startLoc\\\":{\\\"col\\\":33,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":17},\\\"startBody\\\":{\\\"col\\\":33,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":17}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ColourScalesStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React from 'react';\\r\\nimport { ColourScale } from './ColourScale';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { ColourScale } from './ColourScale';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Colour Scale Components',\\\\\\\\n component: ColourScale,\\\\\\\\n decorators: [withKnobs],\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ColourScalesStory = () => {\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"ColourScalesStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 } } };\\\\r\\\\nimport { withKnobs } from '@storybook/addon-knobs';\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { ColourScale } from './ColourScale';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { ColourScale } from './ColourScale';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Colour Scale Components',\\\\\\\\n component: ColourScale,\\\\\\\\n decorators: [withKnobs],\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ColourScalesStory = () => {\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"colour-scales-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 33, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 23 } } } }, },\\\\r\\\\n title: 'Colour Scale Components',\\\\r\\\\n component: ColourScale,\\\\r\\\\n decorators: [withKnobs],\\\\r\\\\n};\\\\r\\\\nexport const ColourScalesStory = () => {\\\\r\\\\n return ();\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"colour-scales-story\\\":{\\\"startLoc\\\":{\\\"col\\\":33,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":17},\\\"startBody\\\":{\\\"col\\\":33,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":17}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"colour-scales-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } } }, },\\r\\n title: 'Colour Scale Components',\\r\\n component: ColourScale,\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const ColourScalesStory = () => {\\r\\n return ();\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"ColourScalesStory\":{\"startLoc\":{\"col\":33,\"line\":23},\"endLoc\":{\"col\":1,\"line\":25},\"startBody\":{\"col\":33,\"line\":23},\"endBody\":{\"col\":1,\"line\":25}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ColourScalesStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React from 'react';\\r\\nimport { ColourScale } from './ColourScale';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"colour-scales-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } } }, },\\r\\n title: 'Colour Scale Components',\\r\\n component: ColourScale,\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const ColourScalesStory = () => {\\r\\n return ();\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"ColourScalesStory\":{\"startLoc\":{\"col\":33,\"line\":15},\"endLoc\":{\"col\":1,\"line\":17},\"startBody\":{\"col\":33,\"line\":15},\"endBody\":{\"col\":1,\"line\":17}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { withKnobs } from '@storybook/addon-knobs';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { ColourScale } from './ColourScale';\\n\\nexport default {\\n title: 'Colour Scale Components',\\n component: ColourScale,\\n decorators: [withKnobs],\\n} as Meta;\\n\\nexport const ColourScalesStory = () => {\\n return (\\n \\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"ColourScalesStory\": { \"startLoc\": { \"col\": 33, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 23 }, \"startBody\": { \"col\": 33, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 23 } } };\r\nimport { withKnobs } from '@storybook/addon-knobs';\r\nimport React from 'react';\r\nimport { ColourScale } from './ColourScale';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ColourScalesStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React from 'react';\\r\\nimport { ColourScale } from './ColourScale';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { ColourScale } from './ColourScale';\\\\n\\\\nexport default {\\\\n title: 'Colour Scale Components',\\\\n component: ColourScale,\\\\n decorators: [withKnobs],\\\\n} as Meta;\\\\n\\\\nexport const ColourScalesStory = () => {\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"colour-scales-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 23 }, \\\"startBody\\\": { \\\"col\\\": 33, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 23 } } } }, },\\r\\n title: 'Colour Scale Components',\\r\\n component: ColourScale,\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const ColourScalesStory = () => {\\r\\n return ();\\r\\n};\\r\\n\",\"locationsMap\":{\"colour-scales-story\":{\"startLoc\":{\"col\":33,\"line\":15},\"endLoc\":{\"col\":1,\"line\":17},\"startBody\":{\"col\":33,\"line\":15},\"endBody\":{\"col\":1,\"line\":17}}}}, \"storySource\": { \"source\": \"import { withKnobs } from '@storybook/addon-knobs';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { ColourScale } from './ColourScale';\\n\\nexport default {\\n title: 'Colour Scale Components',\\n component: ColourScale,\\n decorators: [withKnobs],\\n} as Meta;\\n\\nexport const ColourScalesStory = () => {\\n return (\\n \\n );\\n};\\n\", \"locationsMap\": { \"colour-scales-story\": { \"startLoc\": { \"col\": 33, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 23 }, \"startBody\": { \"col\": 33, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 23 } } } }, },\r\n title: 'Colour Scale Components',\r\n component: ColourScale,\r\n decorators: [withKnobs],\r\n};\r\nexport const ColourScalesStory = () => {\r\n return ();\r\n};\r\n\n\n\nColourScalesStory.parameters = { storySource: { source: \"() => {\\r\\n return ();\\r\\n}\" }, ...ColourScalesStory.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport DHITheme from '../theme';\\\\\\\\nimport { BaseChart } from './BaseChart';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Chart Components',\\\\\\\\n component: BaseChart,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const eChartBase = () => {\\\\\\\\n const nameTextStyle = {\\\\\\\\n fontSize: 20,\\\\\\\\n padding: 20,\\\\\\\\n };\\\\\\\\n\\\\\\\\n const options = {\\\\\\\\n title: {\\\\\\\\n text: 'ECharts Base example',\\\\\\\\n textStyle: {\\\\\\\\n color: DHITheme.palette.primary.main,\\\\\\\\n fontSize: 20,\\\\\\\\n fontFamily: '\\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Helvetica\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Arial\\\\\\\\\\\\\\\", sans-serif',\\\\\\\\n },\\\\\\\\n },\\\\\\\\n tooltip: {},\\\\\\\\n legend: {\\\\\\\\n data: ['Bench Levels', 'Time'],\\\\\\\\n },\\\\\\\\n xAxis: {\\\\\\\\n name: 'Time',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\\\\\n },\\\\\\\\n yAxis: {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n },\\\\\\\\n series: [\\\\\\\\n {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n type: 'bar',\\\\\\\\n data: [5, 20, 36, 10, 10, 20],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Time',\\\\\\\\n type: 'line',\\\\\\\\n data: [2, 1, 10, 0, 0, 18],\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n };\\\\\\\\n\\\\\\\\n return window.innerHeight * 0.4} options={options} />;\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"eChartBase\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport DHITheme from '../theme';\\\\r\\\\nimport { BaseChart } from './BaseChart';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport DHITheme from '../theme';\\\\\\\\nimport { BaseChart } from './BaseChart';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Chart Components',\\\\\\\\n component: BaseChart,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const eChartBase = () => {\\\\\\\\n const nameTextStyle = {\\\\\\\\n fontSize: 20,\\\\\\\\n padding: 20,\\\\\\\\n };\\\\\\\\n\\\\\\\\n const options = {\\\\\\\\n title: {\\\\\\\\n text: 'ECharts Base example',\\\\\\\\n textStyle: {\\\\\\\\n color: DHITheme.palette.primary.main,\\\\\\\\n fontSize: 20,\\\\\\\\n fontFamily: '\\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Helvetica\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Arial\\\\\\\\\\\\\\\", sans-serif',\\\\\\\\n },\\\\\\\\n },\\\\\\\\n tooltip: {},\\\\\\\\n legend: {\\\\\\\\n data: ['Bench Levels', 'Time'],\\\\\\\\n },\\\\\\\\n xAxis: {\\\\\\\\n name: 'Time',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\\\\\n },\\\\\\\\n yAxis: {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n },\\\\\\\\n series: [\\\\\\\\n {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n type: 'bar',\\\\\\\\n data: [5, 20, 36, 10, 10, 20],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Time',\\\\\\\\n type: 'line',\\\\\\\\n data: [2, 1, 10, 0, 0, 18],\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n };\\\\\\\\n\\\\\\\\n return window.innerHeight * 0.4} options={options} />;\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"e-chart-base\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 } } } }, },\\\\r\\\\n title: 'Chart Components',\\\\r\\\\n component: BaseChart,\\\\r\\\\n};\\\\r\\\\nexport const eChartBase = () => {\\\\r\\\\n const nameTextStyle = {\\\\r\\\\n fontSize: 20,\\\\r\\\\n padding: 20,\\\\r\\\\n };\\\\r\\\\n const options = {\\\\r\\\\n title: {\\\\r\\\\n text: 'ECharts Base example',\\\\r\\\\n textStyle: {\\\\r\\\\n color: DHITheme.palette.primary.main,\\\\r\\\\n fontSize: 20,\\\\r\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\r\\\\n },\\\\r\\\\n },\\\\r\\\\n tooltip: {},\\\\r\\\\n legend: {\\\\r\\\\n data: ['Bench Levels', 'Time'],\\\\r\\\\n },\\\\r\\\\n xAxis: {\\\\r\\\\n name: 'Time',\\\\r\\\\n nameLocation: 'center',\\\\r\\\\n nameTextStyle,\\\\r\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\r\\\\n },\\\\r\\\\n yAxis: {\\\\r\\\\n name: 'Bench Levels',\\\\r\\\\n nameLocation: 'center',\\\\r\\\\n nameTextStyle,\\\\r\\\\n },\\\\r\\\\n series: [\\\\r\\\\n {\\\\r\\\\n name: 'Bench Levels',\\\\r\\\\n type: 'bar',\\\\r\\\\n data: [5, 20, 36, 10, 10, 20],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Time',\\\\r\\\\n type: 'line',\\\\r\\\\n data: [2, 1, 10, 0, 0, 18],\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n };\\\\r\\\\n return window.innerHeight * 0.4} options={options}/>;\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"eChartBase\\\":{\\\"startLoc\\\":{\\\"col\\\":26,\\\"line\\\":14},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":57},\\\"startBody\\\":{\\\"col\\\":26,\\\"line\\\":14},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":57}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"eChartBase\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } };\\r\\nimport React from 'react';\\r\\nimport DHITheme from '../theme';\\r\\nimport { BaseChart } from './BaseChart';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport DHITheme from '../theme';\\\\\\\\nimport { BaseChart } from './BaseChart';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Chart Components',\\\\\\\\n component: BaseChart,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const eChartBase = () => {\\\\\\\\n const nameTextStyle = {\\\\\\\\n fontSize: 20,\\\\\\\\n padding: 20,\\\\\\\\n };\\\\\\\\n\\\\\\\\n const options = {\\\\\\\\n title: {\\\\\\\\n text: 'ECharts Base example',\\\\\\\\n textStyle: {\\\\\\\\n color: DHITheme.palette.primary.main,\\\\\\\\n fontSize: 20,\\\\\\\\n fontFamily: '\\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Helvetica\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Arial\\\\\\\\\\\\\\\", sans-serif',\\\\\\\\n },\\\\\\\\n },\\\\\\\\n tooltip: {},\\\\\\\\n legend: {\\\\\\\\n data: ['Bench Levels', 'Time'],\\\\\\\\n },\\\\\\\\n xAxis: {\\\\\\\\n name: 'Time',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\\\\\n },\\\\\\\\n yAxis: {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n },\\\\\\\\n series: [\\\\\\\\n {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n type: 'bar',\\\\\\\\n data: [5, 20, 36, 10, 10, 20],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Time',\\\\\\\\n type: 'line',\\\\\\\\n data: [2, 1, 10, 0, 0, 18],\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n };\\\\\\\\n\\\\\\\\n return window.innerHeight * 0.4} options={options} />;\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"eChartBase\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport DHITheme from '../theme';\\\\r\\\\nimport { BaseChart } from './BaseChart';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport DHITheme from '../theme';\\\\\\\\nimport { BaseChart } from './BaseChart';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Chart Components',\\\\\\\\n component: BaseChart,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const eChartBase = () => {\\\\\\\\n const nameTextStyle = {\\\\\\\\n fontSize: 20,\\\\\\\\n padding: 20,\\\\\\\\n };\\\\\\\\n\\\\\\\\n const options = {\\\\\\\\n title: {\\\\\\\\n text: 'ECharts Base example',\\\\\\\\n textStyle: {\\\\\\\\n color: DHITheme.palette.primary.main,\\\\\\\\n fontSize: 20,\\\\\\\\n fontFamily: '\\\\\\\\\\\\\\\"Roboto\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Helvetica\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"Arial\\\\\\\\\\\\\\\", sans-serif',\\\\\\\\n },\\\\\\\\n },\\\\\\\\n tooltip: {},\\\\\\\\n legend: {\\\\\\\\n data: ['Bench Levels', 'Time'],\\\\\\\\n },\\\\\\\\n xAxis: {\\\\\\\\n name: 'Time',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\\\\\n },\\\\\\\\n yAxis: {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n nameLocation: 'center',\\\\\\\\n nameTextStyle,\\\\\\\\n },\\\\\\\\n series: [\\\\\\\\n {\\\\\\\\n name: 'Bench Levels',\\\\\\\\n type: 'bar',\\\\\\\\n data: [5, 20, 36, 10, 10, 20],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Time',\\\\\\\\n type: 'line',\\\\\\\\n data: [2, 1, 10, 0, 0, 18],\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n };\\\\\\\\n\\\\\\\\n return window.innerHeight * 0.4} options={options} />;\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"e-chart-base\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 56 } } } }, },\\\\r\\\\n title: 'Chart Components',\\\\r\\\\n component: BaseChart,\\\\r\\\\n};\\\\r\\\\nexport const eChartBase = () => {\\\\r\\\\n const nameTextStyle = {\\\\r\\\\n fontSize: 20,\\\\r\\\\n padding: 20,\\\\r\\\\n };\\\\r\\\\n const options = {\\\\r\\\\n title: {\\\\r\\\\n text: 'ECharts Base example',\\\\r\\\\n textStyle: {\\\\r\\\\n color: DHITheme.palette.primary.main,\\\\r\\\\n fontSize: 20,\\\\r\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\r\\\\n },\\\\r\\\\n },\\\\r\\\\n tooltip: {},\\\\r\\\\n legend: {\\\\r\\\\n data: ['Bench Levels', 'Time'],\\\\r\\\\n },\\\\r\\\\n xAxis: {\\\\r\\\\n name: 'Time',\\\\r\\\\n nameLocation: 'center',\\\\r\\\\n nameTextStyle,\\\\r\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\r\\\\n },\\\\r\\\\n yAxis: {\\\\r\\\\n name: 'Bench Levels',\\\\r\\\\n nameLocation: 'center',\\\\r\\\\n nameTextStyle,\\\\r\\\\n },\\\\r\\\\n series: [\\\\r\\\\n {\\\\r\\\\n name: 'Bench Levels',\\\\r\\\\n type: 'bar',\\\\r\\\\n data: [5, 20, 36, 10, 10, 20],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Time',\\\\r\\\\n type: 'line',\\\\r\\\\n data: [2, 1, 10, 0, 0, 18],\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n };\\\\r\\\\n return window.innerHeight * 0.4} options={options}/>;\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"e-chart-base\\\":{\\\"startLoc\\\":{\\\"col\\\":26,\\\"line\\\":14},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":57},\\\"startBody\\\":{\\\"col\\\":26,\\\"line\\\":14},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":57}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"e-chart-base\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } } }, },\\r\\n title: 'Chart Components',\\r\\n component: BaseChart,\\r\\n};\\r\\nexport const eChartBase = () => {\\r\\n const nameTextStyle = {\\r\\n fontSize: 20,\\r\\n padding: 20,\\r\\n };\\r\\n const options = {\\r\\n title: {\\r\\n text: 'ECharts Base example',\\r\\n textStyle: {\\r\\n color: DHITheme.palette.primary.main,\\r\\n fontSize: 20,\\r\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\r\\n },\\r\\n },\\r\\n tooltip: {},\\r\\n legend: {\\r\\n data: ['Bench Levels', 'Time'],\\r\\n },\\r\\n xAxis: {\\r\\n name: 'Time',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\r\\n },\\r\\n yAxis: {\\r\\n name: 'Bench Levels',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n },\\r\\n series: [\\r\\n {\\r\\n name: 'Bench Levels',\\r\\n type: 'bar',\\r\\n data: [5, 20, 36, 10, 10, 20],\\r\\n },\\r\\n {\\r\\n name: 'Time',\\r\\n type: 'line',\\r\\n data: [2, 1, 10, 0, 0, 18],\\r\\n },\\r\\n ],\\r\\n };\\r\\n return window.innerHeight * 0.4} options={options}/>;\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"eChartBase\":{\"startLoc\":{\"col\":26,\"line\":22},\"endLoc\":{\"col\":1,\"line\":65},\"startBody\":{\"col\":26,\"line\":22},\"endBody\":{\"col\":1,\"line\":65}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"eChartBase\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } };\\r\\nimport React from 'react';\\r\\nimport DHITheme from '../theme';\\r\\nimport { BaseChart } from './BaseChart';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"e-chart-base\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } } }, },\\r\\n title: 'Chart Components',\\r\\n component: BaseChart,\\r\\n};\\r\\nexport const eChartBase = () => {\\r\\n const nameTextStyle = {\\r\\n fontSize: 20,\\r\\n padding: 20,\\r\\n };\\r\\n const options = {\\r\\n title: {\\r\\n text: 'ECharts Base example',\\r\\n textStyle: {\\r\\n color: DHITheme.palette.primary.main,\\r\\n fontSize: 20,\\r\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\r\\n },\\r\\n },\\r\\n tooltip: {},\\r\\n legend: {\\r\\n data: ['Bench Levels', 'Time'],\\r\\n },\\r\\n xAxis: {\\r\\n name: 'Time',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\r\\n },\\r\\n yAxis: {\\r\\n name: 'Bench Levels',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n },\\r\\n series: [\\r\\n {\\r\\n name: 'Bench Levels',\\r\\n type: 'bar',\\r\\n data: [5, 20, 36, 10, 10, 20],\\r\\n },\\r\\n {\\r\\n name: 'Time',\\r\\n type: 'line',\\r\\n data: [2, 1, 10, 0, 0, 18],\\r\\n },\\r\\n ],\\r\\n };\\r\\n return window.innerHeight * 0.4} options={options}/>;\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"eChartBase\":{\"startLoc\":{\"col\":26,\"line\":14},\"endLoc\":{\"col\":1,\"line\":57},\"startBody\":{\"col\":26,\"line\":14},\"endBody\":{\"col\":1,\"line\":57}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport DHITheme from '../theme';\\nimport { BaseChart } from './BaseChart';\\n\\nexport default {\\n title: 'Chart Components',\\n component: BaseChart,\\n} as Meta;\\n\\nexport const eChartBase = () => {\\n const nameTextStyle = {\\n fontSize: 20,\\n padding: 20,\\n };\\n\\n const options = {\\n title: {\\n text: 'ECharts Base example',\\n textStyle: {\\n color: DHITheme.palette.primary.main,\\n fontSize: 20,\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\n },\\n },\\n tooltip: {},\\n legend: {\\n data: ['Bench Levels', 'Time'],\\n },\\n xAxis: {\\n name: 'Time',\\n nameLocation: 'center',\\n nameTextStyle,\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\n },\\n yAxis: {\\n name: 'Bench Levels',\\n nameLocation: 'center',\\n nameTextStyle,\\n },\\n series: [\\n {\\n name: 'Bench Levels',\\n type: 'bar',\\n data: [5, 20, 36, 10, 10, 20],\\n },\\n {\\n name: 'Time',\\n type: 'line',\\n data: [2, 1, 10, 0, 0, 18],\\n },\\n ],\\n };\\n\\n return window.innerHeight * 0.4} options={options} />;\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"eChartBase\": { \"startLoc\": { \"col\": 26, \"line\": 11 }, \"endLoc\": { \"col\": 1, \"line\": 56 }, \"startBody\": { \"col\": 26, \"line\": 11 }, \"endBody\": { \"col\": 1, \"line\": 56 } } };\r\nimport React from 'react';\r\nimport DHITheme from '../theme';\r\nimport { BaseChart } from './BaseChart';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"eChartBase\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } };\\r\\nimport React from 'react';\\r\\nimport DHITheme from '../theme';\\r\\nimport { BaseChart } from './BaseChart';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport DHITheme from '../theme';\\\\nimport { BaseChart } from './BaseChart';\\\\n\\\\nexport default {\\\\n title: 'Chart Components',\\\\n component: BaseChart,\\\\n} as Meta;\\\\n\\\\nexport const eChartBase = () => {\\\\n const nameTextStyle = {\\\\n fontSize: 20,\\\\n padding: 20,\\\\n };\\\\n\\\\n const options = {\\\\n title: {\\\\n text: 'ECharts Base example',\\\\n textStyle: {\\\\n color: DHITheme.palette.primary.main,\\\\n fontSize: 20,\\\\n fontFamily: '\\\\\\\"Roboto\\\\\\\", \\\\\\\"Helvetica\\\\\\\", \\\\\\\"Arial\\\\\\\", sans-serif',\\\\n },\\\\n },\\\\n tooltip: {},\\\\n legend: {\\\\n data: ['Bench Levels', 'Time'],\\\\n },\\\\n xAxis: {\\\\n name: 'Time',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\\\n },\\\\n yAxis: {\\\\n name: 'Bench Levels',\\\\n nameLocation: 'center',\\\\n nameTextStyle,\\\\n },\\\\n series: [\\\\n {\\\\n name: 'Bench Levels',\\\\n type: 'bar',\\\\n data: [5, 20, 36, 10, 10, 20],\\\\n },\\\\n {\\\\n name: 'Time',\\\\n type: 'line',\\\\n data: [2, 1, 10, 0, 0, 18],\\\\n },\\\\n ],\\\\n };\\\\n\\\\n return window.innerHeight * 0.4} options={options} />;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"e-chart-base\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 56 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 56 } } } }, },\\r\\n title: 'Chart Components',\\r\\n component: BaseChart,\\r\\n};\\r\\nexport const eChartBase = () => {\\r\\n const nameTextStyle = {\\r\\n fontSize: 20,\\r\\n padding: 20,\\r\\n };\\r\\n const options = {\\r\\n title: {\\r\\n text: 'ECharts Base example',\\r\\n textStyle: {\\r\\n color: DHITheme.palette.primary.main,\\r\\n fontSize: 20,\\r\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\r\\n },\\r\\n },\\r\\n tooltip: {},\\r\\n legend: {\\r\\n data: ['Bench Levels', 'Time'],\\r\\n },\\r\\n xAxis: {\\r\\n name: 'Time',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\r\\n },\\r\\n yAxis: {\\r\\n name: 'Bench Levels',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n },\\r\\n series: [\\r\\n {\\r\\n name: 'Bench Levels',\\r\\n type: 'bar',\\r\\n data: [5, 20, 36, 10, 10, 20],\\r\\n },\\r\\n {\\r\\n name: 'Time',\\r\\n type: 'line',\\r\\n data: [2, 1, 10, 0, 0, 18],\\r\\n },\\r\\n ],\\r\\n };\\r\\n return window.innerHeight * 0.4} options={options}/>;\\r\\n};\\r\\n\",\"locationsMap\":{\"e-chart-base\":{\"startLoc\":{\"col\":26,\"line\":14},\"endLoc\":{\"col\":1,\"line\":57},\"startBody\":{\"col\":26,\"line\":14},\"endBody\":{\"col\":1,\"line\":57}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport DHITheme from '../theme';\\nimport { BaseChart } from './BaseChart';\\n\\nexport default {\\n title: 'Chart Components',\\n component: BaseChart,\\n} as Meta;\\n\\nexport const eChartBase = () => {\\n const nameTextStyle = {\\n fontSize: 20,\\n padding: 20,\\n };\\n\\n const options = {\\n title: {\\n text: 'ECharts Base example',\\n textStyle: {\\n color: DHITheme.palette.primary.main,\\n fontSize: 20,\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\n },\\n },\\n tooltip: {},\\n legend: {\\n data: ['Bench Levels', 'Time'],\\n },\\n xAxis: {\\n name: 'Time',\\n nameLocation: 'center',\\n nameTextStyle,\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\n },\\n yAxis: {\\n name: 'Bench Levels',\\n nameLocation: 'center',\\n nameTextStyle,\\n },\\n series: [\\n {\\n name: 'Bench Levels',\\n type: 'bar',\\n data: [5, 20, 36, 10, 10, 20],\\n },\\n {\\n name: 'Time',\\n type: 'line',\\n data: [2, 1, 10, 0, 0, 18],\\n },\\n ],\\n };\\n\\n return window.innerHeight * 0.4} options={options} />;\\n};\\n\", \"locationsMap\": { \"e-chart-base\": { \"startLoc\": { \"col\": 26, \"line\": 11 }, \"endLoc\": { \"col\": 1, \"line\": 56 }, \"startBody\": { \"col\": 26, \"line\": 11 }, \"endBody\": { \"col\": 1, \"line\": 56 } } } }, },\r\n title: 'Chart Components',\r\n component: BaseChart,\r\n};\r\nexport const eChartBase = () => {\r\n const nameTextStyle = {\r\n fontSize: 20,\r\n padding: 20,\r\n };\r\n const options = {\r\n title: {\r\n text: 'ECharts Base example',\r\n textStyle: {\r\n color: DHITheme.palette.primary.main,\r\n fontSize: 20,\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n },\r\n },\r\n tooltip: {},\r\n legend: {\r\n data: ['Bench Levels', 'Time'],\r\n },\r\n xAxis: {\r\n name: 'Time',\r\n nameLocation: 'center',\r\n nameTextStyle,\r\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\r\n },\r\n yAxis: {\r\n name: 'Bench Levels',\r\n nameLocation: 'center',\r\n nameTextStyle,\r\n },\r\n series: [\r\n {\r\n name: 'Bench Levels',\r\n type: 'bar',\r\n data: [5, 20, 36, 10, 10, 20],\r\n },\r\n {\r\n name: 'Time',\r\n type: 'line',\r\n data: [2, 1, 10, 0, 0, 18],\r\n },\r\n ],\r\n };\r\n return window.innerHeight * 0.4} options={options}/>;\r\n};\r\n\n\n\neChartBase.parameters = { storySource: { source: \"() => {\\r\\n const nameTextStyle = {\\r\\n fontSize: 20,\\r\\n padding: 20,\\r\\n };\\r\\n const options = {\\r\\n title: {\\r\\n text: 'ECharts Base example',\\r\\n textStyle: {\\r\\n color: DHITheme.palette.primary.main,\\r\\n fontSize: 20,\\r\\n fontFamily: '\\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif',\\r\\n },\\r\\n },\\r\\n tooltip: {},\\r\\n legend: {\\r\\n data: ['Bench Levels', 'Time'],\\r\\n },\\r\\n xAxis: {\\r\\n name: 'Time',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n data: ['Oct 31', 'Nov 1', 'Nov 2', 'Nov 3', 'Nov 4', 'Nov 5'],\\r\\n },\\r\\n yAxis: {\\r\\n name: 'Bench Levels',\\r\\n nameLocation: 'center',\\r\\n nameTextStyle,\\r\\n },\\r\\n series: [\\r\\n {\\r\\n name: 'Bench Levels',\\r\\n type: 'bar',\\r\\n data: [5, 20, 36, 10, 10, 20],\\r\\n },\\r\\n {\\r\\n name: 'Time',\\r\\n type: 'line',\\r\\n data: [2, 1, 10, 0, 0, 18],\\r\\n },\\r\\n ],\\r\\n };\\r\\n return window.innerHeight * 0.4} options={options}/>;\\r\\n}\" }, ...eChartBase.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { JobList } from './JobList/JobList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Jobs Components',\\\\\\\\n component: JobList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const JobListStory = () => {\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'wf-jobs',\\\\\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\\\\\n },\\\\\\\\n // {\\\\\\\\n // host: \\\\\\\\\\\\\\\"https://api-dev.seaportopx.com\\\\\\\\\\\\\\\",\\\\\\\\n // connection: \\\\\\\\\\\\\\\"MarineAid-Jobs-NCOS\\\\\\\\\\\\\\\",\\\\\\\\n // connectionJobLog: \\\\\\\\\\\\\\\"MarineAid-Logs-NCOS\\\\\\\\\\\\\\\"\\\\\\\\n // }\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['accountId', 'Area'];\\\\\\\\n\\\\\\\\n const parameters = [\\\\\\\\n {\\\\\\\\n parameter: 'Area',\\\\\\\\n label: 'Area',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token: { accessToken } }) => (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"JobListStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } };\\\\r\\\\nimport { addDays } from 'date-fns';\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { JobList } from './JobList/JobList';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { JobList } from './JobList/JobList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Jobs Components',\\\\\\\\n component: JobList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const JobListStory = () => {\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'wf-jobs',\\\\\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\\\\\n },\\\\\\\\n // {\\\\\\\\n // host: \\\\\\\\\\\\\\\"https://api-dev.seaportopx.com\\\\\\\\\\\\\\\",\\\\\\\\n // connection: \\\\\\\\\\\\\\\"MarineAid-Jobs-NCOS\\\\\\\\\\\\\\\",\\\\\\\\n // connectionJobLog: \\\\\\\\\\\\\\\"MarineAid-Logs-NCOS\\\\\\\\\\\\\\\"\\\\\\\\n // }\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['accountId', 'Area'];\\\\\\\\n\\\\\\\\n const parameters = [\\\\\\\\n {\\\\\\\\n parameter: 'Area',\\\\\\\\n label: 'Area',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token: { accessToken } }) => (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"job-list-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } } }, },\\\\r\\\\n title: 'Jobs Components',\\\\r\\\\n component: JobList,\\\\r\\\\n};\\\\r\\\\nexport const JobListStory = () => {\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'wf-jobs',\\\\r\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\r\\\\n },\\\\r\\\\n // {\\\\r\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\r\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\r\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\r\\\\n // }\\\\r\\\\n ];\\\\r\\\\n const disabledColumns = ['accountId', 'Area'];\\\\r\\\\n const parameters = [\\\\r\\\\n {\\\\r\\\\n parameter: 'Area',\\\\r\\\\n label: 'Area',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return (\\\\n {({ token: { accessToken } }) => ( {\\\\r\\\\n console.log(data);\\\\r\\\\n }}/>)}\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"JobListStory\\\":{\\\"startLoc\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":43},\\\"startBody\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":43}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"JobListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { JobList } from './JobList/JobList';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { JobList } from './JobList/JobList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Jobs Components',\\\\\\\\n component: JobList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const JobListStory = () => {\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'wf-jobs',\\\\\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\\\\\n },\\\\\\\\n // {\\\\\\\\n // host: \\\\\\\\\\\\\\\"https://api-dev.seaportopx.com\\\\\\\\\\\\\\\",\\\\\\\\n // connection: \\\\\\\\\\\\\\\"MarineAid-Jobs-NCOS\\\\\\\\\\\\\\\",\\\\\\\\n // connectionJobLog: \\\\\\\\\\\\\\\"MarineAid-Logs-NCOS\\\\\\\\\\\\\\\"\\\\\\\\n // }\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['accountId', 'Area'];\\\\\\\\n\\\\\\\\n const parameters = [\\\\\\\\n {\\\\\\\\n parameter: 'Area',\\\\\\\\n label: 'Area',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token: { accessToken } }) => (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"JobListStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } };\\\\r\\\\nimport { addDays } from 'date-fns';\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { JobList } from './JobList/JobList';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { JobList } from './JobList/JobList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Jobs Components',\\\\\\\\n component: JobList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const JobListStory = () => {\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'wf-jobs',\\\\\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\\\\\n },\\\\\\\\n // {\\\\\\\\n // host: \\\\\\\\\\\\\\\"https://api-dev.seaportopx.com\\\\\\\\\\\\\\\",\\\\\\\\n // connection: \\\\\\\\\\\\\\\"MarineAid-Jobs-NCOS\\\\\\\\\\\\\\\",\\\\\\\\n // connectionJobLog: \\\\\\\\\\\\\\\"MarineAid-Logs-NCOS\\\\\\\\\\\\\\\"\\\\\\\\n // }\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['accountId', 'Area'];\\\\\\\\n\\\\\\\\n const parameters = [\\\\\\\\n {\\\\\\\\n parameter: 'Area',\\\\\\\\n label: 'Area',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token: { accessToken } }) => (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n )}\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"job-list-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } } }, },\\\\r\\\\n title: 'Jobs Components',\\\\r\\\\n component: JobList,\\\\r\\\\n};\\\\r\\\\nexport const JobListStory = () => {\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'wf-jobs',\\\\r\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\r\\\\n },\\\\r\\\\n // {\\\\r\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\r\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\r\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\r\\\\n // }\\\\r\\\\n ];\\\\r\\\\n const disabledColumns = ['accountId', 'Area'];\\\\r\\\\n const parameters = [\\\\r\\\\n {\\\\r\\\\n parameter: 'Area',\\\\r\\\\n label: 'Area',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return (\\\\n {({ token: { accessToken } }) => ( {\\\\r\\\\n console.log(data);\\\\r\\\\n }}/>)}\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"job-list-story\\\":{\\\"startLoc\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":43},\\\"startBody\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":43}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"job-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'Jobs Components',\\r\\n component: JobList,\\r\\n};\\r\\nexport const JobListStory = () => {\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'wf-jobs',\\r\\n connectionJobLog: 'postgres-workflowLogging',\\r\\n },\\r\\n // {\\r\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\r\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\r\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\r\\n // }\\r\\n ];\\r\\n const disabledColumns = ['accountId', 'Area'];\\r\\n const parameters = [\\r\\n {\\r\\n parameter: 'Area',\\r\\n label: 'Area',\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token: { accessToken } }) => ( {\\r\\n console.log(data);\\r\\n }}/>)}\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"JobListStory\":{\"startLoc\":{\"col\":28,\"line\":23},\"endLoc\":{\"col\":1,\"line\":51},\"startBody\":{\"col\":28,\"line\":23},\"endBody\":{\"col\":1,\"line\":51}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"JobListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { JobList } from './JobList/JobList';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"job-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'Jobs Components',\\r\\n component: JobList,\\r\\n};\\r\\nexport const JobListStory = () => {\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'wf-jobs',\\r\\n connectionJobLog: 'postgres-workflowLogging',\\r\\n },\\r\\n // {\\r\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\r\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\r\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\r\\n // }\\r\\n ];\\r\\n const disabledColumns = ['accountId', 'Area'];\\r\\n const parameters = [\\r\\n {\\r\\n parameter: 'Area',\\r\\n label: 'Area',\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token: { accessToken } }) => ( {\\r\\n console.log(data);\\r\\n }}/>)}\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"JobListStory\":{\"startLoc\":{\"col\":28,\"line\":15},\"endLoc\":{\"col\":1,\"line\":43},\"startBody\":{\"col\":28,\"line\":15},\"endBody\":{\"col\":1,\"line\":43}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport { addDays } from 'date-fns';\\nimport React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { JobList } from './JobList/JobList';\\n\\nexport default {\\n title: 'Jobs Components',\\n component: JobList,\\n} as Meta;\\n\\nexport const JobListStory = () => {\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'wf-jobs',\\n connectionJobLog: 'postgres-workflowLogging',\\n },\\n // {\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\n // }\\n ];\\n\\n const disabledColumns = ['accountId', 'Area'];\\n\\n const parameters = [\\n {\\n parameter: 'Area',\\n label: 'Area',\\n },\\n ];\\n\\n return (\\n \\n {({ token: { accessToken } }) => (\\n {\\n console.log(data);\\n }}\\n />\\n )}\\n \\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"JobListStory\": { \"startLoc\": { \"col\": 28, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 57 }, \"startBody\": { \"col\": 28, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 57 } } };\r\nimport { addDays } from 'date-fns';\r\nimport React from 'react';\r\nimport { LoginGate } from '../Auth/LoginGate';\r\nimport { JobList } from './JobList/JobList';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"JobListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { JobList } from './JobList/JobList';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { JobList } from './JobList/JobList';\\\\n\\\\nexport default {\\\\n title: 'Jobs Components',\\\\n component: JobList,\\\\n} as Meta;\\\\n\\\\nexport const JobListStory = () => {\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'wf-jobs',\\\\n connectionJobLog: 'postgres-workflowLogging',\\\\n },\\\\n // {\\\\n // host: \\\\\\\"https://api-dev.seaportopx.com\\\\\\\",\\\\n // connection: \\\\\\\"MarineAid-Jobs-NCOS\\\\\\\",\\\\n // connectionJobLog: \\\\\\\"MarineAid-Logs-NCOS\\\\\\\"\\\\n // }\\\\n ];\\\\n\\\\n const disabledColumns = ['accountId', 'Area'];\\\\n\\\\n const parameters = [\\\\n {\\\\n parameter: 'Area',\\\\n label: 'Area',\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n {({ token: { accessToken } }) => (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n )}\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"job-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'Jobs Components',\\r\\n component: JobList,\\r\\n};\\r\\nexport const JobListStory = () => {\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'wf-jobs',\\r\\n connectionJobLog: 'postgres-workflowLogging',\\r\\n },\\r\\n // {\\r\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\r\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\r\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\r\\n // }\\r\\n ];\\r\\n const disabledColumns = ['accountId', 'Area'];\\r\\n const parameters = [\\r\\n {\\r\\n parameter: 'Area',\\r\\n label: 'Area',\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token: { accessToken } }) => ( {\\r\\n console.log(data);\\r\\n }}/>)}\\n );\\r\\n};\\r\\n\",\"locationsMap\":{\"job-list-story\":{\"startLoc\":{\"col\":28,\"line\":15},\"endLoc\":{\"col\":1,\"line\":43},\"startBody\":{\"col\":28,\"line\":15},\"endBody\":{\"col\":1,\"line\":43}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport { addDays } from 'date-fns';\\nimport React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { JobList } from './JobList/JobList';\\n\\nexport default {\\n title: 'Jobs Components',\\n component: JobList,\\n} as Meta;\\n\\nexport const JobListStory = () => {\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'wf-jobs',\\n connectionJobLog: 'postgres-workflowLogging',\\n },\\n // {\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\n // }\\n ];\\n\\n const disabledColumns = ['accountId', 'Area'];\\n\\n const parameters = [\\n {\\n parameter: 'Area',\\n label: 'Area',\\n },\\n ];\\n\\n return (\\n \\n {({ token: { accessToken } }) => (\\n {\\n console.log(data);\\n }}\\n />\\n )}\\n \\n );\\n};\\n\", \"locationsMap\": { \"job-list-story\": { \"startLoc\": { \"col\": 28, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 57 }, \"startBody\": { \"col\": 28, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 57 } } } }, },\r\n title: 'Jobs Components',\r\n component: JobList,\r\n};\r\nexport const JobListStory = () => {\r\n const dataSources = [\r\n {\r\n host: 'https://domainservices.dhigroup.com',\r\n connection: 'wf-jobs',\r\n connectionJobLog: 'postgres-workflowLogging',\r\n },\r\n // {\r\n // host: \"https://api-dev.seaportopx.com\",\r\n // connection: \"MarineAid-Jobs-NCOS\",\r\n // connectionJobLog: \"MarineAid-Logs-NCOS\"\r\n // }\r\n ];\r\n const disabledColumns = ['accountId', 'Area'];\r\n const parameters = [\r\n {\r\n parameter: 'Area',\r\n label: 'Area',\r\n },\r\n ];\r\n return (\n {({ token: { accessToken } }) => ( {\r\n console.log(data);\r\n }}/>)}\n );\r\n};\r\n\n\n\nJobListStory.parameters = { storySource: { source: \"() => {\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'wf-jobs',\\r\\n connectionJobLog: 'postgres-workflowLogging',\\r\\n },\\r\\n // {\\r\\n // host: \\\"https://api-dev.seaportopx.com\\\",\\r\\n // connection: \\\"MarineAid-Jobs-NCOS\\\",\\r\\n // connectionJobLog: \\\"MarineAid-Logs-NCOS\\\"\\r\\n // }\\r\\n ];\\r\\n const disabledColumns = ['accountId', 'Area'];\\r\\n const parameters = [\\r\\n {\\r\\n parameter: 'Area',\\r\\n label: 'Area',\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token: { accessToken } }) => ( {\\r\\n console.log(data);\\r\\n }}/>)}\\n );\\r\\n}\" }, ...JobListStory.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchToken } from '../api';\\\\\\\\nimport { LogList } from './LogList/LogList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Logs Components',\\\\\\\\n component: LogList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const LogListStory = () => {\\\\\\\\n const [token, setToken] = useState();\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger1',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger2',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\\\\\n id: process.env.USERUSER!,\\\\\\\\n password: process.env.USERPASSWORD!,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n console.log('Error Fetching Token');\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n if (token) {\\\\\\\\n return (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n return null;\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"LogListStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 } } };\\\\r\\\\nimport { addDays } from 'date-fns';\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchToken } from '../api';\\\\r\\\\nimport { LogList } from './LogList/LogList';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchToken } from '../api';\\\\\\\\nimport { LogList } from './LogList/LogList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Logs Components',\\\\\\\\n component: LogList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const LogListStory = () => {\\\\\\\\n const [token, setToken] = useState();\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger1',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger2',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\\\\\n id: process.env.USERUSER!,\\\\\\\\n password: process.env.USERPASSWORD!,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n console.log('Error Fetching Token');\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n if (token) {\\\\\\\\n return (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n return null;\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"log-list-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 } } } }, },\\\\r\\\\n title: 'Logs Components',\\\\r\\\\n component: LogList,\\\\r\\\\n};\\\\r\\\\nexport const LogListStory = () => {\\\\r\\\\n const [token, setToken] = useState();\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger1',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger2',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n console.log('Error Fetching Token');\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n if (token) {\\\\r\\\\n return ( {\\\\r\\\\n console.log(data);\\\\r\\\\n }}/>);\\\\r\\\\n }\\\\r\\\\n return null;\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"LogListStory\\\":{\\\"startLoc\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":52},\\\"startBody\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":52}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LogListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchToken } from '../api';\\r\\nimport { LogList } from './LogList/LogList';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchToken } from '../api';\\\\\\\\nimport { LogList } from './LogList/LogList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Logs Components',\\\\\\\\n component: LogList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const LogListStory = () => {\\\\\\\\n const [token, setToken] = useState();\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger1',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger2',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\\\\\n id: process.env.USERUSER!,\\\\\\\\n password: process.env.USERPASSWORD!,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n console.log('Error Fetching Token');\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n if (token) {\\\\\\\\n return (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n return null;\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"LogListStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 } } };\\\\r\\\\nimport { addDays } from 'date-fns';\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchToken } from '../api';\\\\r\\\\nimport { LogList } from './LogList/LogList';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchToken } from '../api';\\\\\\\\nimport { LogList } from './LogList/LogList';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Logs Components',\\\\\\\\n component: LogList,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const LogListStory = () => {\\\\\\\\n const [token, setToken] = useState();\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger1',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'postgres-logger2',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\\\\\n id: process.env.USERUSER!,\\\\\\\\n password: process.env.USERPASSWORD!,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n console.log('Error Fetching Token');\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n if (token) {\\\\\\\\n return (\\\\\\\\n {\\\\\\\\n console.log(data);\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n return null;\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"log-list-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 28, \\\\\\\"line\\\\\\\": 12 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 69 } } } }, },\\\\r\\\\n title: 'Logs Components',\\\\r\\\\n component: LogList,\\\\r\\\\n};\\\\r\\\\nexport const LogListStory = () => {\\\\r\\\\n const [token, setToken] = useState();\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger1',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'postgres-logger2',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n console.log('Error Fetching Token');\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n if (token) {\\\\r\\\\n return ( {\\\\r\\\\n console.log(data);\\\\r\\\\n }}/>);\\\\r\\\\n }\\\\r\\\\n return null;\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"log-list-story\\\":{\\\"startLoc\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":52},\\\"startBody\\\":{\\\"col\\\":28,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":52}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"log-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } } }, },\\r\\n title: 'Logs Components',\\r\\n component: LogList,\\r\\n};\\r\\nexport const LogListStory = () => {\\r\\n const [token, setToken] = useState();\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger1',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger2',\\r\\n },\\r\\n ];\\r\\n const disabledColumns = ['id', 'machineName', 'tag'];\\r\\n useEffect(() => {\\r\\n fetchToken(process.env.ENDPOINT_URL, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n console.log('Error Fetching Token');\\r\\n });\\r\\n }, []);\\r\\n if (token) {\\r\\n return ( {\\r\\n console.log(data);\\r\\n }}/>);\\r\\n }\\r\\n return null;\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"LogListStory\":{\"startLoc\":{\"col\":28,\"line\":23},\"endLoc\":{\"col\":1,\"line\":60},\"startBody\":{\"col\":28,\"line\":23},\"endBody\":{\"col\":1,\"line\":60}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LogListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchToken } from '../api';\\r\\nimport { LogList } from './LogList/LogList';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"log-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } } }, },\\r\\n title: 'Logs Components',\\r\\n component: LogList,\\r\\n};\\r\\nexport const LogListStory = () => {\\r\\n const [token, setToken] = useState();\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger1',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger2',\\r\\n },\\r\\n ];\\r\\n const disabledColumns = ['id', 'machineName', 'tag'];\\r\\n useEffect(() => {\\r\\n fetchToken(process.env.ENDPOINT_URL, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n console.log('Error Fetching Token');\\r\\n });\\r\\n }, []);\\r\\n if (token) {\\r\\n return ( {\\r\\n console.log(data);\\r\\n }}/>);\\r\\n }\\r\\n return null;\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"LogListStory\":{\"startLoc\":{\"col\":28,\"line\":15},\"endLoc\":{\"col\":1,\"line\":52},\"startBody\":{\"col\":28,\"line\":15},\"endBody\":{\"col\":1,\"line\":52}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport { addDays } from 'date-fns';\\nimport React, { useEffect, useState } from 'react';\\nimport { fetchToken } from '../api';\\nimport { LogList } from './LogList/LogList';\\n\\nexport default {\\n title: 'Logs Components',\\n component: LogList,\\n} as Meta;\\n\\nexport const LogListStory = () => {\\n const [token, setToken] = useState();\\n\\n const dataSources = [\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger',\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger1',\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger2',\\n },\\n ];\\n\\n const disabledColumns = ['id', 'machineName', 'tag'];\\n\\n useEffect(() => {\\n fetchToken(process.env.ENDPOINT_URL, {\\n id: process.env.USERUSER!,\\n password: process.env.USERPASSWORD!,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n },\\n (err) => {\\n console.log(err);\\n console.log('Error Fetching Token');\\n },\\n );\\n }, []);\\n\\n if (token) {\\n return (\\n {\\n console.log(data);\\n }}\\n />\\n );\\n }\\n\\n return null;\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"LogListStory\": { \"startLoc\": { \"col\": 28, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 69 }, \"startBody\": { \"col\": 28, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 69 } } };\r\nimport { addDays } from 'date-fns';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { fetchToken } from '../api';\r\nimport { LogList } from './LogList/LogList';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LogListStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } };\\r\\nimport { addDays } from 'date-fns';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchToken } from '../api';\\r\\nimport { LogList } from './LogList/LogList';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchToken } from '../api';\\\\nimport { LogList } from './LogList/LogList';\\\\n\\\\nexport default {\\\\n title: 'Logs Components',\\\\n component: LogList,\\\\n} as Meta;\\\\n\\\\nexport const LogListStory = () => {\\\\n const [token, setToken] = useState();\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger1',\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'postgres-logger2',\\\\n },\\\\n ];\\\\n\\\\n const disabledColumns = ['id', 'machineName', 'tag'];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(process.env.ENDPOINT_URL, {\\\\n id: process.env.USERUSER!,\\\\n password: process.env.USERPASSWORD!,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n console.log('Error Fetching Token');\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n if (token) {\\\\n return (\\\\n {\\\\n console.log(data);\\\\n }}\\\\n />\\\\n );\\\\n }\\\\n\\\\n return null;\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"log-list-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 69 }, \\\"startBody\\\": { \\\"col\\\": 28, \\\"line\\\": 12 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 69 } } } }, },\\r\\n title: 'Logs Components',\\r\\n component: LogList,\\r\\n};\\r\\nexport const LogListStory = () => {\\r\\n const [token, setToken] = useState();\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger1',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger2',\\r\\n },\\r\\n ];\\r\\n const disabledColumns = ['id', 'machineName', 'tag'];\\r\\n useEffect(() => {\\r\\n fetchToken(process.env.ENDPOINT_URL, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n console.log('Error Fetching Token');\\r\\n });\\r\\n }, []);\\r\\n if (token) {\\r\\n return ( {\\r\\n console.log(data);\\r\\n }}/>);\\r\\n }\\r\\n return null;\\r\\n};\\r\\n\",\"locationsMap\":{\"log-list-story\":{\"startLoc\":{\"col\":28,\"line\":15},\"endLoc\":{\"col\":1,\"line\":52},\"startBody\":{\"col\":28,\"line\":15},\"endBody\":{\"col\":1,\"line\":52}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport { addDays } from 'date-fns';\\nimport React, { useEffect, useState } from 'react';\\nimport { fetchToken } from '../api';\\nimport { LogList } from './LogList/LogList';\\n\\nexport default {\\n title: 'Logs Components',\\n component: LogList,\\n} as Meta;\\n\\nexport const LogListStory = () => {\\n const [token, setToken] = useState();\\n\\n const dataSources = [\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger',\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger1',\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'postgres-logger2',\\n },\\n ];\\n\\n const disabledColumns = ['id', 'machineName', 'tag'];\\n\\n useEffect(() => {\\n fetchToken(process.env.ENDPOINT_URL, {\\n id: process.env.USERUSER!,\\n password: process.env.USERPASSWORD!,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n },\\n (err) => {\\n console.log(err);\\n console.log('Error Fetching Token');\\n },\\n );\\n }, []);\\n\\n if (token) {\\n return (\\n {\\n console.log(data);\\n }}\\n />\\n );\\n }\\n\\n return null;\\n};\\n\", \"locationsMap\": { \"log-list-story\": { \"startLoc\": { \"col\": 28, \"line\": 12 }, \"endLoc\": { \"col\": 1, \"line\": 69 }, \"startBody\": { \"col\": 28, \"line\": 12 }, \"endBody\": { \"col\": 1, \"line\": 69 } } } }, },\r\n title: 'Logs Components',\r\n component: LogList,\r\n};\r\nexport const LogListStory = () => {\r\n const [token, setToken] = useState();\r\n const dataSources = [\r\n {\r\n host: process.env.ENDPOINT_URL,\r\n connection: 'postgres-logger',\r\n },\r\n {\r\n host: process.env.ENDPOINT_URL,\r\n connection: 'postgres-logger1',\r\n },\r\n {\r\n host: process.env.ENDPOINT_URL,\r\n connection: 'postgres-logger2',\r\n },\r\n ];\r\n const disabledColumns = ['id', 'machineName', 'tag'];\r\n useEffect(() => {\r\n fetchToken(process.env.ENDPOINT_URL, {\r\n id: process.env.USERUSER,\r\n password: process.env.USERPASSWORD,\r\n }).subscribe((res) => {\r\n setToken(res.accessToken.token);\r\n }, (err) => {\r\n console.log(err);\r\n console.log('Error Fetching Token');\r\n });\r\n }, []);\r\n if (token) {\r\n return ( {\r\n console.log(data);\r\n }}/>);\r\n }\r\n return null;\r\n};\r\n\n\n\nLogListStory.parameters = { storySource: { source: \"() => {\\r\\n const [token, setToken] = useState();\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger1',\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'postgres-logger2',\\r\\n },\\r\\n ];\\r\\n const disabledColumns = ['id', 'machineName', 'tag'];\\r\\n useEffect(() => {\\r\\n fetchToken(process.env.ENDPOINT_URL, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n console.log('Error Fetching Token');\\r\\n });\\r\\n }, []);\\r\\n if (token) {\\r\\n return ( {\\r\\n console.log(data);\\r\\n }}/>);\\r\\n }\\r\\n return null;\\r\\n}\" }, ...LogListStory.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Timeseries Components',\\\\\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\\\\\n decorators: [withKnobs],\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExporterStory = () => {\\\\\\\\n const [data, setData] = useState();\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(dataSources[0].host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\\\\\n setData(data);\\\\\\\\n });\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n const timeseries = [\\\\\\\\n {\\\\\\\\n name: 'Timeseries 1',\\\\\\\\n decimals: 2,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 2',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 3',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 4',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExplorerEChart = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n token && (\\\\\\\\n \\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"TimeseriesExporterStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 } }, \\\\\\\"TimeseriesExplorerEChart\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 } } };\\\\r\\\\nimport { withKnobs } from '@storybook/addon-knobs';\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\r\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\r\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Timeseries Components',\\\\\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\\\\\n decorators: [withKnobs],\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExporterStory = () => {\\\\\\\\n const [data, setData] = useState();\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(dataSources[0].host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\\\\\n setData(data);\\\\\\\\n });\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n const timeseries = [\\\\\\\\n {\\\\\\\\n name: 'Timeseries 1',\\\\\\\\n decimals: 2,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 2',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 3',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 4',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExplorerEChart = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n token && (\\\\\\\\n \\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"timeseries-exporter-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 } }, \\\\\\\"timeseries-explorer-e-chart\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 } } } }, },\\\\r\\\\n title: 'Timeseries Components',\\\\r\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\r\\\\n decorators: [withKnobs],\\\\r\\\\n};\\\\r\\\\nexport const TimeseriesExporterStory = () => {\\\\r\\\\n const [data, setData] = useState();\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(dataSources[0].host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\r\\\\n setData(data);\\\\r\\\\n });\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n const timeseries = [\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 1',\\\\r\\\\n decimals: 2,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 2',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 3',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 4',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n from: '2012-10-30T00:00:00',\\\\r\\\\n to: '2012-11-07T00:00:00',\\\\r\\\\n ids: [\\\\r\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\r\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\r\\\\n ],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n from: '2012-10-30T00:00:00',\\\\r\\\\n to: '2012-11-07T00:00:00',\\\\r\\\\n ids: [\\\\r\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\r\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\r\\\\n ],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return ();\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const TimeseriesExplorerEChart = () => {\\\\r\\\\n const host = process.env.ENDPOINT_URL;\\\\r\\\\n const [token, setToken] = useState('');\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n return (token && ());\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"TimeseriesExporterStory\\\":{\\\"startLoc\\\":{\\\"col\\\":39,\\\"line\\\":17},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":72},\\\"startBody\\\":{\\\"col\\\":39,\\\"line\\\":17},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":72}},\\\"TimeseriesExplorerEChart\\\":{\\\"startLoc\\\":{\\\"col\\\":40,\\\"line\\\":74},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":94},\\\"startBody\\\":{\\\"col\\\":40,\\\"line\\\":74},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":94}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TimeseriesExporterStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"TimeseriesExplorerEChart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\r\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\r\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Timeseries Components',\\\\\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\\\\\n decorators: [withKnobs],\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExporterStory = () => {\\\\\\\\n const [data, setData] = useState();\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(dataSources[0].host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\\\\\n setData(data);\\\\\\\\n });\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n const timeseries = [\\\\\\\\n {\\\\\\\\n name: 'Timeseries 1',\\\\\\\\n decimals: 2,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 2',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 3',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 4',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExplorerEChart = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n token && (\\\\\\\\n \\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"TimeseriesExporterStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 } }, \\\\\\\"TimeseriesExplorerEChart\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 } } };\\\\r\\\\nimport { withKnobs } from '@storybook/addon-knobs';\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\r\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\r\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { withKnobs } from '@storybook/addon-knobs';\\\\\\\\nimport { addDays } from 'date-fns';\\\\\\\\nimport React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Timeseries Components',\\\\\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\\\\\n decorators: [withKnobs],\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExporterStory = () => {\\\\\\\\n const [data, setData] = useState();\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(dataSources[0].host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\\\\\n setData(data);\\\\\\\\n });\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n const timeseries = [\\\\\\\\n {\\\\\\\\n name: 'Timeseries 1',\\\\\\\\n decimals: 2,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 2',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 3',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Timeseries 4',\\\\\\\\n decimals: 3,\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n host: process.env.ENDPOINT_URL,\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n from: '2012-10-30T00:00:00',\\\\\\\\n to: '2012-11-07T00:00:00',\\\\\\\\n ids: [\\\\\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\\\\\n ],\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TimeseriesExplorerEChart = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n token && (\\\\\\\\n \\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"timeseries-exporter-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 39, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 86 } }, \\\\\\\"timeseries-explorer-e-chart\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 40, \\\\\\\"line\\\\\\\": 88 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 125 } } } }, },\\\\r\\\\n title: 'Timeseries Components',\\\\r\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\r\\\\n decorators: [withKnobs],\\\\r\\\\n};\\\\r\\\\nexport const TimeseriesExporterStory = () => {\\\\r\\\\n const [data, setData] = useState();\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(dataSources[0].host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\r\\\\n setData(data);\\\\r\\\\n });\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n const timeseries = [\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 1',\\\\r\\\\n decimals: 2,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 2',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 3',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Timeseries 4',\\\\r\\\\n decimals: 3,\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n from: '2012-10-30T00:00:00',\\\\r\\\\n to: '2012-11-07T00:00:00',\\\\r\\\\n ids: [\\\\r\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\r\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\r\\\\n ],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n host: process.env.ENDPOINT_URL,\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n from: '2012-10-30T00:00:00',\\\\r\\\\n to: '2012-11-07T00:00:00',\\\\r\\\\n ids: [\\\\r\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\r\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\r\\\\n ],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return ();\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const TimeseriesExplorerEChart = () => {\\\\r\\\\n const host = process.env.ENDPOINT_URL;\\\\r\\\\n const [token, setToken] = useState('');\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n return (token && ());\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"timeseries-exporter-story\\\":{\\\"startLoc\\\":{\\\"col\\\":39,\\\"line\\\":17},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":72},\\\"startBody\\\":{\\\"col\\\":39,\\\"line\\\":17},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":72}},\\\"timeseries-explorer-e-chart\\\":{\\\"startLoc\\\":{\\\"col\\\":40,\\\"line\\\":74},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":94},\\\"startBody\\\":{\\\"col\\\":40,\\\"line\\\":74},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":94}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"timeseries-exporter-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"timeseries-explorer-e-chart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } } }, },\\r\\n title: 'Timeseries Components',\\r\\n component: [TimeseriesExplorer, TimeseriesExporter],\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const TimeseriesExporterStory = () => {\\r\\n const [data, setData] = useState();\\r\\n useEffect(() => {\\r\\n fetchToken(dataSources[0].host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\r\\n setData(data);\\r\\n });\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n const timeseries = [\\r\\n {\\r\\n name: 'Timeseries 1',\\r\\n decimals: 2,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 2',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 3',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 4',\\r\\n decimals: 3,\\r\\n },\\r\\n ];\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n ];\\r\\n return ();\\r\\n};;\\r\\n;\\r\\nexport const TimeseriesExplorerEChart = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (token && ());\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"TimeseriesExporterStory\":{\"startLoc\":{\"col\":39,\"line\":25},\"endLoc\":{\"col\":1,\"line\":80},\"startBody\":{\"col\":39,\"line\":25},\"endBody\":{\"col\":1,\"line\":80}},\"TimeseriesExplorerEChart\":{\"startLoc\":{\"col\":40,\"line\":82},\"endLoc\":{\"col\":1,\"line\":102},\"startBody\":{\"col\":40,\"line\":82},\"endBody\":{\"col\":1,\"line\":102}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TimeseriesExporterStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"TimeseriesExplorerEChart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\r\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\r\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"timeseries-exporter-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"timeseries-explorer-e-chart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } } }, },\\r\\n title: 'Timeseries Components',\\r\\n component: [TimeseriesExplorer, TimeseriesExporter],\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const TimeseriesExporterStory = () => {\\r\\n const [data, setData] = useState();\\r\\n useEffect(() => {\\r\\n fetchToken(dataSources[0].host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\r\\n setData(data);\\r\\n });\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n const timeseries = [\\r\\n {\\r\\n name: 'Timeseries 1',\\r\\n decimals: 2,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 2',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 3',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 4',\\r\\n decimals: 3,\\r\\n },\\r\\n ];\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n ];\\r\\n return ();\\r\\n};\\r\\n;\\r\\nexport const TimeseriesExplorerEChart = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (token && ());\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"TimeseriesExporterStory\":{\"startLoc\":{\"col\":39,\"line\":17},\"endLoc\":{\"col\":1,\"line\":72},\"startBody\":{\"col\":39,\"line\":17},\"endBody\":{\"col\":1,\"line\":72}},\"TimeseriesExplorerEChart\":{\"startLoc\":{\"col\":40,\"line\":74},\"endLoc\":{\"col\":1,\"line\":94},\"startBody\":{\"col\":40,\"line\":74},\"endBody\":{\"col\":1,\"line\":94}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { withKnobs } from '@storybook/addon-knobs';\\nimport { addDays } from 'date-fns';\\nimport React, { useEffect, useState } from 'react';\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\n\\nexport default {\\n title: 'Timeseries Components',\\n component: [TimeseriesExplorer, TimeseriesExporter],\\n decorators: [withKnobs],\\n};\\n\\nexport const TimeseriesExporterStory = () => {\\n const [data, setData] = useState();\\n\\n useEffect(() => {\\n fetchToken(dataSources[0].host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\n setData(data);\\n });\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n const timeseries = [\\n {\\n name: 'Timeseries 1',\\n decimals: 2,\\n },\\n {\\n name: 'Timeseries 2',\\n decimals: 3,\\n },\\n {\\n name: 'Timeseries 3',\\n decimals: 3,\\n },\\n {\\n name: 'Timeseries 4',\\n decimals: 3,\\n },\\n ];\\n\\n const dataSources = [\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'mclite-timeseries',\\n from: '2012-10-30T00:00:00',\\n to: '2012-11-07T00:00:00',\\n ids: [\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\n ],\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'mclite-timeseries',\\n from: '2012-10-30T00:00:00',\\n to: '2012-11-07T00:00:00',\\n ids: [\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\n ],\\n },\\n ];\\n\\n return (\\n \\n );\\n};\\n\\nexport const TimeseriesExplorerEChart = () => {\\n const host = process.env.ENDPOINT_URL;\\n const [token, setToken] = useState('');\\n\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'mclite-timeseries',\\n },\\n ];\\n\\n useEffect(() => {\\n fetchToken(host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n return (\\n token && (\\n \\n )\\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"TimeseriesExporterStory\": { \"startLoc\": { \"col\": 39, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 86 }, \"startBody\": { \"col\": 39, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 86 } }, \"TimeseriesExplorerEChart\": { \"startLoc\": { \"col\": 40, \"line\": 88 }, \"endLoc\": { \"col\": 1, \"line\": 125 }, \"startBody\": { \"col\": 40, \"line\": 88 }, \"endBody\": { \"col\": 1, \"line\": 125 } } };\r\nimport { withKnobs } from '@storybook/addon-knobs';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { fetchTimeseriesValues, fetchToken } from '../api';\r\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\r\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TimeseriesExporterStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"TimeseriesExplorerEChart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } };\\r\\nimport { withKnobs } from '@storybook/addon-knobs';\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\r\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\r\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { withKnobs } from '@storybook/addon-knobs';\\\\nimport { addDays } from 'date-fns';\\\\nimport React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\\\n\\\\nexport default {\\\\n title: 'Timeseries Components',\\\\n component: [TimeseriesExplorer, TimeseriesExporter],\\\\n decorators: [withKnobs],\\\\n};\\\\n\\\\nexport const TimeseriesExporterStory = () => {\\\\n const [data, setData] = useState();\\\\n\\\\n useEffect(() => {\\\\n fetchToken(dataSources[0].host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\\\n setData(data);\\\\n });\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n const timeseries = [\\\\n {\\\\n name: 'Timeseries 1',\\\\n decimals: 2,\\\\n },\\\\n {\\\\n name: 'Timeseries 2',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 3',\\\\n decimals: 3,\\\\n },\\\\n {\\\\n name: 'Timeseries 4',\\\\n decimals: 3,\\\\n },\\\\n ];\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n {\\\\n host: process.env.ENDPOINT_URL,\\\\n connection: 'mclite-timeseries',\\\\n from: '2012-10-30T00:00:00',\\\\n to: '2012-11-07T00:00:00',\\\\n ids: [\\\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\\\n ],\\\\n },\\\\n ];\\\\n\\\\n return (\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const TimeseriesExplorerEChart = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n token && (\\\\n \\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"timeseries-exporter-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 86 }, \\\"startBody\\\": { \\\"col\\\": 39, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 86 } }, \\\"timeseries-explorer-e-chart\\\": { \\\"startLoc\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 125 }, \\\"startBody\\\": { \\\"col\\\": 40, \\\"line\\\": 88 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 125 } } } }, },\\r\\n title: 'Timeseries Components',\\r\\n component: [TimeseriesExplorer, TimeseriesExporter],\\r\\n decorators: [withKnobs],\\r\\n};\\r\\nexport const TimeseriesExporterStory = () => {\\r\\n const [data, setData] = useState();\\r\\n useEffect(() => {\\r\\n fetchToken(dataSources[0].host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\r\\n setData(data);\\r\\n });\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n const timeseries = [\\r\\n {\\r\\n name: 'Timeseries 1',\\r\\n decimals: 2,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 2',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 3',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 4',\\r\\n decimals: 3,\\r\\n },\\r\\n ];\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n ];\\r\\n return ();\\r\\n};\\r\\n;\\r\\nexport const TimeseriesExplorerEChart = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (token && ());\\r\\n};\\r\\n\",\"locationsMap\":{\"timeseries-exporter-story\":{\"startLoc\":{\"col\":39,\"line\":17},\"endLoc\":{\"col\":1,\"line\":72},\"startBody\":{\"col\":39,\"line\":17},\"endBody\":{\"col\":1,\"line\":72}},\"timeseries-explorer-e-chart\":{\"startLoc\":{\"col\":40,\"line\":74},\"endLoc\":{\"col\":1,\"line\":94},\"startBody\":{\"col\":40,\"line\":74},\"endBody\":{\"col\":1,\"line\":94}}}}, \"storySource\": { \"source\": \"import { withKnobs } from '@storybook/addon-knobs';\\nimport { addDays } from 'date-fns';\\nimport React, { useEffect, useState } from 'react';\\nimport { fetchTimeseriesValues, fetchToken } from '../api';\\nimport { TimeseriesExplorer } from './TimeseriesExplorer/Timeseries';\\nimport { TimeseriesExporter } from './TimeseriesExporter/TimeseriesExporter';\\n\\nexport default {\\n title: 'Timeseries Components',\\n component: [TimeseriesExplorer, TimeseriesExporter],\\n decorators: [withKnobs],\\n};\\n\\nexport const TimeseriesExporterStory = () => {\\n const [data, setData] = useState();\\n\\n useEffect(() => {\\n fetchToken(dataSources[0].host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\n setData(data);\\n });\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n const timeseries = [\\n {\\n name: 'Timeseries 1',\\n decimals: 2,\\n },\\n {\\n name: 'Timeseries 2',\\n decimals: 3,\\n },\\n {\\n name: 'Timeseries 3',\\n decimals: 3,\\n },\\n {\\n name: 'Timeseries 4',\\n decimals: 3,\\n },\\n ];\\n\\n const dataSources = [\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'mclite-timeseries',\\n from: '2012-10-30T00:00:00',\\n to: '2012-11-07T00:00:00',\\n ids: [\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\n ],\\n },\\n {\\n host: process.env.ENDPOINT_URL,\\n connection: 'mclite-timeseries',\\n from: '2012-10-30T00:00:00',\\n to: '2012-11-07T00:00:00',\\n ids: [\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\n ],\\n },\\n ];\\n\\n return (\\n \\n );\\n};\\n\\nexport const TimeseriesExplorerEChart = () => {\\n const host = process.env.ENDPOINT_URL;\\n const [token, setToken] = useState('');\\n\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'mclite-timeseries',\\n },\\n ];\\n\\n useEffect(() => {\\n fetchToken(host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n return (\\n token && (\\n \\n )\\n );\\n};\\n\", \"locationsMap\": { \"timeseries-exporter-story\": { \"startLoc\": { \"col\": 39, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 86 }, \"startBody\": { \"col\": 39, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 86 } }, \"timeseries-explorer-e-chart\": { \"startLoc\": { \"col\": 40, \"line\": 88 }, \"endLoc\": { \"col\": 1, \"line\": 125 }, \"startBody\": { \"col\": 40, \"line\": 88 }, \"endBody\": { \"col\": 1, \"line\": 125 } } } }, },\r\n title: 'Timeseries Components',\r\n component: [TimeseriesExplorer, TimeseriesExporter],\r\n decorators: [withKnobs],\r\n};\r\nexport const TimeseriesExporterStory = () => {\r\n const [data, setData] = useState();\r\n useEffect(() => {\r\n fetchToken(dataSources[0].host, {\r\n id: process.env.USERUSER,\r\n password: process.env.USERPASSWORD,\r\n }).subscribe((res) => {\r\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\r\n setData(data);\r\n });\r\n }, (err) => {\r\n console.log(err);\r\n });\r\n }, []);\r\n const timeseries = [\r\n {\r\n name: 'Timeseries 1',\r\n decimals: 2,\r\n },\r\n {\r\n name: 'Timeseries 2',\r\n decimals: 3,\r\n },\r\n {\r\n name: 'Timeseries 3',\r\n decimals: 3,\r\n },\r\n {\r\n name: 'Timeseries 4',\r\n decimals: 3,\r\n },\r\n ];\r\n const dataSources = [\r\n {\r\n host: process.env.ENDPOINT_URL,\r\n connection: 'mclite-timeseries',\r\n from: '2012-10-30T00:00:00',\r\n to: '2012-11-07T00:00:00',\r\n ids: [\r\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\r\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\r\n ],\r\n },\r\n {\r\n host: process.env.ENDPOINT_URL,\r\n connection: 'mclite-timeseries',\r\n from: '2012-10-30T00:00:00',\r\n to: '2012-11-07T00:00:00',\r\n ids: [\r\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\r\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\r\n ],\r\n },\r\n ];\r\n return ();\r\n};;;\r\n;\r\nexport const TimeseriesExplorerEChart = () => {\r\n const host = process.env.ENDPOINT_URL;\r\n const [token, setToken] = useState('');\r\n const dataSources = [\r\n {\r\n host: 'https://domainservices.dhigroup.com',\r\n connection: 'mclite-timeseries',\r\n },\r\n ];\r\n useEffect(() => {\r\n fetchToken(host, {\r\n id: process.env.USERUSER,\r\n password: process.env.USERPASSWORD,\r\n }).subscribe((res) => {\r\n setToken(res.accessToken.token);\r\n }, (err) => {\r\n console.log(err);\r\n });\r\n }, []);\r\n return (token && ());\r\n};\r\n\n\n\nTimeseriesExporterStory.parameters = { storySource: { source: \"() => {\\r\\n const [data, setData] = useState();\\r\\n useEffect(() => {\\r\\n fetchToken(dataSources[0].host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n fetchTimeseriesValues(dataSources, res.accessToken.token).subscribe((data) => {\\r\\n setData(data);\\r\\n });\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n const timeseries = [\\r\\n {\\r\\n name: 'Timeseries 1',\\r\\n decimals: 2,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 2',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 3',\\r\\n decimals: 3,\\r\\n },\\r\\n {\\r\\n name: 'Timeseries 4',\\r\\n decimals: 3,\\r\\n },\\r\\n ];\\r\\n const dataSources = [\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/6790_HUDINJA_SKOFJA_VAS_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/7060_KRKA_SOTESKA_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n {\\r\\n host: process.env.ENDPOINT_URL,\\r\\n connection: 'mclite-timeseries',\\r\\n from: '2012-10-30T00:00:00',\\r\\n to: '2012-11-07T00:00:00',\\r\\n ids: [\\r\\n 'Telemetry/Catchment rainfall/GRADASCICA_BOKALCI_Rainfall.dfs0 [weighted]',\\r\\n 'Telemetry/Catchment rainfall/KRKA_PODBOCJE_Rainfall.dfs0 [weighted]',\\r\\n ],\\r\\n },\\r\\n ];\\r\\n return ();\\r\\n}\" }, ...TimeseriesExporterStory.parameters };\nTimeseriesExplorerEChart.parameters = { storySource: { source: \"() => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (token && ());\\r\\n}\" }, ...TimeseriesExplorerEChart.parameters };","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { UserGroups } from './UserGroups';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'User Groups',\\\\\\\\n component: UserGroups,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const UserGroupStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => }\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"UserGroupStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { UserGroups } from './UserGroups';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { UserGroups } from './UserGroups';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'User Groups',\\\\\\\\n component: UserGroups,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const UserGroupStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => }\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"user-group-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } } }, },\\\\r\\\\n title: 'User Groups',\\\\r\\\\n component: UserGroups,\\\\r\\\\n};\\\\r\\\\nconst host = process.env.ENDPOINT_URL;\\\\r\\\\nexport const UserGroupStory = () => {\\\\r\\\\n const metadata = [\\\\r\\\\n {\\\\r\\\\n key: 'myChoice',\\\\r\\\\n label: 'My Choice',\\\\r\\\\n type: 'SingleChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: 'B',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myBoolean',\\\\r\\\\n label: 'My Boolean',\\\\r\\\\n type: 'Boolean',\\\\r\\\\n default: true,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myText',\\\\r\\\\n label: 'My Text',\\\\r\\\\n type: 'Text',\\\\r\\\\n default: 'description',\\\\r\\\\n regEx: '[a-zA-Z]*:',\\\\r\\\\n regExError: 'The string must have a colon in it',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myOptions',\\\\r\\\\n label: 'My Options',\\\\r\\\\n type: 'MultiChoice',\\\\r\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\r\\\\n default: ['A', 'C'],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myMultiText',\\\\r\\\\n label: 'Multi Text',\\\\r\\\\n type: 'MultiText',\\\\r\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return (\\\\n {({ token }) => }\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"UserGroupStory\\\":{\\\"startLoc\\\":{\\\"col\\\":30,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":55},\\\"startBody\\\":{\\\"col\\\":30,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":55}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"UserGroupStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { UserGroups } from './UserGroups';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { UserGroups } from './UserGroups';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'User Groups',\\\\\\\\n component: UserGroups,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const UserGroupStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => }\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"UserGroupStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { UserGroups } from './UserGroups';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\\\\\nimport { UserGroups } from './UserGroups';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'User Groups',\\\\\\\\n component: UserGroups,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst host = process.env.ENDPOINT_URL;\\\\\\\\n\\\\\\\\nexport const UserGroupStory = () => {\\\\\\\\n const metadata = [\\\\\\\\n {\\\\\\\\n key: 'myChoice',\\\\\\\\n label: 'My Choice',\\\\\\\\n type: 'SingleChoice',\\\\\\\\n options: ['A', 'B', 'C'],\\\\\\\\n default: 'B',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myBoolean',\\\\\\\\n label: 'My Boolean',\\\\\\\\n type: 'Boolean',\\\\\\\\n default: true,\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myText',\\\\\\\\n label: 'My Text',\\\\\\\\n type: 'Text',\\\\\\\\n default: 'description',\\\\\\\\n regEx: '[a-zA-Z]*:',\\\\\\\\n regExError: 'The string must have a colon in it',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myOptions',\\\\\\\\n label: 'My Options',\\\\\\\\n type: 'MultiChoice',\\\\\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\\\\\n default: ['A', 'C'],\\\\\\\\n },\\\\\\\\n {\\\\\\\\n key: 'myMultiText',\\\\\\\\n label: 'Multi Text',\\\\\\\\n type: 'MultiText',\\\\\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\\\\\n },\\\\\\\\n ] as MetadataProps[];\\\\\\\\n\\\\\\\\n return (\\\\\\\\n \\\\\\\\n {({ token }) => }\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"user-group-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 14 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 57 } } } }, },\\\\r\\\\n title: 'User Groups',\\\\r\\\\n component: UserGroups,\\\\r\\\\n};\\\\r\\\\nconst host = process.env.ENDPOINT_URL;\\\\r\\\\nexport const UserGroupStory = () => {\\\\r\\\\n const metadata = [\\\\r\\\\n {\\\\r\\\\n key: 'myChoice',\\\\r\\\\n label: 'My Choice',\\\\r\\\\n type: 'SingleChoice',\\\\r\\\\n options: ['A', 'B', 'C'],\\\\r\\\\n default: 'B',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myBoolean',\\\\r\\\\n label: 'My Boolean',\\\\r\\\\n type: 'Boolean',\\\\r\\\\n default: true,\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myText',\\\\r\\\\n label: 'My Text',\\\\r\\\\n type: 'Text',\\\\r\\\\n default: 'description',\\\\r\\\\n regEx: '[a-zA-Z]*:',\\\\r\\\\n regExError: 'The string must have a colon in it',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myOptions',\\\\r\\\\n label: 'My Options',\\\\r\\\\n type: 'MultiChoice',\\\\r\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\r\\\\n default: ['A', 'C'],\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n key: 'myMultiText',\\\\r\\\\n label: 'Multi Text',\\\\r\\\\n type: 'MultiText',\\\\r\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n return (\\\\n {({ token }) => }\\\\n );\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"user-group-story\\\":{\\\"startLoc\\\":{\\\"col\\\":30,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":55},\\\"startBody\\\":{\\\"col\\\":30,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":55}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"user-group-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'User Groups',\\r\\n component: UserGroups,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const UserGroupStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'Z', 'V', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token }) => }\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"UserGroupStory\":{\"startLoc\":{\"col\":30,\"line\":23},\"endLoc\":{\"col\":1,\"line\":63},\"startBody\":{\"col\":30,\"line\":23},\"endBody\":{\"col\":1,\"line\":63}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"UserGroupStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { UserGroups } from './UserGroups';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"user-group-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'User Groups',\\r\\n component: UserGroups,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const UserGroupStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'Z', 'V', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token }) => }\\n );\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"UserGroupStory\":{\"startLoc\":{\"col\":30,\"line\":15},\"endLoc\":{\"col\":1,\"line\":55},\"startBody\":{\"col\":30,\"line\":15},\"endBody\":{\"col\":1,\"line\":55}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { MetadataProps } from '../common/Metadata/types';\\nimport { UserGroups } from './UserGroups';\\n\\nexport default {\\n title: 'User Groups',\\n component: UserGroups,\\n} as Meta;\\n\\nconst host = process.env.ENDPOINT_URL;\\n\\nexport const UserGroupStory = () => {\\n const metadata = [\\n {\\n key: 'myChoice',\\n label: 'My Choice',\\n type: 'SingleChoice',\\n options: ['A', 'B', 'C'],\\n default: 'B',\\n },\\n {\\n key: 'myBoolean',\\n label: 'My Boolean',\\n type: 'Boolean',\\n default: true,\\n },\\n {\\n key: 'myText',\\n label: 'My Text',\\n type: 'Text',\\n default: 'description',\\n regEx: '[a-zA-Z]*:',\\n regExError: 'The string must have a colon in it',\\n },\\n {\\n key: 'myOptions',\\n label: 'My Options',\\n type: 'MultiChoice',\\n options: ['A', 'Z', 'V', 'B', 'C'],\\n default: ['A', 'C'],\\n },\\n {\\n key: 'myMultiText',\\n label: 'Multi Text',\\n type: 'MultiText',\\n default: ['127.0.0.1', '0.0.0.10'],\\n },\\n ] as MetadataProps[];\\n\\n return (\\n \\n {({ token }) => }\\n \\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"UserGroupStory\": { \"startLoc\": { \"col\": 30, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 57 }, \"startBody\": { \"col\": 30, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 57 } } };\r\nimport React from 'react';\r\nimport { LoginGate } from '../Auth/LoginGate';\r\nimport { UserGroups } from './UserGroups';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"UserGroupStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } };\\r\\nimport React from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { UserGroups } from './UserGroups';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { MetadataProps } from '../common/Metadata/types';\\\\nimport { UserGroups } from './UserGroups';\\\\n\\\\nexport default {\\\\n title: 'User Groups',\\\\n component: UserGroups,\\\\n} as Meta;\\\\n\\\\nconst host = process.env.ENDPOINT_URL;\\\\n\\\\nexport const UserGroupStory = () => {\\\\n const metadata = [\\\\n {\\\\n key: 'myChoice',\\\\n label: 'My Choice',\\\\n type: 'SingleChoice',\\\\n options: ['A', 'B', 'C'],\\\\n default: 'B',\\\\n },\\\\n {\\\\n key: 'myBoolean',\\\\n label: 'My Boolean',\\\\n type: 'Boolean',\\\\n default: true,\\\\n },\\\\n {\\\\n key: 'myText',\\\\n label: 'My Text',\\\\n type: 'Text',\\\\n default: 'description',\\\\n regEx: '[a-zA-Z]*:',\\\\n regExError: 'The string must have a colon in it',\\\\n },\\\\n {\\\\n key: 'myOptions',\\\\n label: 'My Options',\\\\n type: 'MultiChoice',\\\\n options: ['A', 'Z', 'V', 'B', 'C'],\\\\n default: ['A', 'C'],\\\\n },\\\\n {\\\\n key: 'myMultiText',\\\\n label: 'Multi Text',\\\\n type: 'MultiText',\\\\n default: ['127.0.0.1', '0.0.0.10'],\\\\n },\\\\n ] as MetadataProps[];\\\\n\\\\n return (\\\\n \\\\n {({ token }) => }\\\\n \\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"user-group-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 57 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 14 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 57 } } } }, },\\r\\n title: 'User Groups',\\r\\n component: UserGroups,\\r\\n};\\r\\nconst host = process.env.ENDPOINT_URL;\\r\\nexport const UserGroupStory = () => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'Z', 'V', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token }) => }\\n );\\r\\n};\\r\\n\",\"locationsMap\":{\"user-group-story\":{\"startLoc\":{\"col\":30,\"line\":15},\"endLoc\":{\"col\":1,\"line\":55},\"startBody\":{\"col\":30,\"line\":15},\"endBody\":{\"col\":1,\"line\":55}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { MetadataProps } from '../common/Metadata/types';\\nimport { UserGroups } from './UserGroups';\\n\\nexport default {\\n title: 'User Groups',\\n component: UserGroups,\\n} as Meta;\\n\\nconst host = process.env.ENDPOINT_URL;\\n\\nexport const UserGroupStory = () => {\\n const metadata = [\\n {\\n key: 'myChoice',\\n label: 'My Choice',\\n type: 'SingleChoice',\\n options: ['A', 'B', 'C'],\\n default: 'B',\\n },\\n {\\n key: 'myBoolean',\\n label: 'My Boolean',\\n type: 'Boolean',\\n default: true,\\n },\\n {\\n key: 'myText',\\n label: 'My Text',\\n type: 'Text',\\n default: 'description',\\n regEx: '[a-zA-Z]*:',\\n regExError: 'The string must have a colon in it',\\n },\\n {\\n key: 'myOptions',\\n label: 'My Options',\\n type: 'MultiChoice',\\n options: ['A', 'Z', 'V', 'B', 'C'],\\n default: ['A', 'C'],\\n },\\n {\\n key: 'myMultiText',\\n label: 'Multi Text',\\n type: 'MultiText',\\n default: ['127.0.0.1', '0.0.0.10'],\\n },\\n ] as MetadataProps[];\\n\\n return (\\n \\n {({ token }) => }\\n \\n );\\n};\\n\", \"locationsMap\": { \"user-group-story\": { \"startLoc\": { \"col\": 30, \"line\": 14 }, \"endLoc\": { \"col\": 1, \"line\": 57 }, \"startBody\": { \"col\": 30, \"line\": 14 }, \"endBody\": { \"col\": 1, \"line\": 57 } } } }, },\r\n title: 'User Groups',\r\n component: UserGroups,\r\n};\r\nconst host = process.env.ENDPOINT_URL;\r\nexport const UserGroupStory = () => {\r\n const metadata = [\r\n {\r\n key: 'myChoice',\r\n label: 'My Choice',\r\n type: 'SingleChoice',\r\n options: ['A', 'B', 'C'],\r\n default: 'B',\r\n },\r\n {\r\n key: 'myBoolean',\r\n label: 'My Boolean',\r\n type: 'Boolean',\r\n default: true,\r\n },\r\n {\r\n key: 'myText',\r\n label: 'My Text',\r\n type: 'Text',\r\n default: 'description',\r\n regEx: '[a-zA-Z]*:',\r\n regExError: 'The string must have a colon in it',\r\n },\r\n {\r\n key: 'myOptions',\r\n label: 'My Options',\r\n type: 'MultiChoice',\r\n options: ['A', 'Z', 'V', 'B', 'C'],\r\n default: ['A', 'C'],\r\n },\r\n {\r\n key: 'myMultiText',\r\n label: 'Multi Text',\r\n type: 'MultiText',\r\n default: ['127.0.0.1', '0.0.0.10'],\r\n },\r\n ];\r\n return (\n {({ token }) => }\n );\r\n};\r\n\n\n\nUserGroupStory.parameters = { storySource: { source: \"() => {\\r\\n const metadata = [\\r\\n {\\r\\n key: 'myChoice',\\r\\n label: 'My Choice',\\r\\n type: 'SingleChoice',\\r\\n options: ['A', 'B', 'C'],\\r\\n default: 'B',\\r\\n },\\r\\n {\\r\\n key: 'myBoolean',\\r\\n label: 'My Boolean',\\r\\n type: 'Boolean',\\r\\n default: true,\\r\\n },\\r\\n {\\r\\n key: 'myText',\\r\\n label: 'My Text',\\r\\n type: 'Text',\\r\\n default: 'description',\\r\\n regEx: '[a-zA-Z]*:',\\r\\n regExError: 'The string must have a colon in it',\\r\\n },\\r\\n {\\r\\n key: 'myOptions',\\r\\n label: 'My Options',\\r\\n type: 'MultiChoice',\\r\\n options: ['A', 'Z', 'V', 'B', 'C'],\\r\\n default: ['A', 'C'],\\r\\n },\\r\\n {\\r\\n key: 'myMultiText',\\r\\n label: 'Multi Text',\\r\\n type: 'MultiText',\\r\\n default: ['127.0.0.1', '0.0.0.10'],\\r\\n },\\r\\n ];\\r\\n return (\\n {({ token }) => }\\n );\\r\\n}\" }, ...UserGroupStory.parameters };","import {\n Box,\n Button,\n Chip,\n FormControl,\n FormControlLabel,\n InputLabel,\n MenuItem,\n Select,\n Switch,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport { Autocomplete } from '@material-ui/lab';\nimport React, { Fragment, useEffect, useRef, useState } from 'react';\nimport { MetadataProps } from './types';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n FormControl: {\n width: '100%',\n marginTop: theme.spacing(1),\n },\n switch: {\n marginTop: theme.spacing(1),\n },\n chip: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst Metadata = ({\n metadata,\n data,\n onChange,\n onError,\n}: {\n metadata?: MetadataProps[];\n data;\n onChange(key: string, value: any): void;\n onError(error: boolean): void;\n}) => {\n const classes = useStyles();\n const [multiText, setMultiText] = useState('');\n const [list, setList] = useState([]);\n const [error, setError] = useState({});\n const multiTextField = useRef(null);\n\n const handleMultiText = (key) => {\n setList([...list, multiText]);\n setMultiText('');\n multiTextField.current.focus();\n onChange(key, [...list, multiText]);\n };\n\n const handleChipDelete = (key, item) => {\n const newList = list.filter((value) => value !== item);\n setList(newList);\n onChange(key, newList);\n };\n\n const handleChange = (key: string, value: any, regex: string) => {\n const re = new RegExp(regex);\n\n if (re.test(value)) {\n setError({\n ...error,\n [key]: false,\n });\n } else {\n setError({\n ...error,\n [key]: true,\n });\n }\n\n onChange(key, value);\n };\n\n useEffect(() => {\n onError(Object.keys(error).some((v) => error[v] === true));\n }, [error]);\n\n useEffect(() => {\n metadata.map((meta) => {\n if (meta.type === 'MultiText') {\n setList(data[meta.key]);\n }\n });\n }, [list]);\n\n return (\n \n {metadata?.map((meta) => {\n if (meta.type === 'Text') {\n return (\n handleChange(meta.key, e.target.value, meta.regEx)}\n />\n );\n } else if (meta.type === 'SingleChoice') {\n return (\n \n {meta.label}\n handleChange(meta.key, e.target.value, meta.regEx)}\n >\n {meta.options.map((item, index) => (\n \n {item}\n \n ))}\n \n \n );\n } else if (meta.type === 'Boolean') {\n return (\n handleChange(meta.key, e.target.checked, meta.regEx)}\n name={meta.label}\n inputProps={{ 'aria-label': meta.label }}\n />\n }\n label={meta.label}\n />\n );\n } else if (meta.type === 'MultiChoice') {\n return (\n handleChange(meta.key, values, meta.regEx)}\n multiple={true as any}\n renderInput={(props) => (\n \n )}\n style={{\n marginTop: 8,\n }}\n />\n );\n } else if (meta.type === 'MultiText') {\n return (\n <>\n {list?.length > 0 && {meta.label} list}\n {list?.map((item, i) => (\n \n handleChipDelete(meta.key, item)}\n />\n \n ))}\n\n setMultiText(e.target.value)}\n error={error[meta.key]}\n helperText={error[meta.key] && meta.regExError}\n InputProps={{\n endAdornment: (\n \n ),\n }}\n />\n \n );\n }\n\n return null;\n })}\n \n );\n};\n\nexport { MetadataProps, Metadata };\n","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Typography } from '@material-ui/core';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { Login } from '..';\\\\\\\\nimport { Token, User } from './types';\\\\\\\\n\\\\\\\\nexport const LoginStory = () => {\\\\\\\\n const [state, setState] = React.useState<{\\\\\\\\n user?: User;\\\\\\\\n token?: Token;\\\\\\\\n }>({});\\\\\\\\n\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n {\\\\\\\\n setState({ user, token });\\\\\\\\n }}\\\\\\\\n textFieldVariant=\\\\\\\\\\\\\\\"outlined\\\\\\\\\\\\\\\"\\\\\\\\n />\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const UpdatePasswordStory = () => {\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Auth',\\\\\\\\n component: Login,\\\\\\\\n subcomponents: { UpdatePasswordStory },\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"LoginStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 } }, \\\\\\\"UpdatePasswordStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { Login } from '..';\\\\r\\\\nexport const LoginStory = () => {\\\\r\\\\n const [state, setState] = React.useState({});\\\\r\\\\n return (<>\\\\n {\\\\r\\\\n setState({ user, token });\\\\r\\\\n }} textFieldVariant=\\\\\\\"outlined\\\\\\\"/>\\\\n );\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const UpdatePasswordStory = () => {\\\\r\\\\n return (<>\\\\n \\\\n );\\\\r\\\\n};\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Typography } from '@material-ui/core';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { Login } from '..';\\\\\\\\nimport { Token, User } from './types';\\\\\\\\n\\\\\\\\nexport const LoginStory = () => {\\\\\\\\n const [state, setState] = React.useState<{\\\\\\\\n user?: User;\\\\\\\\n token?: Token;\\\\\\\\n }>({});\\\\\\\\n\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n {\\\\\\\\n setState({ user, token });\\\\\\\\n }}\\\\\\\\n textFieldVariant=\\\\\\\\\\\\\\\"outlined\\\\\\\\\\\\\\\"\\\\\\\\n />\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const UpdatePasswordStory = () => {\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Auth',\\\\\\\\n component: Login,\\\\\\\\n subcomponents: { UpdatePasswordStory },\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"login-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 } }, \\\\\\\"update-password-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 } } } }, },\\\\r\\\\n title: 'Auth',\\\\r\\\\n component: Login,\\\\r\\\\n subcomponents: { UpdatePasswordStory },\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"LoginStory\\\":{\\\"startLoc\\\":{\\\"col\\\":26,\\\"line\\\":9},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":26},\\\"startBody\\\":{\\\"col\\\":26,\\\"line\\\":9},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":26}},\\\"UpdatePasswordStory\\\":{\\\"startLoc\\\":{\\\"col\\\":35,\\\"line\\\":28},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":42},\\\"startBody\\\":{\\\"col\\\":35,\\\"line\\\":28},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":42}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LoginStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"UpdatePasswordStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } };\\r\\nimport React from 'react';\\r\\nimport { Login } from '..';\\r\\nexport const LoginStory = () => {\\r\\n const [state, setState] = React.useState({});\\r\\n return (<>\\n {\\r\\n setState({ user, token });\\r\\n }} textFieldVariant=\\\"outlined\\\"/>\\n );\\r\\n};;\\r\\n;\\r\\nexport const UpdatePasswordStory = () => {\\r\\n return (<>\\n \\n );\\r\\n};\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Typography } from '@material-ui/core';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { Login } from '..';\\\\\\\\nimport { Token, User } from './types';\\\\\\\\n\\\\\\\\nexport const LoginStory = () => {\\\\\\\\n const [state, setState] = React.useState<{\\\\\\\\n user?: User;\\\\\\\\n token?: Token;\\\\\\\\n }>({});\\\\\\\\n\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n {\\\\\\\\n setState({ user, token });\\\\\\\\n }}\\\\\\\\n textFieldVariant=\\\\\\\\\\\\\\\"outlined\\\\\\\\\\\\\\\"\\\\\\\\n />\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const UpdatePasswordStory = () => {\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Auth',\\\\\\\\n component: Login,\\\\\\\\n subcomponents: { UpdatePasswordStory },\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"LoginStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 } }, \\\\\\\"UpdatePasswordStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 } } };\\\\r\\\\nimport React from 'react';\\\\r\\\\nimport { Login } from '..';\\\\r\\\\nexport const LoginStory = () => {\\\\r\\\\n const [state, setState] = React.useState({});\\\\r\\\\n return (<>\\\\n {\\\\r\\\\n setState({ user, token });\\\\r\\\\n }} textFieldVariant=\\\\\\\"outlined\\\\\\\"/>\\\\n );\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const UpdatePasswordStory = () => {\\\\r\\\\n return (<>\\\\n \\\\n );\\\\r\\\\n};\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Typography } from '@material-ui/core';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport React from 'react';\\\\\\\\nimport { Login } from '..';\\\\\\\\nimport { Token, User } from './types';\\\\\\\\n\\\\\\\\nexport const LoginStory = () => {\\\\\\\\n const [state, setState] = React.useState<{\\\\\\\\n user?: User;\\\\\\\\n token?: Token;\\\\\\\\n }>({});\\\\\\\\n\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n {\\\\\\\\n setState({ user, token });\\\\\\\\n }}\\\\\\\\n textFieldVariant=\\\\\\\\\\\\\\\"outlined\\\\\\\\\\\\\\\"\\\\\\\\n />\\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const UpdatePasswordStory = () => {\\\\\\\\n return (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n \\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Auth',\\\\\\\\n component: Login,\\\\\\\\n subcomponents: { UpdatePasswordStory },\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"login-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 26, \\\\\\\"line\\\\\\\": 7 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 38 } }, \\\\\\\"update-password-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 40 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 61 } } } }, },\\\\r\\\\n title: 'Auth',\\\\r\\\\n component: Login,\\\\r\\\\n subcomponents: { UpdatePasswordStory },\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"login-story\\\":{\\\"startLoc\\\":{\\\"col\\\":26,\\\"line\\\":9},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":26},\\\"startBody\\\":{\\\"col\\\":26,\\\"line\\\":9},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":26}},\\\"update-password-story\\\":{\\\"startLoc\\\":{\\\"col\\\":35,\\\"line\\\":28},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":42},\\\"startBody\\\":{\\\"col\\\":35,\\\"line\\\":28},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":42}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\", \\\"locationsMap\\\": { \\\"login-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"update-password-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } } }, },\\r\\n title: 'Auth',\\r\\n component: Login,\\r\\n subcomponents: { UpdatePasswordStory },\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"LoginStory\":{\"startLoc\":{\"col\":26,\"line\":17},\"endLoc\":{\"col\":1,\"line\":34},\"startBody\":{\"col\":26,\"line\":17},\"endBody\":{\"col\":1,\"line\":34}},\"UpdatePasswordStory\":{\"startLoc\":{\"col\":35,\"line\":36},\"endLoc\":{\"col\":1,\"line\":50},\"startBody\":{\"col\":35,\"line\":36},\"endBody\":{\"col\":1,\"line\":50}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LoginStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"UpdatePasswordStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } };\\r\\nimport React from 'react';\\r\\nimport { Login } from '..';\\r\\nexport const LoginStory = () => {\\r\\n const [state, setState] = React.useState({});\\r\\n return (<>\\n {\\r\\n setState({ user, token });\\r\\n }} textFieldVariant=\\\"outlined\\\"/>\\n );\\r\\n};\\r\\n;\\r\\nexport const UpdatePasswordStory = () => {\\r\\n return (<>\\n \\n );\\r\\n};\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\", \\\"locationsMap\\\": { \\\"login-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"update-password-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } } }, },\\r\\n title: 'Auth',\\r\\n component: Login,\\r\\n subcomponents: { UpdatePasswordStory },\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"LoginStory\":{\"startLoc\":{\"col\":26,\"line\":9},\"endLoc\":{\"col\":1,\"line\":26},\"startBody\":{\"col\":26,\"line\":9},\"endBody\":{\"col\":1,\"line\":26}},\"UpdatePasswordStory\":{\"startLoc\":{\"col\":35,\"line\":28},\"endLoc\":{\"col\":1,\"line\":42},\"startBody\":{\"col\":35,\"line\":28},\"endBody\":{\"col\":1,\"line\":42}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Typography } from '@material-ui/core';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { Login } from '..';\\nimport { Token, User } from './types';\\n\\nexport const LoginStory = () => {\\n const [state, setState] = React.useState<{\\n user?: User;\\n token?: Token;\\n }>({});\\n\\n return (\\n <>\\n {\\n setState({ user, token });\\n }}\\n textFieldVariant=\\\"outlined\\\"\\n />\\n \\n );\\n};\\n\\nexport const UpdatePasswordStory = () => {\\n return (\\n <>\\n \\n \\n );\\n};\\n\\nexport default {\\n title: 'Auth',\\n component: Login,\\n subcomponents: { UpdatePasswordStory },\\n} as Meta;\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"LoginStory\": { \"startLoc\": { \"col\": 26, \"line\": 7 }, \"endLoc\": { \"col\": 1, \"line\": 38 }, \"startBody\": { \"col\": 26, \"line\": 7 }, \"endBody\": { \"col\": 1, \"line\": 38 } }, \"UpdatePasswordStory\": { \"startLoc\": { \"col\": 35, \"line\": 40 }, \"endLoc\": { \"col\": 1, \"line\": 61 }, \"startBody\": { \"col\": 35, \"line\": 40 }, \"endBody\": { \"col\": 1, \"line\": 61 } } };\r\nimport React from 'react';\r\nimport { Login } from '..';\r\nexport const LoginStory = () => {\r\n const [state, setState] = React.useState({});\r\n return (<>\n {\r\n setState({ user, token });\r\n }} textFieldVariant=\"outlined\"/>\n );\r\n};;;\r\n;\r\nexport const UpdatePasswordStory = () => {\r\n return (<>\n \n );\r\n};\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"LoginStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"UpdatePasswordStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } };\\r\\nimport React from 'react';\\r\\nimport { Login } from '..';\\r\\nexport const LoginStory = () => {\\r\\n const [state, setState] = React.useState({});\\r\\n return (<>\\n {\\r\\n setState({ user, token });\\r\\n }} textFieldVariant=\\\"outlined\\\"/>\\n );\\r\\n};\\r\\n;\\r\\nexport const UpdatePasswordStory = () => {\\r\\n return (<>\\n \\n );\\r\\n};\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Typography } from '@material-ui/core';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport React from 'react';\\\\nimport { Login } from '..';\\\\nimport { Token, User } from './types';\\\\n\\\\nexport const LoginStory = () => {\\\\n const [state, setState] = React.useState<{\\\\n user?: User;\\\\n token?: Token;\\\\n }>({});\\\\n\\\\n return (\\\\n <>\\\\n {\\\\n setState({ user, token });\\\\n }}\\\\n textFieldVariant=\\\\\\\"outlined\\\\\\\"\\\\n />\\\\n \\\\n );\\\\n};\\\\n\\\\nexport const UpdatePasswordStory = () => {\\\\n return (\\\\n <>\\\\n \\\\n \\\\n );\\\\n};\\\\n\\\\nexport default {\\\\n title: 'Auth',\\\\n component: Login,\\\\n subcomponents: { UpdatePasswordStory },\\\\n} as Meta;\\\\n\\\", \\\"locationsMap\\\": { \\\"login-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 38 }, \\\"startBody\\\": { \\\"col\\\": 26, \\\"line\\\": 7 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 38 } }, \\\"update-password-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 61 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 40 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 61 } } } }, },\\r\\n title: 'Auth',\\r\\n component: Login,\\r\\n subcomponents: { UpdatePasswordStory },\\r\\n};\\r\\n\",\"locationsMap\":{\"login-story\":{\"startLoc\":{\"col\":26,\"line\":9},\"endLoc\":{\"col\":1,\"line\":26},\"startBody\":{\"col\":26,\"line\":9},\"endBody\":{\"col\":1,\"line\":26}},\"update-password-story\":{\"startLoc\":{\"col\":35,\"line\":28},\"endLoc\":{\"col\":1,\"line\":42},\"startBody\":{\"col\":35,\"line\":28},\"endBody\":{\"col\":1,\"line\":42}}}}, \"storySource\": { \"source\": \"import { Typography } from '@material-ui/core';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport React from 'react';\\nimport { Login } from '..';\\nimport { Token, User } from './types';\\n\\nexport const LoginStory = () => {\\n const [state, setState] = React.useState<{\\n user?: User;\\n token?: Token;\\n }>({});\\n\\n return (\\n <>\\n {\\n setState({ user, token });\\n }}\\n textFieldVariant=\\\"outlined\\\"\\n />\\n \\n );\\n};\\n\\nexport const UpdatePasswordStory = () => {\\n return (\\n <>\\n \\n \\n );\\n};\\n\\nexport default {\\n title: 'Auth',\\n component: Login,\\n subcomponents: { UpdatePasswordStory },\\n} as Meta;\\n\", \"locationsMap\": { \"login-story\": { \"startLoc\": { \"col\": 26, \"line\": 7 }, \"endLoc\": { \"col\": 1, \"line\": 38 }, \"startBody\": { \"col\": 26, \"line\": 7 }, \"endBody\": { \"col\": 1, \"line\": 38 } }, \"update-password-story\": { \"startLoc\": { \"col\": 35, \"line\": 40 }, \"endLoc\": { \"col\": 1, \"line\": 61 }, \"startBody\": { \"col\": 35, \"line\": 40 }, \"endBody\": { \"col\": 1, \"line\": 61 } } } }, },\r\n title: 'Auth',\r\n component: Login,\r\n subcomponents: { UpdatePasswordStory },\r\n};\r\n\n\n\nLoginStory.parameters = { storySource: { source: \"() => {\\r\\n const [state, setState] = React.useState({});\\r\\n return (<>\\n {\\r\\n setState({ user, token });\\r\\n }} textFieldVariant=\\\"outlined\\\"/>\\n );\\r\\n}\" }, ...LoginStory.parameters };\nUpdatePasswordStory.parameters = { storySource: { source: \"() => {\\r\\n return (<>\\n \\n );\\r\\n}\" }, ...UpdatePasswordStory.parameters };","/**\n * Converts a WGS84 longitude/latitude to EPSG:3857.\n * Useful for creating an EPSG:3857 based bounding box for /api/maps\n * @param lon Longitude.\n * @param lat Latitude.\n * @returns [longitudeWGS84, latitudeWGS84]\n */\nexport function convertWGS84ToEPSG3857(lon: number, lat: number) {\n const x = (lon * 20037508.34) / 180;\n let y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360)) / (Math.PI / 180);\n y = (y * 20037508.34) / 180;\n return [x, y];\n}\n","import { CompositeLayer, BitmapLayer, Position } from 'deck.gl';\nimport { fetchMapAnimationFiles } from '../../api/Map/MapApi';\nimport { convertWGS84ToEPSG3857 } from './helpers';\nimport { AnimationLayerState, AnimationLayerProps, AnimationImageRequest, BitmapLayerData } from './types';\nimport { debounceTime, switchMap } from 'rxjs/operators';\nimport { Subject, of, forkJoin } from 'rxjs';\n\n/**\n * This is a DeckGL port of the original LeafletAnimation component in the original DHI/react-components repository.\n * Created as a composite DeckGL layer so that it can be used directly as a DeckGL layer.\n */\nclass AnimationLayer extends CompositeLayer {\n initializeState() {\n // Setup pipeline for fetching map animation images.\n // The \"quick pipeline\" is used to fetch the currently display image for faster feedback.\n // The \"main pipeline\" is used to fetch all time step images.\n const quickFetchPipeline = this.createImageRetrievalPipeline();\n const mainFetchPipeline = this.createImageRetrievalPipeline();\n\n this.state = {\n // The current time stamp is used to prevent duplicate layer IDs from occuring. This may cause the WebGL context\n // to be lost, as the same layer ID can not be used after the \"finalize\" method is.\n currentTimestamp: new Date().getTime(),\n timestepLayers: [],\n quickFetchPipeline: quickFetchPipeline,\n mainFetchPipeline: mainFetchPipeline,\n };\n\n this.fetchTimestepData();\n }\n\n /**\n * Fetches the time step image data based on the viewport extents. It does this by sending a request to the\n * image pipeline (\"mainFetchPipeline.next(...)\").\n * Two requests are sent from this method, one for retrieving the image for the current timestep quickly,\n * and one for retrieving all timestep images.\n */\n fetchTimestepData(): void {\n const { apiHost, connectionString, token, filename, timesteps, style, shadingType, itemNumber, scale } = this.props;\n\n if (this.context.viewport.width === 1 || this.context.viewport.height === 1) {\n return;\n }\n\n // Create EPSG:3857 bounding box for use with domain services.\n const nw = this.context.viewport.unproject([0, 0]);\n const se = this.context.viewport.unproject([this.context.viewport.width, this.context.viewport.height]);\n\n const epsg3857se = convertWGS84ToEPSG3857(se[0], se[1]);\n const epsg3857nw = convertWGS84ToEPSG3857(nw[0], nw[1]);\n\n // Create WGS84 bounding box for use with DeckGL.\n const bbox: any = [nw[0], se[1], se[0], nw[1]];\n\n // Generate the request body to retrieve the images for the timesteps of interest.\n const requestBody: any = {};\n const currentTimestepRequest = {};\n\n timesteps.forEach((timestep: string, idx: number) => {\n requestBody[timestep] = filename;\n if (this.props.currentTimestepIndex === idx) {\n currentTimestepRequest[timesteps[idx]] = filename;\n }\n });\n\n // Fetch data from backend.\n const { width, height } = this.context.viewport;\n\n const pipelineInput = {\n requestDataSource: {\n host: apiHost,\n connection: connectionString,\n ids: requestBody,\n },\n requestConfig: {\n style: style,\n item: itemNumber,\n width: width,\n height: height,\n bbox: [epsg3857nw[0], epsg3857se[1], epsg3857se[0], epsg3857nw[1]].join(','),\n shadingType: shadingType,\n scale: scale,\n },\n bboxWGS84: bbox,\n timestepIndex: this.props.currentTimestepIndex,\n token,\n };\n\n // TODO: This image pipeline tries to replace the current time step when fetching a single image.\n // There is an issue with the this.props.currentTimestepIndex not being updated between renders\n // in the pipeline, as it is only created once initially. As a workaround, the time step index at the\n // time of the request is displayed on the screen. This will not affect the user when the animation\n // is paused, but can result in a slight flicker to an incorrect timestep when the animation is\n // running.\n if (timesteps.length > 0) {\n this.state.quickFetchPipeline.next({\n ...pipelineInput,\n requestDataSource: {\n ...pipelineInput.requestDataSource,\n ids: currentTimestepRequest,\n },\n });\n\n this.state.mainFetchPipeline.next(pipelineInput);\n }\n }\n\n /**\n * Lifecycle hook used by DeckGL layers in order to update state/detect changes.\n * Used to determine whether animation image data needs to be updated after the viewport has moved\n * or the props have changed.\n */\n updateState({ oldProps, changeFlags }: { oldProps: any; changeFlags: any }): void {\n if (Object.keys(oldProps).length === 0) {\n return;\n }\n\n let shouldFetchData = false;\n\n if (changeFlags.dataChanged) {\n shouldFetchData = true;\n }\n\n if (changeFlags.propsChanged === 'props.flagBoundingBoxUpdate changed shallowly') {\n shouldFetchData = true;\n }\n\n if (shouldFetchData) {\n this.fetchTimestepData();\n }\n }\n\n /**\n * Creates an image retrieval pipeline for fetching timestep image data to the domain services API and\n * updates the timestepLayers state to the latest images.\n *\n * The pipeline will ensure that any outgoing/outdated requests are cancelled before running the next API\n * call (through switchMap), and that requests are debounced to not overload the API.\n */\n createImageRetrievalPipeline(): Subject {\n const self = this;\n\n const fetchPipeline = new Subject();\n fetchPipeline\n .pipe(\n debounceTime(500),\n switchMap((imageRequest: AnimationImageRequest) =>\n fetchMapAnimationFiles(imageRequest.requestDataSource, imageRequest.requestConfig, imageRequest.token).pipe(\n switchMap((response) => forkJoin(of(imageRequest), response.json())),\n ),\n ),\n )\n .subscribe({\n next: ([request, encodedImages]) => {\n const currentTimestamp = new Date().getTime();\n this.setState({ currentTimestamp });\n\n const timestepImageData = Object.entries(encodedImages).map(([timestepStr, encodedImage]) => {\n return {\n timestep: timestepStr,\n imageURL: `data:image/png;base64,${encodedImage}`,\n };\n });\n timestepImageData.sort((a, b) => {\n if (a.timestep < b.timestep) return -1;\n if (a.timestep > b.timestep) return 1;\n return 0;\n });\n\n // Single image to replace.\n if (self.state.timestepLayers.length === 0 && timestepImageData.length === 1) {\n self.setState({\n timestepLayers: [\n new BitmapLayer({\n id: `AnimationLayer-${currentTimestamp}-timestep=${request.timestepIndex}`,\n image: timestepImageData[0].imageURL,\n visible: true,\n bounds: request.bboxWGS84 as any,\n }),\n ],\n });\n } else if (timestepImageData.length === 1) {\n self.setState({\n timestepLayers: self.state.timestepLayers.map((layer: BitmapLayer) => {\n if (layer.props.id.endsWith(`timestep=${request.timestepIndex}`)) {\n return new BitmapLayer({\n id: `AnimationLayer-${currentTimestamp}-timestep=${request.timestepIndex}`,\n image: timestepImageData[0].imageURL,\n visible: true,\n bounds: request.bboxWGS84 as any,\n });\n } else {\n return layer;\n }\n }),\n });\n\n // Multiple images to replace.\n } else {\n const alreadyUpdatedLayerIndex = self.state.timestepLayers.findIndex((l) =>\n l.id.endsWith(`timestep=${request.timestepIndex}`),\n );\n const alreadyUpdatedLayer =\n alreadyUpdatedLayerIndex >= 0 ? self.state.timestepLayers[alreadyUpdatedLayerIndex] : null;\n\n self.setState({\n timestepLayers: timestepImageData.map((imageData, idx) => {\n if (alreadyUpdatedLayerIndex === idx) {\n return alreadyUpdatedLayer;\n }\n\n return new BitmapLayer({\n id: `AnimationLayer-${this.state.currentTimestamp}-timestep=${imageData.timestep}`,\n image: imageData.imageURL,\n visible: idx === request.timestepIndex,\n bounds: request.bboxWGS84 as any,\n });\n }),\n });\n }\n },\n error: (e) => console.error(e),\n });\n\n return fetchPipeline;\n }\n\n finaliseState() {\n if (this.state.timestepLayers) {\n this.setState({\n timestepLayers: [],\n });\n }\n }\n\n renderLayers() {\n this.setState({\n timestepLayers: this.state.timestepLayers.map((layer: BitmapLayer, index: number) => {\n if (layer.props.image == null || layer.props.bounds == null) {\n return layer;\n }\n\n const isVisible = index === this.props.currentTimestepIndex;\n\n return new BitmapLayer({\n id: layer.props.id,\n image: layer.props.image,\n visible: isVisible,\n bounds: layer.props.bounds,\n });\n }),\n });\n\n return this.state.timestepLayers;\n }\n}\n\nexport default AnimationLayer;\n","import * as React from 'react';\nimport { AnimationTimelineProps } from './types';\nimport Box from '@material-ui/core/Box';\nimport Slider from '@material-ui/core/Slider';\nimport Typography from '@material-ui/core/Typography';\n\n/**\n * Creates a timelime that the user can scrub through for the AnimationControls component\n */\nconst AnimationTimeline: React.FC = ({\n timestepIndex,\n maxTimestepIndex,\n timestepLabel,\n onTimestepIndexChange,\n isHorizontal,\n isEnabled,\n}) => {\n return (\n \n \n \n {timestepLabel}\n \n \n onTimestepIndexChange(index as number)}\n />\n \n );\n};\n\nexport default AnimationTimeline;\n","import * as React from 'react';\nimport { AnimationPlaybackControlsProps } from './types';\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';\nimport NavigateBeforeIcon from '@material-ui/icons/NavigateBefore';\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport PauseIcon from '@material-ui/icons/Pause';\nimport SkipNextIcon from '@material-ui/icons/SkipNext';\nimport SkipPreviousIcon from '@material-ui/icons/SkipPrevious';\n\n/**\n * Set of playback control buttons for navigating timesteps in the AnimationLayer.\n * Allows pausing, playing, and stepping through timesteps.\n */\nconst AnimationPlaybackControls: React.FC = ({\n isPlaying,\n isEnabled,\n onSkipToStart,\n onSkipToEnd,\n onStepBackward,\n onStepForward,\n onPlay,\n onPause,\n}) => {\n return (\n \n \n \n \n \n \n \n {isPlaying ? (\n \n \n \n ) : (\n \n \n \n )}\n onStepForward()}>\n \n \n \n \n \n \n );\n};\n\nexport default AnimationPlaybackControls;\n","import React, { useEffect, useState } from 'react';\nimport Box from '@material-ui/core/Box';\nimport AnimationTimeline from './AnimationTimeline';\nimport AnimationPlaybackControls from './AnimationPlaybackControls';\nimport { format, parseISO, addHours } from 'date-fns';\nimport { AnimationControlProps } from './types';\n\n/**\n * Simple controls for managing the current timestep of the DeckGL animation layer.\n * Provides both a slider and buttons for navigating between the time steps.\n *\n * Some flexibility has been added to allow a user specified date format as well as adding/subtracting any\n * time zone offsets if required.\n */\nconst AnimationControl: React.FC = ({\n dateTimes,\n framesPerSecond = 10,\n dateTimeDisplayFormat = 'yyyy/MM/dd HH:mm:ss',\n onDateTimeChange,\n horizontal = false,\n hideControls = false,\n dateTimePostfix = null,\n timezoneOffsetData = null,\n timezoneOffsetDisplay = null,\n playing = true,\n loop = true,\n enabled = true,\n}) => {\n const [timestepIndex, setTimestepIndex] = useState(null);\n const [isPlaying, setIsPlaying] = useState(false);\n\n useEffect(() => {\n if (dateTimes && dateTimes.length > 0) {\n setTimestepIndex(0);\n }\n }, [dateTimes]);\n\n useEffect(() => {\n if (playing) {\n play();\n } else {\n pause();\n }\n }, [playing]);\n\n useEffect(() => {\n if (!enabled) {\n pause();\n }\n }, [enabled]);\n\n // Creates the animation update timer based on the user specified frequency.\n useEffect(() => {\n const updateTimer = setInterval(() => {\n if (isPlaying) {\n stepForward(true);\n }\n }, 1000 / framesPerSecond);\n\n return () => {\n clearInterval(updateTimer);\n };\n }, [framesPerSecond, dateTimes, isPlaying]);\n\n useEffect(() => {\n if (timestepIndex !== null) {\n onDateTimeChange(dateTimes[timestepIndex]);\n }\n }, [timestepIndex]);\n\n const play = () => {\n setIsPlaying(true);\n if (!timestepIndex && timestepIndex !== 0) {\n setTimestepIndex(0);\n }\n };\n\n const pause = () => {\n setIsPlaying(false);\n };\n\n const skipToStart = () => {\n if (isPlaying) {\n pause();\n }\n setTimestepIndex(0);\n };\n\n const skipToEnd = () => {\n if (isPlaying) {\n pause();\n }\n setTimestepIndex(dateTimes.length - 1);\n };\n\n const stepForward = (keepPlaying: boolean = false) => {\n if (!timestepIndex && timestepIndex !== 0) {\n return;\n }\n\n if (!keepPlaying && isPlaying) {\n pause();\n }\n\n setTimestepIndex((prevTimestepIndex) => {\n if (prevTimestepIndex < dateTimes.length - 1) {\n return prevTimestepIndex + 1;\n }\n\n if (loop) {\n return 0;\n }\n\n pause();\n return dateTimes.length - 1;\n });\n };\n\n const stepBackward = () => {\n if (!timestepIndex && timestepIndex !== 0) {\n return;\n }\n\n if (isPlaying) {\n pause();\n }\n\n setTimestepIndex((prevTimestepIndex) => (prevTimestepIndex > 0 ? prevTimestepIndex - 1 : 0));\n };\n\n const handleTimestepChange = (index: number) => {\n pause();\n setTimestepIndex(index);\n };\n\n const formatCurrentDate = () => {\n if (!timestepIndex && timestepIndex !== 0) {\n return dateTimeDisplayFormat.replace(/\\w/g, '-');\n }\n\n let currentDate = parseISO(dateTimes[timestepIndex]);\n if (timezoneOffsetData && timezoneOffsetDisplay) {\n currentDate = addHours(currentDate, timezoneOffsetDisplay - timezoneOffsetData);\n }\n\n let formattedDate = format(currentDate, dateTimeDisplayFormat);\n if (dateTimePostfix) {\n formattedDate += ` ${dateTimePostfix}`;\n }\n\n return formattedDate;\n };\n\n let currentTimestepStr = formatCurrentDate();\n\n if (horizontal) {\n return (\n \n \n \n \n \n \n \n \n );\n } else {\n return (\n \n \n {!hideControls && (\n \n \n \n )}\n \n );\n }\n};\n\nexport default AnimationControl;\n","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\n\\\\\\\\nimport DeckGL from '@deck.gl/react';\\\\\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\\\\\nimport { Layer } from 'deck.gl';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Map Components',\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst INITIAL_VIEW_STATE = {\\\\\\\\n longitude: 12.623328,\\\\\\\\n latitude: 55.686408,\\\\\\\\n zoom: 9,\\\\\\\\n pitch: 0,\\\\\\\\n bearing: 0,\\\\\\\\n};\\\\\\\\n\\\\\\\\nconst timesteps = [\\\\\\\\n '2018-09-12T12:00:00',\\\\\\\\n '2018-09-12T12:30:00',\\\\\\\\n '2018-09-12T13:00:00',\\\\\\\\n '2018-09-12T13:30:00',\\\\\\\\n '2018-09-12T14:00:00',\\\\\\\\n '2018-09-12T14:30:00',\\\\\\\\n '2018-09-12T15:00:00',\\\\\\\\n '2018-09-12T15:30:00',\\\\\\\\n '2018-09-12T16:00:00',\\\\\\\\n '2018-09-12T16:30:00',\\\\\\\\n '2018-09-12T17:00:00',\\\\\\\\n '2018-09-12T17:30:00',\\\\\\\\n '2018-09-12T18:00:00',\\\\\\\\n '2018-09-12T18:30:00',\\\\\\\\n '2018-09-12T19:00:00',\\\\\\\\n '2018-09-12T19:30:00',\\\\\\\\n '2018-09-12T20:00:00',\\\\\\\\n '2018-09-12T20:30:00',\\\\\\\\n '2018-09-12T21:00:00',\\\\\\\\n '2018-09-12T21:30:00',\\\\\\\\n '2018-09-12T22:00:00',\\\\\\\\n '2018-09-12T22:30:00',\\\\\\\\n '2018-09-12T23:00:00',\\\\\\\\n '2018-09-12T23:30:00',\\\\\\\\n];\\\\\\\\n\\\\\\\\nexport const AnimationLayerStory = () => {\\\\\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\\\\\n const [_, isMapLoaded] = React.useState(false);\\\\\\\\n\\\\\\\\n const tileLayer = new TileLayer({\\\\\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\\\\\n minZoom: 0,\\\\\\\\n maxZoom: 19,\\\\\\\\n tileSize: 256,\\\\\\\\n\\\\\\\\n renderSubLayers: (props: any) => {\\\\\\\\n const {\\\\\\\\n bbox: { west, south, east, north },\\\\\\\\n } = props.tile;\\\\\\\\n\\\\\\\\n return new BitmapLayer(props, {\\\\\\\\n data: null,\\\\\\\\n image: props.data,\\\\\\\\n bounds: [west, south, east, north],\\\\\\\\n });\\\\\\\\n },\\\\\\\\n });\\\\\\\\n\\\\\\\\n const animationLayer = new AnimationLayer({\\\\\\\\n id: 'AnimationLayer',\\\\\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\\\\\n connectionString: 'dfsu-mapsource',\\\\\\\\n token: '',\\\\\\\\n itemNumber: 3,\\\\\\\\n style: 'Ecoli',\\\\\\\\n shadingType: 'ShadedContour',\\\\\\\\n filename: 'KBHEC3dF012.dfsu',\\\\\\\\n timesteps: timesteps,\\\\\\\\n currentTimestepIndex: currentTimestepIndex,\\\\\\\\n scale: 1,\\\\\\\\n flagBoundingBoxUpdate,\\\\\\\\n });\\\\\\\\n\\\\\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\\\\\n\\\\\\\\n const handleDateTimeChange = (date: string) => {\\\\\\\\n const index = timesteps.indexOf(date);\\\\\\\\n setCurrentTimestepIndex(index);\\\\\\\\n };\\\\\\\\n\\\\\\\\n const onViewStateChange = () => {\\\\\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n isMapLoaded(true)}\\\\\\\\n onViewStateChange={onViewStateChange}\\\\\\\\n />\\\\\\\\n
\\\\\\\\n \\\\\\\\n
\\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"AnimationLayerStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 } } };\\\\r\\\\nimport * as React from 'react';\\\\r\\\\nimport DeckGL from '@deck.gl/react';\\\\r\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\r\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\r\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\r\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\n\\\\\\\\nimport DeckGL from '@deck.gl/react';\\\\\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\\\\\nimport { Layer } from 'deck.gl';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Map Components',\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst INITIAL_VIEW_STATE = {\\\\\\\\n longitude: 12.623328,\\\\\\\\n latitude: 55.686408,\\\\\\\\n zoom: 9,\\\\\\\\n pitch: 0,\\\\\\\\n bearing: 0,\\\\\\\\n};\\\\\\\\n\\\\\\\\nconst timesteps = [\\\\\\\\n '2018-09-12T12:00:00',\\\\\\\\n '2018-09-12T12:30:00',\\\\\\\\n '2018-09-12T13:00:00',\\\\\\\\n '2018-09-12T13:30:00',\\\\\\\\n '2018-09-12T14:00:00',\\\\\\\\n '2018-09-12T14:30:00',\\\\\\\\n '2018-09-12T15:00:00',\\\\\\\\n '2018-09-12T15:30:00',\\\\\\\\n '2018-09-12T16:00:00',\\\\\\\\n '2018-09-12T16:30:00',\\\\\\\\n '2018-09-12T17:00:00',\\\\\\\\n '2018-09-12T17:30:00',\\\\\\\\n '2018-09-12T18:00:00',\\\\\\\\n '2018-09-12T18:30:00',\\\\\\\\n '2018-09-12T19:00:00',\\\\\\\\n '2018-09-12T19:30:00',\\\\\\\\n '2018-09-12T20:00:00',\\\\\\\\n '2018-09-12T20:30:00',\\\\\\\\n '2018-09-12T21:00:00',\\\\\\\\n '2018-09-12T21:30:00',\\\\\\\\n '2018-09-12T22:00:00',\\\\\\\\n '2018-09-12T22:30:00',\\\\\\\\n '2018-09-12T23:00:00',\\\\\\\\n '2018-09-12T23:30:00',\\\\\\\\n];\\\\\\\\n\\\\\\\\nexport const AnimationLayerStory = () => {\\\\\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\\\\\n const [_, isMapLoaded] = React.useState(false);\\\\\\\\n\\\\\\\\n const tileLayer = new TileLayer({\\\\\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\\\\\n minZoom: 0,\\\\\\\\n maxZoom: 19,\\\\\\\\n tileSize: 256,\\\\\\\\n\\\\\\\\n renderSubLayers: (props: any) => {\\\\\\\\n const {\\\\\\\\n bbox: { west, south, east, north },\\\\\\\\n } = props.tile;\\\\\\\\n\\\\\\\\n return new BitmapLayer(props, {\\\\\\\\n data: null,\\\\\\\\n image: props.data,\\\\\\\\n bounds: [west, south, east, north],\\\\\\\\n });\\\\\\\\n },\\\\\\\\n });\\\\\\\\n\\\\\\\\n const animationLayer = new AnimationLayer({\\\\\\\\n id: 'AnimationLayer',\\\\\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\\\\\n connectionString: 'dfsu-mapsource',\\\\\\\\n token: '',\\\\\\\\n itemNumber: 3,\\\\\\\\n style: 'Ecoli',\\\\\\\\n shadingType: 'ShadedContour',\\\\\\\\n filename: 'KBHEC3dF012.dfsu',\\\\\\\\n timesteps: timesteps,\\\\\\\\n currentTimestepIndex: currentTimestepIndex,\\\\\\\\n scale: 1,\\\\\\\\n flagBoundingBoxUpdate,\\\\\\\\n });\\\\\\\\n\\\\\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\\\\\n\\\\\\\\n const handleDateTimeChange = (date: string) => {\\\\\\\\n const index = timesteps.indexOf(date);\\\\\\\\n setCurrentTimestepIndex(index);\\\\\\\\n };\\\\\\\\n\\\\\\\\n const onViewStateChange = () => {\\\\\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n isMapLoaded(true)}\\\\\\\\n onViewStateChange={onViewStateChange}\\\\\\\\n />\\\\\\\\n
\\\\\\\\n \\\\\\\\n
\\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"animation-layer-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 } } } }, },\\\\r\\\\n title: 'Map Components',\\\\r\\\\n};\\\\r\\\\nconst INITIAL_VIEW_STATE = {\\\\r\\\\n longitude: 12.623328,\\\\r\\\\n latitude: 55.686408,\\\\r\\\\n zoom: 9,\\\\r\\\\n pitch: 0,\\\\r\\\\n bearing: 0,\\\\r\\\\n};\\\\r\\\\nconst timesteps = [\\\\r\\\\n '2018-09-12T12:00:00',\\\\r\\\\n '2018-09-12T12:30:00',\\\\r\\\\n '2018-09-12T13:00:00',\\\\r\\\\n '2018-09-12T13:30:00',\\\\r\\\\n '2018-09-12T14:00:00',\\\\r\\\\n '2018-09-12T14:30:00',\\\\r\\\\n '2018-09-12T15:00:00',\\\\r\\\\n '2018-09-12T15:30:00',\\\\r\\\\n '2018-09-12T16:00:00',\\\\r\\\\n '2018-09-12T16:30:00',\\\\r\\\\n '2018-09-12T17:00:00',\\\\r\\\\n '2018-09-12T17:30:00',\\\\r\\\\n '2018-09-12T18:00:00',\\\\r\\\\n '2018-09-12T18:30:00',\\\\r\\\\n '2018-09-12T19:00:00',\\\\r\\\\n '2018-09-12T19:30:00',\\\\r\\\\n '2018-09-12T20:00:00',\\\\r\\\\n '2018-09-12T20:30:00',\\\\r\\\\n '2018-09-12T21:00:00',\\\\r\\\\n '2018-09-12T21:30:00',\\\\r\\\\n '2018-09-12T22:00:00',\\\\r\\\\n '2018-09-12T22:30:00',\\\\r\\\\n '2018-09-12T23:00:00',\\\\r\\\\n '2018-09-12T23:30:00',\\\\r\\\\n];\\\\r\\\\nexport const AnimationLayerStory = () => {\\\\r\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\r\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\r\\\\n const [_, isMapLoaded] = React.useState(false);\\\\r\\\\n const tileLayer = new TileLayer({\\\\r\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\r\\\\n minZoom: 0,\\\\r\\\\n maxZoom: 19,\\\\r\\\\n tileSize: 256,\\\\r\\\\n renderSubLayers: (props) => {\\\\r\\\\n const { bbox: { west, south, east, north }, } = props.tile;\\\\r\\\\n return new BitmapLayer(props, {\\\\r\\\\n data: null,\\\\r\\\\n image: props.data,\\\\r\\\\n bounds: [west, south, east, north],\\\\r\\\\n });\\\\r\\\\n },\\\\r\\\\n });\\\\r\\\\n const animationLayer = new AnimationLayer({\\\\r\\\\n id: 'AnimationLayer',\\\\r\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\r\\\\n connectionString: 'dfsu-mapsource',\\\\r\\\\n token: '',\\\\r\\\\n itemNumber: 3,\\\\r\\\\n style: 'Ecoli',\\\\r\\\\n shadingType: 'ShadedContour',\\\\r\\\\n filename: 'KBHEC3dF012.dfsu',\\\\r\\\\n timesteps: timesteps,\\\\r\\\\n currentTimestepIndex: currentTimestepIndex,\\\\r\\\\n scale: 1,\\\\r\\\\n flagBoundingBoxUpdate,\\\\r\\\\n });\\\\r\\\\n const layers = [tileLayer, animationLayer];\\\\r\\\\n const handleDateTimeChange = (date) => {\\\\r\\\\n const index = timesteps.indexOf(date);\\\\r\\\\n setCurrentTimestepIndex(index);\\\\r\\\\n };\\\\r\\\\n const onViewStateChange = () => {\\\\r\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\r\\\\n };\\\\r\\\\n return (
\\\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\\\n
\\\\n \\\\n
\\\\n
);\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"AnimationLayerStory\\\":{\\\"startLoc\\\":{\\\"col\\\":35,\\\"line\\\":49},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":95},\\\"startBody\\\":{\\\"col\\\":35,\\\"line\\\":49},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":95}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AnimationLayerStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } };\\r\\nimport * as React from 'react';\\r\\nimport DeckGL from '@deck.gl/react';\\r\\nimport { BitmapLayer } from '@deck.gl/layers';\\r\\nimport { TileLayer } from '@deck.gl/geo-layers';\\r\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\r\\nimport AnimationControl from './AnimationControl/AnimationControl';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\n\\\\\\\\nimport DeckGL from '@deck.gl/react';\\\\\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\\\\\nimport { Layer } from 'deck.gl';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Map Components',\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst INITIAL_VIEW_STATE = {\\\\\\\\n longitude: 12.623328,\\\\\\\\n latitude: 55.686408,\\\\\\\\n zoom: 9,\\\\\\\\n pitch: 0,\\\\\\\\n bearing: 0,\\\\\\\\n};\\\\\\\\n\\\\\\\\nconst timesteps = [\\\\\\\\n '2018-09-12T12:00:00',\\\\\\\\n '2018-09-12T12:30:00',\\\\\\\\n '2018-09-12T13:00:00',\\\\\\\\n '2018-09-12T13:30:00',\\\\\\\\n '2018-09-12T14:00:00',\\\\\\\\n '2018-09-12T14:30:00',\\\\\\\\n '2018-09-12T15:00:00',\\\\\\\\n '2018-09-12T15:30:00',\\\\\\\\n '2018-09-12T16:00:00',\\\\\\\\n '2018-09-12T16:30:00',\\\\\\\\n '2018-09-12T17:00:00',\\\\\\\\n '2018-09-12T17:30:00',\\\\\\\\n '2018-09-12T18:00:00',\\\\\\\\n '2018-09-12T18:30:00',\\\\\\\\n '2018-09-12T19:00:00',\\\\\\\\n '2018-09-12T19:30:00',\\\\\\\\n '2018-09-12T20:00:00',\\\\\\\\n '2018-09-12T20:30:00',\\\\\\\\n '2018-09-12T21:00:00',\\\\\\\\n '2018-09-12T21:30:00',\\\\\\\\n '2018-09-12T22:00:00',\\\\\\\\n '2018-09-12T22:30:00',\\\\\\\\n '2018-09-12T23:00:00',\\\\\\\\n '2018-09-12T23:30:00',\\\\\\\\n];\\\\\\\\n\\\\\\\\nexport const AnimationLayerStory = () => {\\\\\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\\\\\n const [_, isMapLoaded] = React.useState(false);\\\\\\\\n\\\\\\\\n const tileLayer = new TileLayer({\\\\\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\\\\\n minZoom: 0,\\\\\\\\n maxZoom: 19,\\\\\\\\n tileSize: 256,\\\\\\\\n\\\\\\\\n renderSubLayers: (props: any) => {\\\\\\\\n const {\\\\\\\\n bbox: { west, south, east, north },\\\\\\\\n } = props.tile;\\\\\\\\n\\\\\\\\n return new BitmapLayer(props, {\\\\\\\\n data: null,\\\\\\\\n image: props.data,\\\\\\\\n bounds: [west, south, east, north],\\\\\\\\n });\\\\\\\\n },\\\\\\\\n });\\\\\\\\n\\\\\\\\n const animationLayer = new AnimationLayer({\\\\\\\\n id: 'AnimationLayer',\\\\\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\\\\\n connectionString: 'dfsu-mapsource',\\\\\\\\n token: '',\\\\\\\\n itemNumber: 3,\\\\\\\\n style: 'Ecoli',\\\\\\\\n shadingType: 'ShadedContour',\\\\\\\\n filename: 'KBHEC3dF012.dfsu',\\\\\\\\n timesteps: timesteps,\\\\\\\\n currentTimestepIndex: currentTimestepIndex,\\\\\\\\n scale: 1,\\\\\\\\n flagBoundingBoxUpdate,\\\\\\\\n });\\\\\\\\n\\\\\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\\\\\n\\\\\\\\n const handleDateTimeChange = (date: string) => {\\\\\\\\n const index = timesteps.indexOf(date);\\\\\\\\n setCurrentTimestepIndex(index);\\\\\\\\n };\\\\\\\\n\\\\\\\\n const onViewStateChange = () => {\\\\\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n isMapLoaded(true)}\\\\\\\\n onViewStateChange={onViewStateChange}\\\\\\\\n />\\\\\\\\n
\\\\\\\\n \\\\\\\\n
\\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"AnimationLayerStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 } } };\\\\r\\\\nimport * as React from 'react';\\\\r\\\\nimport DeckGL from '@deck.gl/react';\\\\r\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\r\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\r\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\r\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport * as React from 'react';\\\\\\\\n\\\\\\\\nimport DeckGL from '@deck.gl/react';\\\\\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\\\\\nimport { Layer } from 'deck.gl';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Map Components',\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nconst INITIAL_VIEW_STATE = {\\\\\\\\n longitude: 12.623328,\\\\\\\\n latitude: 55.686408,\\\\\\\\n zoom: 9,\\\\\\\\n pitch: 0,\\\\\\\\n bearing: 0,\\\\\\\\n};\\\\\\\\n\\\\\\\\nconst timesteps = [\\\\\\\\n '2018-09-12T12:00:00',\\\\\\\\n '2018-09-12T12:30:00',\\\\\\\\n '2018-09-12T13:00:00',\\\\\\\\n '2018-09-12T13:30:00',\\\\\\\\n '2018-09-12T14:00:00',\\\\\\\\n '2018-09-12T14:30:00',\\\\\\\\n '2018-09-12T15:00:00',\\\\\\\\n '2018-09-12T15:30:00',\\\\\\\\n '2018-09-12T16:00:00',\\\\\\\\n '2018-09-12T16:30:00',\\\\\\\\n '2018-09-12T17:00:00',\\\\\\\\n '2018-09-12T17:30:00',\\\\\\\\n '2018-09-12T18:00:00',\\\\\\\\n '2018-09-12T18:30:00',\\\\\\\\n '2018-09-12T19:00:00',\\\\\\\\n '2018-09-12T19:30:00',\\\\\\\\n '2018-09-12T20:00:00',\\\\\\\\n '2018-09-12T20:30:00',\\\\\\\\n '2018-09-12T21:00:00',\\\\\\\\n '2018-09-12T21:30:00',\\\\\\\\n '2018-09-12T22:00:00',\\\\\\\\n '2018-09-12T22:30:00',\\\\\\\\n '2018-09-12T23:00:00',\\\\\\\\n '2018-09-12T23:30:00',\\\\\\\\n];\\\\\\\\n\\\\\\\\nexport const AnimationLayerStory = () => {\\\\\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\\\\\n const [_, isMapLoaded] = React.useState(false);\\\\\\\\n\\\\\\\\n const tileLayer = new TileLayer({\\\\\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\\\\\n minZoom: 0,\\\\\\\\n maxZoom: 19,\\\\\\\\n tileSize: 256,\\\\\\\\n\\\\\\\\n renderSubLayers: (props: any) => {\\\\\\\\n const {\\\\\\\\n bbox: { west, south, east, north },\\\\\\\\n } = props.tile;\\\\\\\\n\\\\\\\\n return new BitmapLayer(props, {\\\\\\\\n data: null,\\\\\\\\n image: props.data,\\\\\\\\n bounds: [west, south, east, north],\\\\\\\\n });\\\\\\\\n },\\\\\\\\n });\\\\\\\\n\\\\\\\\n const animationLayer = new AnimationLayer({\\\\\\\\n id: 'AnimationLayer',\\\\\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\\\\\n connectionString: 'dfsu-mapsource',\\\\\\\\n token: '',\\\\\\\\n itemNumber: 3,\\\\\\\\n style: 'Ecoli',\\\\\\\\n shadingType: 'ShadedContour',\\\\\\\\n filename: 'KBHEC3dF012.dfsu',\\\\\\\\n timesteps: timesteps,\\\\\\\\n currentTimestepIndex: currentTimestepIndex,\\\\\\\\n scale: 1,\\\\\\\\n flagBoundingBoxUpdate,\\\\\\\\n });\\\\\\\\n\\\\\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\\\\\n\\\\\\\\n const handleDateTimeChange = (date: string) => {\\\\\\\\n const index = timesteps.indexOf(date);\\\\\\\\n setCurrentTimestepIndex(index);\\\\\\\\n };\\\\\\\\n\\\\\\\\n const onViewStateChange = () => {\\\\\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n isMapLoaded(true)}\\\\\\\\n onViewStateChange={onViewStateChange}\\\\\\\\n />\\\\\\\\n
\\\\\\\\n \\\\\\\\n
\\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"animation-layer-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 35, \\\\\\\"line\\\\\\\": 50 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 127 } } } }, },\\\\r\\\\n title: 'Map Components',\\\\r\\\\n};\\\\r\\\\nconst INITIAL_VIEW_STATE = {\\\\r\\\\n longitude: 12.623328,\\\\r\\\\n latitude: 55.686408,\\\\r\\\\n zoom: 9,\\\\r\\\\n pitch: 0,\\\\r\\\\n bearing: 0,\\\\r\\\\n};\\\\r\\\\nconst timesteps = [\\\\r\\\\n '2018-09-12T12:00:00',\\\\r\\\\n '2018-09-12T12:30:00',\\\\r\\\\n '2018-09-12T13:00:00',\\\\r\\\\n '2018-09-12T13:30:00',\\\\r\\\\n '2018-09-12T14:00:00',\\\\r\\\\n '2018-09-12T14:30:00',\\\\r\\\\n '2018-09-12T15:00:00',\\\\r\\\\n '2018-09-12T15:30:00',\\\\r\\\\n '2018-09-12T16:00:00',\\\\r\\\\n '2018-09-12T16:30:00',\\\\r\\\\n '2018-09-12T17:00:00',\\\\r\\\\n '2018-09-12T17:30:00',\\\\r\\\\n '2018-09-12T18:00:00',\\\\r\\\\n '2018-09-12T18:30:00',\\\\r\\\\n '2018-09-12T19:00:00',\\\\r\\\\n '2018-09-12T19:30:00',\\\\r\\\\n '2018-09-12T20:00:00',\\\\r\\\\n '2018-09-12T20:30:00',\\\\r\\\\n '2018-09-12T21:00:00',\\\\r\\\\n '2018-09-12T21:30:00',\\\\r\\\\n '2018-09-12T22:00:00',\\\\r\\\\n '2018-09-12T22:30:00',\\\\r\\\\n '2018-09-12T23:00:00',\\\\r\\\\n '2018-09-12T23:30:00',\\\\r\\\\n];\\\\r\\\\nexport const AnimationLayerStory = () => {\\\\r\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\r\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\r\\\\n const [_, isMapLoaded] = React.useState(false);\\\\r\\\\n const tileLayer = new TileLayer({\\\\r\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\r\\\\n minZoom: 0,\\\\r\\\\n maxZoom: 19,\\\\r\\\\n tileSize: 256,\\\\r\\\\n renderSubLayers: (props) => {\\\\r\\\\n const { bbox: { west, south, east, north }, } = props.tile;\\\\r\\\\n return new BitmapLayer(props, {\\\\r\\\\n data: null,\\\\r\\\\n image: props.data,\\\\r\\\\n bounds: [west, south, east, north],\\\\r\\\\n });\\\\r\\\\n },\\\\r\\\\n });\\\\r\\\\n const animationLayer = new AnimationLayer({\\\\r\\\\n id: 'AnimationLayer',\\\\r\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\r\\\\n connectionString: 'dfsu-mapsource',\\\\r\\\\n token: '',\\\\r\\\\n itemNumber: 3,\\\\r\\\\n style: 'Ecoli',\\\\r\\\\n shadingType: 'ShadedContour',\\\\r\\\\n filename: 'KBHEC3dF012.dfsu',\\\\r\\\\n timesteps: timesteps,\\\\r\\\\n currentTimestepIndex: currentTimestepIndex,\\\\r\\\\n scale: 1,\\\\r\\\\n flagBoundingBoxUpdate,\\\\r\\\\n });\\\\r\\\\n const layers = [tileLayer, animationLayer];\\\\r\\\\n const handleDateTimeChange = (date) => {\\\\r\\\\n const index = timesteps.indexOf(date);\\\\r\\\\n setCurrentTimestepIndex(index);\\\\r\\\\n };\\\\r\\\\n const onViewStateChange = () => {\\\\r\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\r\\\\n };\\\\r\\\\n return (
\\\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\\\n
\\\\n \\\\n
\\\\n
);\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"animation-layer-story\\\":{\\\"startLoc\\\":{\\\"col\\\":35,\\\"line\\\":49},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":95},\\\"startBody\\\":{\\\"col\\\":35,\\\"line\\\":49},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":95}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"animation-layer-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } } }, },\\r\\n title: 'Map Components',\\r\\n};\\r\\nconst INITIAL_VIEW_STATE = {\\r\\n longitude: 12.623328,\\r\\n latitude: 55.686408,\\r\\n zoom: 9,\\r\\n pitch: 0,\\r\\n bearing: 0,\\r\\n};\\r\\nconst timesteps = [\\r\\n '2018-09-12T12:00:00',\\r\\n '2018-09-12T12:30:00',\\r\\n '2018-09-12T13:00:00',\\r\\n '2018-09-12T13:30:00',\\r\\n '2018-09-12T14:00:00',\\r\\n '2018-09-12T14:30:00',\\r\\n '2018-09-12T15:00:00',\\r\\n '2018-09-12T15:30:00',\\r\\n '2018-09-12T16:00:00',\\r\\n '2018-09-12T16:30:00',\\r\\n '2018-09-12T17:00:00',\\r\\n '2018-09-12T17:30:00',\\r\\n '2018-09-12T18:00:00',\\r\\n '2018-09-12T18:30:00',\\r\\n '2018-09-12T19:00:00',\\r\\n '2018-09-12T19:30:00',\\r\\n '2018-09-12T20:00:00',\\r\\n '2018-09-12T20:30:00',\\r\\n '2018-09-12T21:00:00',\\r\\n '2018-09-12T21:30:00',\\r\\n '2018-09-12T22:00:00',\\r\\n '2018-09-12T22:30:00',\\r\\n '2018-09-12T23:00:00',\\r\\n '2018-09-12T23:30:00',\\r\\n];\\r\\nexport const AnimationLayerStory = () => {\\r\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\r\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\r\\n const [_, isMapLoaded] = React.useState(false);\\r\\n const tileLayer = new TileLayer({\\r\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\r\\n minZoom: 0,\\r\\n maxZoom: 19,\\r\\n tileSize: 256,\\r\\n renderSubLayers: (props) => {\\r\\n const { bbox: { west, south, east, north }, } = props.tile;\\r\\n return new BitmapLayer(props, {\\r\\n data: null,\\r\\n image: props.data,\\r\\n bounds: [west, south, east, north],\\r\\n });\\r\\n },\\r\\n });\\r\\n const animationLayer = new AnimationLayer({\\r\\n id: 'AnimationLayer',\\r\\n apiHost: 'https://domainservices.dhigroup.com',\\r\\n connectionString: 'dfsu-mapsource',\\r\\n token: '',\\r\\n itemNumber: 3,\\r\\n style: 'Ecoli',\\r\\n shadingType: 'ShadedContour',\\r\\n filename: 'KBHEC3dF012.dfsu',\\r\\n timesteps: timesteps,\\r\\n currentTimestepIndex: currentTimestepIndex,\\r\\n scale: 1,\\r\\n flagBoundingBoxUpdate,\\r\\n });\\r\\n const layers = [tileLayer, animationLayer];\\r\\n const handleDateTimeChange = (date) => {\\r\\n const index = timesteps.indexOf(date);\\r\\n setCurrentTimestepIndex(index);\\r\\n };\\r\\n const onViewStateChange = () => {\\r\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\r\\n };\\r\\n return (
\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\n
\\n \\n
\\n
);\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"AnimationLayerStory\":{\"startLoc\":{\"col\":35,\"line\":57},\"endLoc\":{\"col\":1,\"line\":103},\"startBody\":{\"col\":35,\"line\":57},\"endBody\":{\"col\":1,\"line\":103}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AnimationLayerStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } };\\r\\nimport * as React from 'react';\\r\\nimport DeckGL from '@deck.gl/react';\\r\\nimport { BitmapLayer } from '@deck.gl/layers';\\r\\nimport { TileLayer } from '@deck.gl/geo-layers';\\r\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\r\\nimport AnimationControl from './AnimationControl/AnimationControl';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"animation-layer-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } } }, },\\r\\n title: 'Map Components',\\r\\n};\\r\\nconst INITIAL_VIEW_STATE = {\\r\\n longitude: 12.623328,\\r\\n latitude: 55.686408,\\r\\n zoom: 9,\\r\\n pitch: 0,\\r\\n bearing: 0,\\r\\n};\\r\\nconst timesteps = [\\r\\n '2018-09-12T12:00:00',\\r\\n '2018-09-12T12:30:00',\\r\\n '2018-09-12T13:00:00',\\r\\n '2018-09-12T13:30:00',\\r\\n '2018-09-12T14:00:00',\\r\\n '2018-09-12T14:30:00',\\r\\n '2018-09-12T15:00:00',\\r\\n '2018-09-12T15:30:00',\\r\\n '2018-09-12T16:00:00',\\r\\n '2018-09-12T16:30:00',\\r\\n '2018-09-12T17:00:00',\\r\\n '2018-09-12T17:30:00',\\r\\n '2018-09-12T18:00:00',\\r\\n '2018-09-12T18:30:00',\\r\\n '2018-09-12T19:00:00',\\r\\n '2018-09-12T19:30:00',\\r\\n '2018-09-12T20:00:00',\\r\\n '2018-09-12T20:30:00',\\r\\n '2018-09-12T21:00:00',\\r\\n '2018-09-12T21:30:00',\\r\\n '2018-09-12T22:00:00',\\r\\n '2018-09-12T22:30:00',\\r\\n '2018-09-12T23:00:00',\\r\\n '2018-09-12T23:30:00',\\r\\n];\\r\\nexport const AnimationLayerStory = () => {\\r\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\r\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\r\\n const [_, isMapLoaded] = React.useState(false);\\r\\n const tileLayer = new TileLayer({\\r\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\r\\n minZoom: 0,\\r\\n maxZoom: 19,\\r\\n tileSize: 256,\\r\\n renderSubLayers: (props) => {\\r\\n const { bbox: { west, south, east, north }, } = props.tile;\\r\\n return new BitmapLayer(props, {\\r\\n data: null,\\r\\n image: props.data,\\r\\n bounds: [west, south, east, north],\\r\\n });\\r\\n },\\r\\n });\\r\\n const animationLayer = new AnimationLayer({\\r\\n id: 'AnimationLayer',\\r\\n apiHost: 'https://domainservices.dhigroup.com',\\r\\n connectionString: 'dfsu-mapsource',\\r\\n token: '',\\r\\n itemNumber: 3,\\r\\n style: 'Ecoli',\\r\\n shadingType: 'ShadedContour',\\r\\n filename: 'KBHEC3dF012.dfsu',\\r\\n timesteps: timesteps,\\r\\n currentTimestepIndex: currentTimestepIndex,\\r\\n scale: 1,\\r\\n flagBoundingBoxUpdate,\\r\\n });\\r\\n const layers = [tileLayer, animationLayer];\\r\\n const handleDateTimeChange = (date) => {\\r\\n const index = timesteps.indexOf(date);\\r\\n setCurrentTimestepIndex(index);\\r\\n };\\r\\n const onViewStateChange = () => {\\r\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\r\\n };\\r\\n return (
\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\n
\\n \\n
\\n
);\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"AnimationLayerStory\":{\"startLoc\":{\"col\":35,\"line\":49},\"endLoc\":{\"col\":1,\"line\":95},\"startBody\":{\"col\":35,\"line\":49},\"endBody\":{\"col\":1,\"line\":95}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport * as React from 'react';\\n\\nimport DeckGL from '@deck.gl/react';\\nimport { BitmapLayer } from '@deck.gl/layers';\\nimport { TileLayer } from '@deck.gl/geo-layers';\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\nimport AnimationControl from './AnimationControl/AnimationControl';\\nimport { Layer } from 'deck.gl';\\n\\nexport default {\\n title: 'Map Components',\\n} as Meta;\\n\\nconst INITIAL_VIEW_STATE = {\\n longitude: 12.623328,\\n latitude: 55.686408,\\n zoom: 9,\\n pitch: 0,\\n bearing: 0,\\n};\\n\\nconst timesteps = [\\n '2018-09-12T12:00:00',\\n '2018-09-12T12:30:00',\\n '2018-09-12T13:00:00',\\n '2018-09-12T13:30:00',\\n '2018-09-12T14:00:00',\\n '2018-09-12T14:30:00',\\n '2018-09-12T15:00:00',\\n '2018-09-12T15:30:00',\\n '2018-09-12T16:00:00',\\n '2018-09-12T16:30:00',\\n '2018-09-12T17:00:00',\\n '2018-09-12T17:30:00',\\n '2018-09-12T18:00:00',\\n '2018-09-12T18:30:00',\\n '2018-09-12T19:00:00',\\n '2018-09-12T19:30:00',\\n '2018-09-12T20:00:00',\\n '2018-09-12T20:30:00',\\n '2018-09-12T21:00:00',\\n '2018-09-12T21:30:00',\\n '2018-09-12T22:00:00',\\n '2018-09-12T22:30:00',\\n '2018-09-12T23:00:00',\\n '2018-09-12T23:30:00',\\n];\\n\\nexport const AnimationLayerStory = () => {\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\n const [_, isMapLoaded] = React.useState(false);\\n\\n const tileLayer = new TileLayer({\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\n minZoom: 0,\\n maxZoom: 19,\\n tileSize: 256,\\n\\n renderSubLayers: (props: any) => {\\n const {\\n bbox: { west, south, east, north },\\n } = props.tile;\\n\\n return new BitmapLayer(props, {\\n data: null,\\n image: props.data,\\n bounds: [west, south, east, north],\\n });\\n },\\n });\\n\\n const animationLayer = new AnimationLayer({\\n id: 'AnimationLayer',\\n apiHost: 'https://domainservices.dhigroup.com',\\n connectionString: 'dfsu-mapsource',\\n token: '',\\n itemNumber: 3,\\n style: 'Ecoli',\\n shadingType: 'ShadedContour',\\n filename: 'KBHEC3dF012.dfsu',\\n timesteps: timesteps,\\n currentTimestepIndex: currentTimestepIndex,\\n scale: 1,\\n flagBoundingBoxUpdate,\\n });\\n\\n const layers: Layer[] = [tileLayer, animationLayer];\\n\\n const handleDateTimeChange = (date: string) => {\\n const index = timesteps.indexOf(date);\\n setCurrentTimestepIndex(index);\\n };\\n\\n const onViewStateChange = () => {\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\n };\\n\\n return (\\n
\\n isMapLoaded(true)}\\n onViewStateChange={onViewStateChange}\\n />\\n
\\n \\n
\\n
\\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"AnimationLayerStory\": { \"startLoc\": { \"col\": 35, \"line\": 50 }, \"endLoc\": { \"col\": 1, \"line\": 127 }, \"startBody\": { \"col\": 35, \"line\": 50 }, \"endBody\": { \"col\": 1, \"line\": 127 } } };\r\nimport * as React from 'react';\r\nimport DeckGL from '@deck.gl/react';\r\nimport { BitmapLayer } from '@deck.gl/layers';\r\nimport { TileLayer } from '@deck.gl/geo-layers';\r\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\r\nimport AnimationControl from './AnimationControl/AnimationControl';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"AnimationLayerStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } };\\r\\nimport * as React from 'react';\\r\\nimport DeckGL from '@deck.gl/react';\\r\\nimport { BitmapLayer } from '@deck.gl/layers';\\r\\nimport { TileLayer } from '@deck.gl/geo-layers';\\r\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\r\\nimport AnimationControl from './AnimationControl/AnimationControl';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Meta } from '@storybook/react/types-6-0.d';\\\\nimport * as React from 'react';\\\\n\\\\nimport DeckGL from '@deck.gl/react';\\\\nimport { BitmapLayer } from '@deck.gl/layers';\\\\nimport { TileLayer } from '@deck.gl/geo-layers';\\\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\\\nimport AnimationControl from './AnimationControl/AnimationControl';\\\\nimport { Layer } from 'deck.gl';\\\\n\\\\nexport default {\\\\n title: 'Map Components',\\\\n} as Meta;\\\\n\\\\nconst INITIAL_VIEW_STATE = {\\\\n longitude: 12.623328,\\\\n latitude: 55.686408,\\\\n zoom: 9,\\\\n pitch: 0,\\\\n bearing: 0,\\\\n};\\\\n\\\\nconst timesteps = [\\\\n '2018-09-12T12:00:00',\\\\n '2018-09-12T12:30:00',\\\\n '2018-09-12T13:00:00',\\\\n '2018-09-12T13:30:00',\\\\n '2018-09-12T14:00:00',\\\\n '2018-09-12T14:30:00',\\\\n '2018-09-12T15:00:00',\\\\n '2018-09-12T15:30:00',\\\\n '2018-09-12T16:00:00',\\\\n '2018-09-12T16:30:00',\\\\n '2018-09-12T17:00:00',\\\\n '2018-09-12T17:30:00',\\\\n '2018-09-12T18:00:00',\\\\n '2018-09-12T18:30:00',\\\\n '2018-09-12T19:00:00',\\\\n '2018-09-12T19:30:00',\\\\n '2018-09-12T20:00:00',\\\\n '2018-09-12T20:30:00',\\\\n '2018-09-12T21:00:00',\\\\n '2018-09-12T21:30:00',\\\\n '2018-09-12T22:00:00',\\\\n '2018-09-12T22:30:00',\\\\n '2018-09-12T23:00:00',\\\\n '2018-09-12T23:30:00',\\\\n];\\\\n\\\\nexport const AnimationLayerStory = () => {\\\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\\\n const [_, isMapLoaded] = React.useState(false);\\\\n\\\\n const tileLayer = new TileLayer({\\\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\\\n minZoom: 0,\\\\n maxZoom: 19,\\\\n tileSize: 256,\\\\n\\\\n renderSubLayers: (props: any) => {\\\\n const {\\\\n bbox: { west, south, east, north },\\\\n } = props.tile;\\\\n\\\\n return new BitmapLayer(props, {\\\\n data: null,\\\\n image: props.data,\\\\n bounds: [west, south, east, north],\\\\n });\\\\n },\\\\n });\\\\n\\\\n const animationLayer = new AnimationLayer({\\\\n id: 'AnimationLayer',\\\\n apiHost: 'https://domainservices.dhigroup.com',\\\\n connectionString: 'dfsu-mapsource',\\\\n token: '',\\\\n itemNumber: 3,\\\\n style: 'Ecoli',\\\\n shadingType: 'ShadedContour',\\\\n filename: 'KBHEC3dF012.dfsu',\\\\n timesteps: timesteps,\\\\n currentTimestepIndex: currentTimestepIndex,\\\\n scale: 1,\\\\n flagBoundingBoxUpdate,\\\\n });\\\\n\\\\n const layers: Layer[] = [tileLayer, animationLayer];\\\\n\\\\n const handleDateTimeChange = (date: string) => {\\\\n const index = timesteps.indexOf(date);\\\\n setCurrentTimestepIndex(index);\\\\n };\\\\n\\\\n const onViewStateChange = () => {\\\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\\\n };\\\\n\\\\n return (\\\\n
\\\\n isMapLoaded(true)}\\\\n onViewStateChange={onViewStateChange}\\\\n />\\\\n
\\\\n \\\\n
\\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"animation-layer-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 127 }, \\\"startBody\\\": { \\\"col\\\": 35, \\\"line\\\": 50 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 127 } } } }, },\\r\\n title: 'Map Components',\\r\\n};\\r\\nconst INITIAL_VIEW_STATE = {\\r\\n longitude: 12.623328,\\r\\n latitude: 55.686408,\\r\\n zoom: 9,\\r\\n pitch: 0,\\r\\n bearing: 0,\\r\\n};\\r\\nconst timesteps = [\\r\\n '2018-09-12T12:00:00',\\r\\n '2018-09-12T12:30:00',\\r\\n '2018-09-12T13:00:00',\\r\\n '2018-09-12T13:30:00',\\r\\n '2018-09-12T14:00:00',\\r\\n '2018-09-12T14:30:00',\\r\\n '2018-09-12T15:00:00',\\r\\n '2018-09-12T15:30:00',\\r\\n '2018-09-12T16:00:00',\\r\\n '2018-09-12T16:30:00',\\r\\n '2018-09-12T17:00:00',\\r\\n '2018-09-12T17:30:00',\\r\\n '2018-09-12T18:00:00',\\r\\n '2018-09-12T18:30:00',\\r\\n '2018-09-12T19:00:00',\\r\\n '2018-09-12T19:30:00',\\r\\n '2018-09-12T20:00:00',\\r\\n '2018-09-12T20:30:00',\\r\\n '2018-09-12T21:00:00',\\r\\n '2018-09-12T21:30:00',\\r\\n '2018-09-12T22:00:00',\\r\\n '2018-09-12T22:30:00',\\r\\n '2018-09-12T23:00:00',\\r\\n '2018-09-12T23:30:00',\\r\\n];\\r\\nexport const AnimationLayerStory = () => {\\r\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\r\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\r\\n const [_, isMapLoaded] = React.useState(false);\\r\\n const tileLayer = new TileLayer({\\r\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\r\\n minZoom: 0,\\r\\n maxZoom: 19,\\r\\n tileSize: 256,\\r\\n renderSubLayers: (props) => {\\r\\n const { bbox: { west, south, east, north }, } = props.tile;\\r\\n return new BitmapLayer(props, {\\r\\n data: null,\\r\\n image: props.data,\\r\\n bounds: [west, south, east, north],\\r\\n });\\r\\n },\\r\\n });\\r\\n const animationLayer = new AnimationLayer({\\r\\n id: 'AnimationLayer',\\r\\n apiHost: 'https://domainservices.dhigroup.com',\\r\\n connectionString: 'dfsu-mapsource',\\r\\n token: '',\\r\\n itemNumber: 3,\\r\\n style: 'Ecoli',\\r\\n shadingType: 'ShadedContour',\\r\\n filename: 'KBHEC3dF012.dfsu',\\r\\n timesteps: timesteps,\\r\\n currentTimestepIndex: currentTimestepIndex,\\r\\n scale: 1,\\r\\n flagBoundingBoxUpdate,\\r\\n });\\r\\n const layers = [tileLayer, animationLayer];\\r\\n const handleDateTimeChange = (date) => {\\r\\n const index = timesteps.indexOf(date);\\r\\n setCurrentTimestepIndex(index);\\r\\n };\\r\\n const onViewStateChange = () => {\\r\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\r\\n };\\r\\n return (
\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\n
\\n \\n
\\n
);\\r\\n};\\r\\n\",\"locationsMap\":{\"animation-layer-story\":{\"startLoc\":{\"col\":35,\"line\":49},\"endLoc\":{\"col\":1,\"line\":95},\"startBody\":{\"col\":35,\"line\":49},\"endBody\":{\"col\":1,\"line\":95}}}}, \"storySource\": { \"source\": \"import { Meta } from '@storybook/react/types-6-0.d';\\nimport * as React from 'react';\\n\\nimport DeckGL from '@deck.gl/react';\\nimport { BitmapLayer } from '@deck.gl/layers';\\nimport { TileLayer } from '@deck.gl/geo-layers';\\nimport AnimationLayer from './AnimationLayer/AnimationLayer';\\nimport AnimationControl from './AnimationControl/AnimationControl';\\nimport { Layer } from 'deck.gl';\\n\\nexport default {\\n title: 'Map Components',\\n} as Meta;\\n\\nconst INITIAL_VIEW_STATE = {\\n longitude: 12.623328,\\n latitude: 55.686408,\\n zoom: 9,\\n pitch: 0,\\n bearing: 0,\\n};\\n\\nconst timesteps = [\\n '2018-09-12T12:00:00',\\n '2018-09-12T12:30:00',\\n '2018-09-12T13:00:00',\\n '2018-09-12T13:30:00',\\n '2018-09-12T14:00:00',\\n '2018-09-12T14:30:00',\\n '2018-09-12T15:00:00',\\n '2018-09-12T15:30:00',\\n '2018-09-12T16:00:00',\\n '2018-09-12T16:30:00',\\n '2018-09-12T17:00:00',\\n '2018-09-12T17:30:00',\\n '2018-09-12T18:00:00',\\n '2018-09-12T18:30:00',\\n '2018-09-12T19:00:00',\\n '2018-09-12T19:30:00',\\n '2018-09-12T20:00:00',\\n '2018-09-12T20:30:00',\\n '2018-09-12T21:00:00',\\n '2018-09-12T21:30:00',\\n '2018-09-12T22:00:00',\\n '2018-09-12T22:30:00',\\n '2018-09-12T23:00:00',\\n '2018-09-12T23:30:00',\\n];\\n\\nexport const AnimationLayerStory = () => {\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\n const [_, isMapLoaded] = React.useState(false);\\n\\n const tileLayer = new TileLayer({\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\n minZoom: 0,\\n maxZoom: 19,\\n tileSize: 256,\\n\\n renderSubLayers: (props: any) => {\\n const {\\n bbox: { west, south, east, north },\\n } = props.tile;\\n\\n return new BitmapLayer(props, {\\n data: null,\\n image: props.data,\\n bounds: [west, south, east, north],\\n });\\n },\\n });\\n\\n const animationLayer = new AnimationLayer({\\n id: 'AnimationLayer',\\n apiHost: 'https://domainservices.dhigroup.com',\\n connectionString: 'dfsu-mapsource',\\n token: '',\\n itemNumber: 3,\\n style: 'Ecoli',\\n shadingType: 'ShadedContour',\\n filename: 'KBHEC3dF012.dfsu',\\n timesteps: timesteps,\\n currentTimestepIndex: currentTimestepIndex,\\n scale: 1,\\n flagBoundingBoxUpdate,\\n });\\n\\n const layers: Layer[] = [tileLayer, animationLayer];\\n\\n const handleDateTimeChange = (date: string) => {\\n const index = timesteps.indexOf(date);\\n setCurrentTimestepIndex(index);\\n };\\n\\n const onViewStateChange = () => {\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\n };\\n\\n return (\\n
\\n isMapLoaded(true)}\\n onViewStateChange={onViewStateChange}\\n />\\n
\\n \\n
\\n
\\n );\\n};\\n\", \"locationsMap\": { \"animation-layer-story\": { \"startLoc\": { \"col\": 35, \"line\": 50 }, \"endLoc\": { \"col\": 1, \"line\": 127 }, \"startBody\": { \"col\": 35, \"line\": 50 }, \"endBody\": { \"col\": 1, \"line\": 127 } } } }, },\r\n title: 'Map Components',\r\n};\r\nconst INITIAL_VIEW_STATE = {\r\n longitude: 12.623328,\r\n latitude: 55.686408,\r\n zoom: 9,\r\n pitch: 0,\r\n bearing: 0,\r\n};\r\nconst timesteps = [\r\n '2018-09-12T12:00:00',\r\n '2018-09-12T12:30:00',\r\n '2018-09-12T13:00:00',\r\n '2018-09-12T13:30:00',\r\n '2018-09-12T14:00:00',\r\n '2018-09-12T14:30:00',\r\n '2018-09-12T15:00:00',\r\n '2018-09-12T15:30:00',\r\n '2018-09-12T16:00:00',\r\n '2018-09-12T16:30:00',\r\n '2018-09-12T17:00:00',\r\n '2018-09-12T17:30:00',\r\n '2018-09-12T18:00:00',\r\n '2018-09-12T18:30:00',\r\n '2018-09-12T19:00:00',\r\n '2018-09-12T19:30:00',\r\n '2018-09-12T20:00:00',\r\n '2018-09-12T20:30:00',\r\n '2018-09-12T21:00:00',\r\n '2018-09-12T21:30:00',\r\n '2018-09-12T22:00:00',\r\n '2018-09-12T22:30:00',\r\n '2018-09-12T23:00:00',\r\n '2018-09-12T23:30:00',\r\n];\r\nexport const AnimationLayerStory = () => {\r\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\r\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\r\n const [_, isMapLoaded] = React.useState(false);\r\n const tileLayer = new TileLayer({\r\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\r\n minZoom: 0,\r\n maxZoom: 19,\r\n tileSize: 256,\r\n renderSubLayers: (props) => {\r\n const { bbox: { west, south, east, north }, } = props.tile;\r\n return new BitmapLayer(props, {\r\n data: null,\r\n image: props.data,\r\n bounds: [west, south, east, north],\r\n });\r\n },\r\n });\r\n const animationLayer = new AnimationLayer({\r\n id: 'AnimationLayer',\r\n apiHost: 'https://domainservices.dhigroup.com',\r\n connectionString: 'dfsu-mapsource',\r\n token: '',\r\n itemNumber: 3,\r\n style: 'Ecoli',\r\n shadingType: 'ShadedContour',\r\n filename: 'KBHEC3dF012.dfsu',\r\n timesteps: timesteps,\r\n currentTimestepIndex: currentTimestepIndex,\r\n scale: 1,\r\n flagBoundingBoxUpdate,\r\n });\r\n const layers = [tileLayer, animationLayer];\r\n const handleDateTimeChange = (date) => {\r\n const index = timesteps.indexOf(date);\r\n setCurrentTimestepIndex(index);\r\n };\r\n const onViewStateChange = () => {\r\n setFlagBoundingBoxUpdate((prev) => prev + 1);\r\n };\r\n return (
\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\n
\n \n
\n
);\r\n};\r\n\n\n\nAnimationLayerStory.parameters = { storySource: { source: \"() => {\\r\\n const [currentTimestepIndex, setCurrentTimestepIndex] = React.useState(0);\\r\\n const [flagBoundingBoxUpdate, setFlagBoundingBoxUpdate] = React.useState(0);\\r\\n const [_, isMapLoaded] = React.useState(false);\\r\\n const tileLayer = new TileLayer({\\r\\n data: 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png',\\r\\n minZoom: 0,\\r\\n maxZoom: 19,\\r\\n tileSize: 256,\\r\\n renderSubLayers: (props) => {\\r\\n const { bbox: { west, south, east, north }, } = props.tile;\\r\\n return new BitmapLayer(props, {\\r\\n data: null,\\r\\n image: props.data,\\r\\n bounds: [west, south, east, north],\\r\\n });\\r\\n },\\r\\n });\\r\\n const animationLayer = new AnimationLayer({\\r\\n id: 'AnimationLayer',\\r\\n apiHost: 'https://domainservices.dhigroup.com',\\r\\n connectionString: 'dfsu-mapsource',\\r\\n token: '',\\r\\n itemNumber: 3,\\r\\n style: 'Ecoli',\\r\\n shadingType: 'ShadedContour',\\r\\n filename: 'KBHEC3dF012.dfsu',\\r\\n timesteps: timesteps,\\r\\n currentTimestepIndex: currentTimestepIndex,\\r\\n scale: 1,\\r\\n flagBoundingBoxUpdate,\\r\\n });\\r\\n const layers = [tileLayer, animationLayer];\\r\\n const handleDateTimeChange = (date) => {\\r\\n const index = timesteps.indexOf(date);\\r\\n setCurrentTimestepIndex(index);\\r\\n };\\r\\n const onViewStateChange = () => {\\r\\n setFlagBoundingBoxUpdate((prev) => prev + 1);\\r\\n };\\r\\n return (
\\n isMapLoaded(true)} onViewStateChange={onViewStateChange}/>\\n
\\n \\n
\\n
);\\r\\n}\" }, ...AnimationLayerStory.parameters };","import { makeStyles, Theme } from '@material-ui/core/styles';\n\nexport const TreeViewStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n typography: {\n display: 'flex',\n padding: '6px 4px',\n textAlign: 'center',\n justifyContent: 'space-evenly',\n position: 'relative',\n alignItems: 'center',\n fontSize: '0.8rem',\n },\n checkbox: {\n padding: '6px 4px',\n },\n}));\n","import { Checkbox, CircularProgress, Typography } from '@material-ui/core';\nimport { ChevronRight, KeyboardArrowDown } from '@material-ui/icons';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport TreeView from '@material-ui/lab/TreeView';\nimport React, { useEffect, useState } from 'react';\nimport { TreeViewStyles } from './styles';\nimport { TreeViewProps } from './types';\n\nconst DHITreeView = ({ list, onExpand, onChecked }: TreeViewProps) => {\n const [selected, setSelected] = useState([]);\n const [expanded, setExpanded] = useState([]);\n const classes = TreeViewStyles();\n\n const handleExpanded = (event, nodeIds) => {\n const difference = nodeIds.filter((x) => !expanded.includes(x));\n setExpanded(nodeIds);\n\n if (difference.length > 0) {\n onExpand(difference[0]);\n }\n };\n\n const checkBoxClicked = (event, checked, id) => {\n const existing = selected.some((item) => item === id);\n\n if (existing) {\n const removeSelection = selected.filter((item) => item !== id);\n setSelected([...removeSelection]);\n } else {\n setSelected([...selected, id]);\n onExpand(event.target.id);\n }\n };\n\n const structureLevel = (treeViewList) => {\n const elements = [];\n\n treeViewList?.forEach((treeList, i) => {\n const { value, children } = treeList;\n\n if (i.length !== 0) {\n const label = (\n
\n {treeList.label === '' ? (\n \n ) : (\n <>\n {!children && (\n item === value)}\n className={classes.checkbox}\n onChange={(event, checked) => checkBoxClicked(event, checked, value)}\n />\n )}\n\n \n {treeList.label.replace('/', '')}\n \n \n )}\n
\n );\n\n elements.push(\n children && children.length > 0 ? (\n \n {structureLevel(children)}\n \n ) : (\n <>\n \n \n ),\n );\n } else if (children) {\n elements.push(structureLevel(children));\n }\n });\n\n return elements;\n };\n\n useEffect(() => {\n onChecked(selected);\n }, [selected]);\n\n return (\n }\n defaultExpandIcon={}\n expanded={expanded}\n >\n {structureLevel(list)}\n \n );\n};\n\nexport default DHITreeView;\n","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\\\\\nimport { recursive } from '../utils/Utils';\\\\\\\\nimport TreeView from './TreeView';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Tree View Components',\\\\\\\\n component: TreeView,\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TreeViewStory = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n const [list, setList] = useState([]);\\\\\\\\n const [loading, setLoading] = useState(false);\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const fetchTreeViewChildren = (group) => {\\\\\\\\n setLoading(true);\\\\\\\\n\\\\\\\\n if (group.slice(-1) === '/') {\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n };\\\\\\\\n\\\\\\\\n const addChildren = (childrenList, group) => {\\\\\\\\n return childrenList.map((child) => ({\\\\\\\\n value: child,\\\\\\\\n label: child.replace(group, ''),\\\\\\\\n ...(child.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n };\\\\\\\\n\\\\\\\\n const fetchOnCheck = (checked) => {\\\\\\\\n console.log({ checked });\\\\\\\\n };\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\\\\\n (res) => {\\\\\\\\n const data = res.map((d) => ({\\\\\\\\n value: d,\\\\\\\\n label: d,\\\\\\\\n topLevel: true,\\\\\\\\n ...(d.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n\\\\\\\\n setList(data);\\\\\\\\n },\\\\\\\\n (err) => console.log(err),\\\\\\\\n );\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n list && (\\\\\\\\n fetchTreeViewChildren(expand)}\\\\\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\\\\\n />\\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"TreeViewStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 } } };\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\r\\\\nimport { recursive } from '../utils/Utils';\\\\r\\\\nimport TreeView from './TreeView';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\\\\\nimport { recursive } from '../utils/Utils';\\\\\\\\nimport TreeView from './TreeView';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Tree View Components',\\\\\\\\n component: TreeView,\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TreeViewStory = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n const [list, setList] = useState([]);\\\\\\\\n const [loading, setLoading] = useState(false);\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const fetchTreeViewChildren = (group) => {\\\\\\\\n setLoading(true);\\\\\\\\n\\\\\\\\n if (group.slice(-1) === '/') {\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n };\\\\\\\\n\\\\\\\\n const addChildren = (childrenList, group) => {\\\\\\\\n return childrenList.map((child) => ({\\\\\\\\n value: child,\\\\\\\\n label: child.replace(group, ''),\\\\\\\\n ...(child.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n };\\\\\\\\n\\\\\\\\n const fetchOnCheck = (checked) => {\\\\\\\\n console.log({ checked });\\\\\\\\n };\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\\\\\n (res) => {\\\\\\\\n const data = res.map((d) => ({\\\\\\\\n value: d,\\\\\\\\n label: d,\\\\\\\\n topLevel: true,\\\\\\\\n ...(d.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n\\\\\\\\n setList(data);\\\\\\\\n },\\\\\\\\n (err) => console.log(err),\\\\\\\\n );\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n list && (\\\\\\\\n fetchTreeViewChildren(expand)}\\\\\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\\\\\n />\\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"tree-view-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 } } } }, },\\\\r\\\\n title: 'Tree View Components',\\\\r\\\\n component: TreeView,\\\\r\\\\n};\\\\r\\\\nexport const TreeViewStory = () => {\\\\r\\\\n const host = process.env.ENDPOINT_URL;\\\\r\\\\n const [token, setToken] = useState('');\\\\r\\\\n const [list, setList] = useState([]);\\\\r\\\\n const [loading, setLoading] = useState(false);\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const fetchTreeViewChildren = (group) => {\\\\r\\\\n setLoading(true);\\\\r\\\\n if (group.slice(-1) === '/') {\\\\r\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe((res) => {\\\\r\\\\n const children = addChildren(res, group);\\\\r\\\\n list.map((item) => recursive(item, group, children));\\\\r\\\\n setList(list);\\\\r\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\r\\\\n }, (error) => console.log(error));\\\\r\\\\n }\\\\r\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe((res) => {\\\\r\\\\n const children = addChildren(res, group);\\\\r\\\\n list.map((item) => recursive(item, group, children));\\\\r\\\\n setList(list);\\\\r\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\r\\\\n }, (error) => console.log(error));\\\\r\\\\n };\\\\r\\\\n const addChildren = (childrenList, group) => {\\\\r\\\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\\\r\\\\n children: [\\\\r\\\\n {\\\\r\\\\n value: '',\\\\r\\\\n label: '',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n }))));\\\\r\\\\n };\\\\r\\\\n const fetchOnCheck = (checked) => {\\\\r\\\\n console.log({ checked });\\\\r\\\\n };\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\\\r\\\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\\\r\\\\n children: [\\\\r\\\\n {\\\\r\\\\n value: '',\\\\r\\\\n label: '',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n }))));\\\\r\\\\n setList(data);\\\\r\\\\n }, (err) => console.log(err));\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"TreeViewStory\\\":{\\\"startLoc\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":78},\\\"startBody\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":78}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TreeViewStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } };\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\r\\nimport { recursive } from '../utils/Utils';\\r\\nimport TreeView from './TreeView';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\\\\\nimport { recursive } from '../utils/Utils';\\\\\\\\nimport TreeView from './TreeView';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Tree View Components',\\\\\\\\n component: TreeView,\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TreeViewStory = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n const [list, setList] = useState([]);\\\\\\\\n const [loading, setLoading] = useState(false);\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const fetchTreeViewChildren = (group) => {\\\\\\\\n setLoading(true);\\\\\\\\n\\\\\\\\n if (group.slice(-1) === '/') {\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n };\\\\\\\\n\\\\\\\\n const addChildren = (childrenList, group) => {\\\\\\\\n return childrenList.map((child) => ({\\\\\\\\n value: child,\\\\\\\\n label: child.replace(group, ''),\\\\\\\\n ...(child.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n };\\\\\\\\n\\\\\\\\n const fetchOnCheck = (checked) => {\\\\\\\\n console.log({ checked });\\\\\\\\n };\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\\\\\n (res) => {\\\\\\\\n const data = res.map((d) => ({\\\\\\\\n value: d,\\\\\\\\n label: d,\\\\\\\\n topLevel: true,\\\\\\\\n ...(d.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n\\\\\\\\n setList(data);\\\\\\\\n },\\\\\\\\n (err) => console.log(err),\\\\\\\\n );\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n list && (\\\\\\\\n fetchTreeViewChildren(expand)}\\\\\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\\\\\n />\\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"TreeViewStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 } } };\\\\r\\\\nimport React, { useEffect, useState } from 'react';\\\\r\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\r\\\\nimport { recursive } from '../utils/Utils';\\\\r\\\\nimport TreeView from './TreeView';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import React, { useEffect, useState } from 'react';\\\\\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\\\\\nimport { recursive } from '../utils/Utils';\\\\\\\\nimport TreeView from './TreeView';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Tree View Components',\\\\\\\\n component: TreeView,\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const TreeViewStory = () => {\\\\\\\\n const host = process.env.ENDPOINT_URL;\\\\\\\\n const [token, setToken] = useState('');\\\\\\\\n const [list, setList] = useState([]);\\\\\\\\n const [loading, setLoading] = useState(false);\\\\\\\\n\\\\\\\\n const dataSources = [\\\\\\\\n {\\\\\\\\n host: 'https://domainservices.dhigroup.com',\\\\\\\\n connection: 'mclite-timeseries',\\\\\\\\n },\\\\\\\\n ];\\\\\\\\n\\\\\\\\n const fetchTreeViewChildren = (group) => {\\\\\\\\n setLoading(true);\\\\\\\\n\\\\\\\\n if (group.slice(-1) === '/') {\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n }\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\\\\\\\\\/$/, '')).subscribe(\\\\\\\\n (res) => {\\\\\\\\n const children = addChildren(res, group);\\\\\\\\n list.map((item) => recursive(item, group, children));\\\\\\\\n\\\\\\\\n setList(list);\\\\\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\\\\\n },\\\\\\\\n (error) => console.log(error),\\\\\\\\n );\\\\\\\\n };\\\\\\\\n\\\\\\\\n const addChildren = (childrenList, group) => {\\\\\\\\n return childrenList.map((child) => ({\\\\\\\\n value: child,\\\\\\\\n label: child.replace(group, ''),\\\\\\\\n ...(child.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n };\\\\\\\\n\\\\\\\\n const fetchOnCheck = (checked) => {\\\\\\\\n console.log({ checked });\\\\\\\\n };\\\\\\\\n\\\\\\\\n useEffect(() => {\\\\\\\\n fetchToken(host, {\\\\\\\\n id: process.env.USERUSER,\\\\\\\\n password: process.env.USERPASSWORD,\\\\\\\\n }).subscribe(\\\\\\\\n (res) => {\\\\\\\\n setToken(res.accessToken.token);\\\\\\\\n\\\\\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\\\\\n (res) => {\\\\\\\\n const data = res.map((d) => ({\\\\\\\\n value: d,\\\\\\\\n label: d,\\\\\\\\n topLevel: true,\\\\\\\\n ...(d.slice(-1) === '/' && {\\\\\\\\n children: [\\\\\\\\n {\\\\\\\\n value: '',\\\\\\\\n label: '',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n }),\\\\\\\\n }));\\\\\\\\n\\\\\\\\n setList(data);\\\\\\\\n },\\\\\\\\n (err) => console.log(err),\\\\\\\\n );\\\\\\\\n },\\\\\\\\n (err) => {\\\\\\\\n console.log(err);\\\\\\\\n },\\\\\\\\n );\\\\\\\\n }, []);\\\\\\\\n\\\\\\\\n return (\\\\\\\\n list && (\\\\\\\\n fetchTreeViewChildren(expand)}\\\\\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\\\\\n />\\\\\\\\n )\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"tree-view-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 29, \\\\\\\"line\\\\\\\": 11 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 115 } } } }, },\\\\r\\\\n title: 'Tree View Components',\\\\r\\\\n component: TreeView,\\\\r\\\\n};\\\\r\\\\nexport const TreeViewStory = () => {\\\\r\\\\n const host = process.env.ENDPOINT_URL;\\\\r\\\\n const [token, setToken] = useState('');\\\\r\\\\n const [list, setList] = useState([]);\\\\r\\\\n const [loading, setLoading] = useState(false);\\\\r\\\\n const dataSources = [\\\\r\\\\n {\\\\r\\\\n host: 'https://domainservices.dhigroup.com',\\\\r\\\\n connection: 'mclite-timeseries',\\\\r\\\\n },\\\\r\\\\n ];\\\\r\\\\n const fetchTreeViewChildren = (group) => {\\\\r\\\\n setLoading(true);\\\\r\\\\n if (group.slice(-1) === '/') {\\\\r\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe((res) => {\\\\r\\\\n const children = addChildren(res, group);\\\\r\\\\n list.map((item) => recursive(item, group, children));\\\\r\\\\n setList(list);\\\\r\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\r\\\\n }, (error) => console.log(error));\\\\r\\\\n }\\\\r\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe((res) => {\\\\r\\\\n const children = addChildren(res, group);\\\\r\\\\n list.map((item) => recursive(item, group, children));\\\\r\\\\n setList(list);\\\\r\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\r\\\\n }, (error) => console.log(error));\\\\r\\\\n };\\\\r\\\\n const addChildren = (childrenList, group) => {\\\\r\\\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\\\r\\\\n children: [\\\\r\\\\n {\\\\r\\\\n value: '',\\\\r\\\\n label: '',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n }))));\\\\r\\\\n };\\\\r\\\\n const fetchOnCheck = (checked) => {\\\\r\\\\n console.log({ checked });\\\\r\\\\n };\\\\r\\\\n useEffect(() => {\\\\r\\\\n fetchToken(host, {\\\\r\\\\n id: process.env.USERUSER,\\\\r\\\\n password: process.env.USERPASSWORD,\\\\r\\\\n }).subscribe((res) => {\\\\r\\\\n setToken(res.accessToken.token);\\\\r\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\\\r\\\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\\\r\\\\n children: [\\\\r\\\\n {\\\\r\\\\n value: '',\\\\r\\\\n label: '',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n }))));\\\\r\\\\n setList(data);\\\\r\\\\n }, (err) => console.log(err));\\\\r\\\\n }, (err) => {\\\\r\\\\n console.log(err);\\\\r\\\\n });\\\\r\\\\n }, []);\\\\r\\\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"tree-view-story\\\":{\\\"startLoc\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":78},\\\"startBody\\\":{\\\"col\\\":29,\\\"line\\\":15},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":78}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"tree-view-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } } }, },\\r\\n title: 'Tree View Components',\\r\\n component: TreeView,\\r\\n};\\r\\nexport const TreeViewStory = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const [list, setList] = useState([]);\\r\\n const [loading, setLoading] = useState(false);\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n const fetchTreeViewChildren = (group) => {\\r\\n setLoading(true);\\r\\n if (group.slice(-1) === '/') {\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n }\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n };\\r\\n const addChildren = (childrenList, group) => {\\r\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n };\\r\\n const fetchOnCheck = (checked) => {\\r\\n console.log({ checked });\\r\\n };\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\r\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n setList(data);\\r\\n }, (err) => console.log(err));\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"TreeViewStory\":{\"startLoc\":{\"col\":29,\"line\":23},\"endLoc\":{\"col\":1,\"line\":86},\"startBody\":{\"col\":29,\"line\":23},\"endBody\":{\"col\":1,\"line\":86}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TreeViewStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } };\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\r\\nimport { recursive } from '../utils/Utils';\\r\\nimport TreeView from './TreeView';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"tree-view-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } } }, },\\r\\n title: 'Tree View Components',\\r\\n component: TreeView,\\r\\n};\\r\\nexport const TreeViewStory = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const [list, setList] = useState([]);\\r\\n const [loading, setLoading] = useState(false);\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n const fetchTreeViewChildren = (group) => {\\r\\n setLoading(true);\\r\\n if (group.slice(-1) === '/') {\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n }\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n };\\r\\n const addChildren = (childrenList, group) => {\\r\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n };\\r\\n const fetchOnCheck = (checked) => {\\r\\n console.log({ checked });\\r\\n };\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\r\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n setList(data);\\r\\n }, (err) => console.log(err));\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"TreeViewStory\":{\"startLoc\":{\"col\":29,\"line\":15},\"endLoc\":{\"col\":1,\"line\":78},\"startBody\":{\"col\":29,\"line\":15},\"endBody\":{\"col\":1,\"line\":78}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import React, { useEffect, useState } from 'react';\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\nimport { recursive } from '../utils/Utils';\\nimport TreeView from './TreeView';\\n\\nexport default {\\n title: 'Tree View Components',\\n component: TreeView,\\n};\\n\\nexport const TreeViewStory = () => {\\n const host = process.env.ENDPOINT_URL;\\n const [token, setToken] = useState('');\\n const [list, setList] = useState([]);\\n const [loading, setLoading] = useState(false);\\n\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'mclite-timeseries',\\n },\\n ];\\n\\n const fetchTreeViewChildren = (group) => {\\n setLoading(true);\\n\\n if (group.slice(-1) === '/') {\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe(\\n (res) => {\\n const children = addChildren(res, group);\\n list.map((item) => recursive(item, group, children));\\n\\n setList(list);\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\n },\\n (error) => console.log(error),\\n );\\n }\\n\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe(\\n (res) => {\\n const children = addChildren(res, group);\\n list.map((item) => recursive(item, group, children));\\n\\n setList(list);\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\n },\\n (error) => console.log(error),\\n );\\n };\\n\\n const addChildren = (childrenList, group) => {\\n return childrenList.map((child) => ({\\n value: child,\\n label: child.replace(group, ''),\\n ...(child.slice(-1) === '/' && {\\n children: [\\n {\\n value: '',\\n label: '',\\n },\\n ],\\n }),\\n }));\\n };\\n\\n const fetchOnCheck = (checked) => {\\n console.log({ checked });\\n };\\n\\n useEffect(() => {\\n fetchToken(host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\n (res) => {\\n const data = res.map((d) => ({\\n value: d,\\n label: d,\\n topLevel: true,\\n ...(d.slice(-1) === '/' && {\\n children: [\\n {\\n value: '',\\n label: '',\\n },\\n ],\\n }),\\n }));\\n\\n setList(data);\\n },\\n (err) => console.log(err),\\n );\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n return (\\n list && (\\n fetchTreeViewChildren(expand)}\\n onChecked={(checked) => fetchOnCheck(checked)}\\n />\\n )\\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"TreeViewStory\": { \"startLoc\": { \"col\": 29, \"line\": 11 }, \"endLoc\": { \"col\": 1, \"line\": 115 }, \"startBody\": { \"col\": 29, \"line\": 11 }, \"endBody\": { \"col\": 1, \"line\": 115 } } };\r\nimport React, { useEffect, useState } from 'react';\r\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\r\nimport { recursive } from '../utils/Utils';\r\nimport TreeView from './TreeView';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"TreeViewStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } };\\r\\nimport React, { useEffect, useState } from 'react';\\r\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\r\\nimport { recursive } from '../utils/Utils';\\r\\nimport TreeView from './TreeView';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import React, { useEffect, useState } from 'react';\\\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\\\nimport { recursive } from '../utils/Utils';\\\\nimport TreeView from './TreeView';\\\\n\\\\nexport default {\\\\n title: 'Tree View Components',\\\\n component: TreeView,\\\\n};\\\\n\\\\nexport const TreeViewStory = () => {\\\\n const host = process.env.ENDPOINT_URL;\\\\n const [token, setToken] = useState('');\\\\n const [list, setList] = useState([]);\\\\n const [loading, setLoading] = useState(false);\\\\n\\\\n const dataSources = [\\\\n {\\\\n host: 'https://domainservices.dhigroup.com',\\\\n connection: 'mclite-timeseries',\\\\n },\\\\n ];\\\\n\\\\n const fetchTreeViewChildren = (group) => {\\\\n setLoading(true);\\\\n\\\\n if (group.slice(-1) === '/') {\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n }\\\\n\\\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\\\\\/$/, '')).subscribe(\\\\n (res) => {\\\\n const children = addChildren(res, group);\\\\n list.map((item) => recursive(item, group, children));\\\\n\\\\n setList(list);\\\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\\\n },\\\\n (error) => console.log(error),\\\\n );\\\\n };\\\\n\\\\n const addChildren = (childrenList, group) => {\\\\n return childrenList.map((child) => ({\\\\n value: child,\\\\n label: child.replace(group, ''),\\\\n ...(child.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n };\\\\n\\\\n const fetchOnCheck = (checked) => {\\\\n console.log({ checked });\\\\n };\\\\n\\\\n useEffect(() => {\\\\n fetchToken(host, {\\\\n id: process.env.USERUSER,\\\\n password: process.env.USERPASSWORD,\\\\n }).subscribe(\\\\n (res) => {\\\\n setToken(res.accessToken.token);\\\\n\\\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\\\n (res) => {\\\\n const data = res.map((d) => ({\\\\n value: d,\\\\n label: d,\\\\n topLevel: true,\\\\n ...(d.slice(-1) === '/' && {\\\\n children: [\\\\n {\\\\n value: '',\\\\n label: '',\\\\n },\\\\n ],\\\\n }),\\\\n }));\\\\n\\\\n setList(data);\\\\n },\\\\n (err) => console.log(err),\\\\n );\\\\n },\\\\n (err) => {\\\\n console.log(err);\\\\n },\\\\n );\\\\n }, []);\\\\n\\\\n return (\\\\n list && (\\\\n fetchTreeViewChildren(expand)}\\\\n onChecked={(checked) => fetchOnCheck(checked)}\\\\n />\\\\n )\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"tree-view-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 115 }, \\\"startBody\\\": { \\\"col\\\": 29, \\\"line\\\": 11 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 115 } } } }, },\\r\\n title: 'Tree View Components',\\r\\n component: TreeView,\\r\\n};\\r\\nexport const TreeViewStory = () => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const [list, setList] = useState([]);\\r\\n const [loading, setLoading] = useState(false);\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n const fetchTreeViewChildren = (group) => {\\r\\n setLoading(true);\\r\\n if (group.slice(-1) === '/') {\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n }\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n };\\r\\n const addChildren = (childrenList, group) => {\\r\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n };\\r\\n const fetchOnCheck = (checked) => {\\r\\n console.log({ checked });\\r\\n };\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\r\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n setList(data);\\r\\n }, (err) => console.log(err));\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\r\\n};\\r\\n\",\"locationsMap\":{\"tree-view-story\":{\"startLoc\":{\"col\":29,\"line\":15},\"endLoc\":{\"col\":1,\"line\":78},\"startBody\":{\"col\":29,\"line\":15},\"endBody\":{\"col\":1,\"line\":78}}}}, \"storySource\": { \"source\": \"import React, { useEffect, useState } from 'react';\\nimport { fetchTimeseriesFullNames, fetchToken } from '../api';\\nimport { recursive } from '../utils/Utils';\\nimport TreeView from './TreeView';\\n\\nexport default {\\n title: 'Tree View Components',\\n component: TreeView,\\n};\\n\\nexport const TreeViewStory = () => {\\n const host = process.env.ENDPOINT_URL;\\n const [token, setToken] = useState('');\\n const [list, setList] = useState([]);\\n const [loading, setLoading] = useState(false);\\n\\n const dataSources = [\\n {\\n host: 'https://domainservices.dhigroup.com',\\n connection: 'mclite-timeseries',\\n },\\n ];\\n\\n const fetchTreeViewChildren = (group) => {\\n setLoading(true);\\n\\n if (group.slice(-1) === '/') {\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe(\\n (res) => {\\n const children = addChildren(res, group);\\n list.map((item) => recursive(item, group, children));\\n\\n setList(list);\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\n },\\n (error) => console.log(error),\\n );\\n }\\n\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe(\\n (res) => {\\n const children = addChildren(res, group);\\n list.map((item) => recursive(item, group, children));\\n\\n setList(list);\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\n },\\n (error) => console.log(error),\\n );\\n };\\n\\n const addChildren = (childrenList, group) => {\\n return childrenList.map((child) => ({\\n value: child,\\n label: child.replace(group, ''),\\n ...(child.slice(-1) === '/' && {\\n children: [\\n {\\n value: '',\\n label: '',\\n },\\n ],\\n }),\\n }));\\n };\\n\\n const fetchOnCheck = (checked) => {\\n console.log({ checked });\\n };\\n\\n useEffect(() => {\\n fetchToken(host, {\\n id: process.env.USERUSER,\\n password: process.env.USERPASSWORD,\\n }).subscribe(\\n (res) => {\\n setToken(res.accessToken.token);\\n\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe(\\n (res) => {\\n const data = res.map((d) => ({\\n value: d,\\n label: d,\\n topLevel: true,\\n ...(d.slice(-1) === '/' && {\\n children: [\\n {\\n value: '',\\n label: '',\\n },\\n ],\\n }),\\n }));\\n\\n setList(data);\\n },\\n (err) => console.log(err),\\n );\\n },\\n (err) => {\\n console.log(err);\\n },\\n );\\n }, []);\\n\\n return (\\n list && (\\n fetchTreeViewChildren(expand)}\\n onChecked={(checked) => fetchOnCheck(checked)}\\n />\\n )\\n );\\n};\\n\", \"locationsMap\": { \"tree-view-story\": { \"startLoc\": { \"col\": 29, \"line\": 11 }, \"endLoc\": { \"col\": 1, \"line\": 115 }, \"startBody\": { \"col\": 29, \"line\": 11 }, \"endBody\": { \"col\": 1, \"line\": 115 } } } }, },\r\n title: 'Tree View Components',\r\n component: TreeView,\r\n};\r\nexport const TreeViewStory = () => {\r\n const host = process.env.ENDPOINT_URL;\r\n const [token, setToken] = useState('');\r\n const [list, setList] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const dataSources = [\r\n {\r\n host: 'https://domainservices.dhigroup.com',\r\n connection: 'mclite-timeseries',\r\n },\r\n ];\r\n const fetchTreeViewChildren = (group) => {\r\n setLoading(true);\r\n if (group.slice(-1) === '/') {\r\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\/$/, '')).subscribe((res) => {\r\n const children = addChildren(res, group);\r\n list.map((item) => recursive(item, group, children));\r\n setList(list);\r\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\r\n }, (error) => console.log(error));\r\n }\r\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\/$/, '')).subscribe((res) => {\r\n const children = addChildren(res, group);\r\n list.map((item) => recursive(item, group, children));\r\n setList(list);\r\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\r\n }, (error) => console.log(error));\r\n };\r\n const addChildren = (childrenList, group) => {\r\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\r\n children: [\r\n {\r\n value: '',\r\n label: '',\r\n },\r\n ],\r\n }))));\r\n };\r\n const fetchOnCheck = (checked) => {\r\n console.log({ checked });\r\n };\r\n useEffect(() => {\r\n fetchToken(host, {\r\n id: process.env.USERUSER,\r\n password: process.env.USERPASSWORD,\r\n }).subscribe((res) => {\r\n setToken(res.accessToken.token);\r\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\r\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\r\n children: [\r\n {\r\n value: '',\r\n label: '',\r\n },\r\n ],\r\n }))));\r\n setList(data);\r\n }, (err) => console.log(err));\r\n }, (err) => {\r\n console.log(err);\r\n });\r\n }, []);\r\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\r\n};\r\n\n\n\nTreeViewStory.parameters = { storySource: { source: \"() => {\\r\\n const host = process.env.ENDPOINT_URL;\\r\\n const [token, setToken] = useState('');\\r\\n const [list, setList] = useState([]);\\r\\n const [loading, setLoading] = useState(false);\\r\\n const dataSources = [\\r\\n {\\r\\n host: 'https://domainservices.dhigroup.com',\\r\\n connection: 'mclite-timeseries',\\r\\n },\\r\\n ];\\r\\n const fetchTreeViewChildren = (group) => {\\r\\n setLoading(true);\\r\\n if (group.slice(-1) === '/') {\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n }\\r\\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\\\/$/, '')).subscribe((res) => {\\r\\n const children = addChildren(res, group);\\r\\n list.map((item) => recursive(item, group, children));\\r\\n setList(list);\\r\\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\\r\\n }, (error) => console.log(error));\\r\\n };\\r\\n const addChildren = (childrenList, group) => {\\r\\n return childrenList.map((child) => (Object.assign({ value: child, label: child.replace(group, '') }, (child.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n };\\r\\n const fetchOnCheck = (checked) => {\\r\\n console.log({ checked });\\r\\n };\\r\\n useEffect(() => {\\r\\n fetchToken(host, {\\r\\n id: process.env.USERUSER,\\r\\n password: process.env.USERPASSWORD,\\r\\n }).subscribe((res) => {\\r\\n setToken(res.accessToken.token);\\r\\n fetchTimeseriesFullNames(dataSources, res.accessToken.token, '').subscribe((res) => {\\r\\n const data = res.map((d) => (Object.assign({ value: d, label: d, topLevel: true }, (d.slice(-1) === '/' && {\\r\\n children: [\\r\\n {\\r\\n value: '',\\r\\n label: '',\\r\\n },\\r\\n ],\\r\\n }))));\\r\\n setList(data);\\r\\n }, (err) => console.log(err));\\r\\n }, (err) => {\\r\\n console.log(err);\\r\\n });\\r\\n }, []);\\r\\n return (list && ( fetchTreeViewChildren(expand)} onChecked={(checked) => fetchOnCheck(checked)}/>));\\r\\n}\" }, ...TreeViewStory.parameters };","import { Status } from '../types';\nimport HourglassEmptyIcon from '@material-ui/icons/HourglassEmpty';\nimport LockOpenIcon from '@material-ui/icons/LockOpen';\nimport AccessTimeIcon from '@material-ui/icons/AccessTime';\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\n\nexport const MENU_ITEMS = [\n {\n id: 'execute',\n label: 'Execute',\n condition: {\n field: '!lastJob.status', // Prefix with exclamation if you wish to inverse the condition test\n value: ['Pending', 'InProgress'],\n },\n taskId: 'workflowJsonDocument',\n },\n {\n id: 'edit',\n label: 'Edit',\n condition: {\n field: '!lastJob.status',\n value: ['Pending', 'InProgress'],\n },\n },\n {\n id: 'clone',\n label: 'Clone',\n },\n {\n id: 'delete',\n label: 'Delete',\n },\n {\n id: 'terminate',\n label: 'Terminate',\n },\n {\n id: 'openPdf',\n label: 'Open PDF',\n condition: {\n field: 'lastJob.status',\n value: ['Completed'],\n },\n },\n];\n\nexport const STATUS = [\n {\n name: 'Pending',\n color: 'orange',\n message: 'Pending',\n Icon: HourglassEmptyIcon,\n },\n {\n name: 'Starting',\n color: 'orange',\n message: 'Starting',\n Icon: HourglassEmptyIcon,\n },\n {\n name: 'InProgress',\n color: 'orange',\n message: 'Running',\n Icon: AccessTimeIcon,\n },\n {\n name: 'Unknown',\n color: 'black',\n message: 'Unknown',\n Icon: LockOpenIcon,\n },\n {\n name: 'ReadyToInitiate',\n color: 'red',\n message: 'Ready',\n Icon: LockOpenIcon,\n },\n {\n name: 'Completed',\n color: 'green',\n message: 'Completed',\n Icon: LockOutlinedIcon,\n },\n {\n name: 'Error',\n color: 'black',\n message: 'Error',\n Icon: FiberManualRecordIcon,\n },\n {\n name: 'Unknown',\n color: 'purple',\n message: 'Unknown',\n Icon: FiberManualRecordIcon,\n },\n {\n name: 'Default',\n color: 'black',\n message: 'Cancel',\n Icon: FiberManualRecordIcon,\n },\n {\n name: 'Cancelling',\n color: 'orange',\n message: 'Cancelling',\n Icon: FiberManualRecordIcon,\n },\n {\n name: 'Cancelled',\n color: 'grey',\n message: 'Cancelled',\n Icon: RadioButtonUncheckedIcon,\n },\n {\n name: 'Cancel',\n color: 'grey',\n message: 'Unknown',\n Icon: RadioButtonUncheckedIcon,\n },\n] as Status[];\n\nexport const TRANSLATIONS = {\n executeConfirmation:\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\n terminateConfirmation:\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\n cloneConfirmation:\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\n deleteConfirmation:\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\n cancelLabel: 'Batal',\n confirmLabel: 'Lanjut',\n};\n","\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\n \\n // @ts-nocheck\\n // @ts-ignore\\n var __STORY__ = \\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Button, Typography } from '@material-ui/core';\\\\\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport addDays from 'date-fns/addDays';\\\\\\\\nimport React, { useState } from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { uniqueId } from '../utils/Utils';\\\\\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Scenarios Components',\\\\\\\\n component: ScenariosOLD,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ScenariosStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n data: `{\\\\\\\\\\\\\\\"testProperty\\\\\\\\\\\\\\\":false,\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario test\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -1).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={[\\\\\\\\n {\\\\\\\\n name: 'Pending',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Pending',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Starting',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Starting',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancel',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancel',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelling',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Cancelling',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelled',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancelled',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'InProgress',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Running',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Unknown',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'ReadyToInitiate',\\\\\\\\n color: 'red',\\\\\\\\n message: 'Ready',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Completed',\\\\\\\\n color: 'green',\\\\\\\\n message: 'Completed',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Error',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Error',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Default',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n ]}\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={{\\\\\\\\n executeConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\\\\\n terminateConfirmation:\\\\\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\\\\\n cloneConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\\\\\n deleteConfirmation:\\\\\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\\\\\n cancelLabel: 'Batal',\\\\\\\\n confirmLabel: 'Lanjut',\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const ScenariosJSONStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n fullName: `scenario-${uniqueId()}`,\\\\\\\\n data: `{\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario JSON\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n dateTime: new Date().toISOString(),\\\\\\\\n permissions: [\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\\\\\n operation: 'read',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors'],\\\\\\\\n operation: 'update',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators'],\\\\\\\\n operation: 'delete',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -3).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n const actionButton = {\\\\\\\\n name: 'Operational View',\\\\\\\\n color: '#00A4EC',\\\\\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios JSON\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={STATUS}\\\\\\\\n highlightNameOnStatus=\\\\\\\\\\\\\\\"Error\\\\\\\\\\\\\\\"\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={TRANSLATIONS}\\\\\\\\n debug\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"ScenariosStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 } }, \\\\\\\"ScenariosJSONStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 } } };\\\\r\\\\nimport { Button, Typography } from '@material-ui/core';\\\\r\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\r\\\\nimport addDays from 'date-fns/addDays';\\\\r\\\\nimport React, { useState } from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { uniqueId } from '../utils/Utils';\\\\r\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\r\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\r\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Button, Typography } from '@material-ui/core';\\\\\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport addDays from 'date-fns/addDays';\\\\\\\\nimport React, { useState } from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { uniqueId } from '../utils/Utils';\\\\\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Scenarios Components',\\\\\\\\n component: ScenariosOLD,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ScenariosStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n data: `{\\\\\\\\\\\\\\\"testProperty\\\\\\\\\\\\\\\":false,\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario test\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -1).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={[\\\\\\\\n {\\\\\\\\n name: 'Pending',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Pending',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Starting',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Starting',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancel',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancel',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelling',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Cancelling',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelled',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancelled',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'InProgress',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Running',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Unknown',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'ReadyToInitiate',\\\\\\\\n color: 'red',\\\\\\\\n message: 'Ready',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Completed',\\\\\\\\n color: 'green',\\\\\\\\n message: 'Completed',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Error',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Error',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Default',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n ]}\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={{\\\\\\\\n executeConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\\\\\n terminateConfirmation:\\\\\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\\\\\n cloneConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\\\\\n deleteConfirmation:\\\\\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\\\\\n cancelLabel: 'Batal',\\\\\\\\n confirmLabel: 'Lanjut',\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const ScenariosJSONStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n fullName: `scenario-${uniqueId()}`,\\\\\\\\n data: `{\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario JSON\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n dateTime: new Date().toISOString(),\\\\\\\\n permissions: [\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\\\\\n operation: 'read',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors'],\\\\\\\\n operation: 'update',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators'],\\\\\\\\n operation: 'delete',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -3).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n const actionButton = {\\\\\\\\n name: 'Operational View',\\\\\\\\n color: '#00A4EC',\\\\\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios JSON\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={STATUS}\\\\\\\\n highlightNameOnStatus=\\\\\\\\\\\\\\\"Error\\\\\\\\\\\\\\\"\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={TRANSLATIONS}\\\\\\\\n debug\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"scenarios-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 } }, \\\\\\\"scenarios-json-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 } } } }, },\\\\r\\\\n title: 'Scenarios Components',\\\\r\\\\n component: ScenariosOLD,\\\\r\\\\n};\\\\r\\\\nexport const ScenariosStory = () => {\\\\r\\\\n const [newScenario, setNewScenario] = useState();\\\\r\\\\n const onAddScenario = () => {\\\\r\\\\n setNewScenario({\\\\r\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\r\\\\n });\\\\r\\\\n };\\\\r\\\\n const queryDates = {\\\\r\\\\n from: addDays(new Date(), -1).toISOString(),\\\\r\\\\n to: addDays(new Date(), 1).toISOString(),\\\\r\\\\n };\\\\r\\\\n return (
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (<>\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\r\\\\n menuItem,\\\\r\\\\n scenario,\\\\r\\\\n })} onScenarioSelected={(scenario) => {\\\\r\\\\n console.log('Scenario selected', scenario);\\\\r\\\\n }} onScenarioReceived={(scenario) => {\\\\r\\\\n console.log('Full Scenario received', scenario);\\\\r\\\\n }} onScenariosReceived={(scenarios) => {\\\\r\\\\n console.log('Received new scenarios!', scenarios);\\\\r\\\\n }} showDate showHour showMenu showStatus status={[\\\\r\\\\n {\\\\r\\\\n name: 'Pending',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Pending',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Starting',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Starting',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancel',\\\\r\\\\n color: 'grey',\\\\r\\\\n message: 'Cancel',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancelling',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Cancelling',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancelled',\\\\r\\\\n color: 'grey',\\\\r\\\\n message: 'Cancelled',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'InProgress',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Running',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Unknown',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Unknown',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'ReadyToInitiate',\\\\r\\\\n color: 'red',\\\\r\\\\n message: 'Ready',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Completed',\\\\r\\\\n color: 'green',\\\\r\\\\n message: 'Completed',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Error',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Error',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Default',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Unknown',\\\\r\\\\n },\\\\r\\\\n ]} addScenario={newScenario} translations={{\\\\r\\\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\r\\\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\r\\\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\r\\\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\r\\\\n cancelLabel: 'Batal',\\\\r\\\\n confirmLabel: 'Lanjut',\\\\r\\\\n }}/>\\\\n )}\\\\n \\\\n
);\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const ScenariosJSONStory = () => {\\\\r\\\\n const [newScenario, setNewScenario] = useState();\\\\r\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\r\\\\n const onAddScenario = () => {\\\\r\\\\n setNewScenario({\\\\r\\\\n fullName: `scenario-${uniqueId()}`,\\\\r\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\r\\\\n dateTime: new Date().toISOString(),\\\\r\\\\n permissions: [\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\r\\\\n operation: 'read',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators', 'Editors'],\\\\r\\\\n operation: 'update',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators'],\\\\r\\\\n operation: 'delete',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n });\\\\r\\\\n };\\\\r\\\\n const queryDates = {\\\\r\\\\n from: addDays(new Date(), -3).toISOString(),\\\\r\\\\n to: addDays(new Date(), 1).toISOString(),\\\\r\\\\n };\\\\r\\\\n const actionButton = {\\\\r\\\\n name: 'Operational View',\\\\r\\\\n color: '#00A4EC',\\\\r\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\r\\\\n };\\\\r\\\\n return (
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (<>\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\r\\\\n menuItem,\\\\r\\\\n scenario,\\\\r\\\\n })} onScenarioSelected={(scenario) => {\\\\r\\\\n console.log('Scenario selected', scenario);\\\\r\\\\n }} onScenarioReceived={(scenario) => {\\\\r\\\\n console.log('Full Scenario received', scenario);\\\\r\\\\n }} onScenariosReceived={(scenarios) => {\\\\r\\\\n console.log('Received new scenarios!', scenarios);\\\\r\\\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\\\\\"Error\\\\\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\\\n )}\\\\n \\\\n
);\\\\r\\\\n};\\\\r\\\\n\\\";\\n // @ts-ignore\\n var __LOCATIONS_MAP__ = {\\\"ScenariosStory\\\":{\\\"startLoc\\\":{\\\"col\\\":30,\\\"line\\\":20},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":203},\\\"startBody\\\":{\\\"col\\\":30,\\\"line\\\":20},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":203}},\\\"ScenariosJSONStory\\\":{\\\"startLoc\\\":{\\\"col\\\":34,\\\"line\\\":205},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":310},\\\"startBody\\\":{\\\"col\\\":34,\\\"line\\\":205},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":310}}};\\n \\n\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ScenariosStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"ScenariosJSONStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } };\\r\\nimport { Button, Typography } from '@material-ui/core';\\r\\nimport AddIcon from '@material-ui/icons/Add';\\r\\nimport addDays from 'date-fns/addDays';\\r\\nimport React, { useState } from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { uniqueId } from '../utils/Utils';\\r\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\r\\nimport { Scenarios } from './Scenarios/Scenarios';\\r\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\r\\nexport default { parameters: {\\\"storySource\\\":{\\\"source\\\":\\\"\\\\r\\\\n// @ts-nocheck\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __STORY__ = \\\\\\\"import { Button, Typography } from '@material-ui/core';\\\\\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport addDays from 'date-fns/addDays';\\\\\\\\nimport React, { useState } from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { uniqueId } from '../utils/Utils';\\\\\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Scenarios Components',\\\\\\\\n component: ScenariosOLD,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ScenariosStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n data: `{\\\\\\\\\\\\\\\"testProperty\\\\\\\\\\\\\\\":false,\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario test\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -1).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={[\\\\\\\\n {\\\\\\\\n name: 'Pending',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Pending',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Starting',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Starting',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancel',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancel',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelling',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Cancelling',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelled',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancelled',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'InProgress',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Running',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Unknown',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'ReadyToInitiate',\\\\\\\\n color: 'red',\\\\\\\\n message: 'Ready',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Completed',\\\\\\\\n color: 'green',\\\\\\\\n message: 'Completed',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Error',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Error',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Default',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n ]}\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={{\\\\\\\\n executeConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\\\\\n terminateConfirmation:\\\\\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\\\\\n cloneConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\\\\\n deleteConfirmation:\\\\\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\\\\\n cancelLabel: 'Batal',\\\\\\\\n confirmLabel: 'Lanjut',\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const ScenariosJSONStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n fullName: `scenario-${uniqueId()}`,\\\\\\\\n data: `{\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario JSON\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n dateTime: new Date().toISOString(),\\\\\\\\n permissions: [\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\\\\\n operation: 'read',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors'],\\\\\\\\n operation: 'update',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators'],\\\\\\\\n operation: 'delete',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -3).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n const actionButton = {\\\\\\\\n name: 'Operational View',\\\\\\\\n color: '#00A4EC',\\\\\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios JSON\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={STATUS}\\\\\\\\n highlightNameOnStatus=\\\\\\\\\\\\\\\"Error\\\\\\\\\\\\\\\"\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={TRANSLATIONS}\\\\\\\\n debug\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\";\\\\r\\\\n// @ts-ignore\\\\r\\\\nvar __LOCATIONS_MAP__ = { \\\\\\\"ScenariosStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 } }, \\\\\\\"ScenariosJSONStory\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 } } };\\\\r\\\\nimport { Button, Typography } from '@material-ui/core';\\\\r\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\r\\\\nimport addDays from 'date-fns/addDays';\\\\r\\\\nimport React, { useState } from 'react';\\\\r\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\r\\\\nimport { uniqueId } from '../utils/Utils';\\\\r\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\r\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\r\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\r\\\\nexport default { parameters: { \\\\\\\"storySource\\\\\\\": { \\\\\\\"source\\\\\\\": \\\\\\\"import { Button, Typography } from '@material-ui/core';\\\\\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\\\\\nimport addDays from 'date-fns/addDays';\\\\\\\\nimport React, { useState } from 'react';\\\\\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\\\\\nimport { uniqueId } from '../utils/Utils';\\\\\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\\\\\n\\\\\\\\nexport default {\\\\\\\\n title: 'Scenarios Components',\\\\\\\\n component: ScenariosOLD,\\\\\\\\n} as Meta;\\\\\\\\n\\\\\\\\nexport const ScenariosStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n data: `{\\\\\\\\\\\\\\\"testProperty\\\\\\\\\\\\\\\":false,\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario test\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -1).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={[\\\\\\\\n {\\\\\\\\n name: 'Pending',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Pending',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Starting',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Starting',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancel',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancel',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelling',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Cancelling',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Cancelled',\\\\\\\\n color: 'grey',\\\\\\\\n message: 'Cancelled',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'InProgress',\\\\\\\\n color: 'orange',\\\\\\\\n message: 'Running',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Unknown',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'ReadyToInitiate',\\\\\\\\n color: 'red',\\\\\\\\n message: 'Ready',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Completed',\\\\\\\\n color: 'green',\\\\\\\\n message: 'Completed',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Error',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Error',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n name: 'Default',\\\\\\\\n color: 'black',\\\\\\\\n message: 'Unknown',\\\\\\\\n },\\\\\\\\n ]}\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={{\\\\\\\\n executeConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\\\\\n terminateConfirmation:\\\\\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\\\\\n cloneConfirmation:\\\\\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\\\\\n deleteConfirmation:\\\\\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\\\\\n cancelLabel: 'Batal',\\\\\\\\n confirmLabel: 'Lanjut',\\\\\\\\n }}\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\\nexport const ScenariosJSONStory = () => {\\\\\\\\n const [newScenario, setNewScenario] = useState();\\\\\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\\\\\n\\\\\\\\n const onAddScenario = () => {\\\\\\\\n setNewScenario({\\\\\\\\n fullName: `scenario-${uniqueId()}`,\\\\\\\\n data: `{\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"My Scenario JSON\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"startTime\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"${new Date().toISOString()}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"vessel\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"vesselName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"MSC Pamela\\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\\"mooring\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"berthName\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"VIG Berth 2\\\\\\\\\\\\\\\"}}`,\\\\\\\\n dateTime: new Date().toISOString(),\\\\\\\\n permissions: [\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\\\\\n operation: 'read',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators', 'Editors'],\\\\\\\\n operation: 'update',\\\\\\\\n },\\\\\\\\n {\\\\\\\\n principals: ['Administrators'],\\\\\\\\n operation: 'delete',\\\\\\\\n },\\\\\\\\n ],\\\\\\\\n });\\\\\\\\n };\\\\\\\\n\\\\\\\\n const queryDates = {\\\\\\\\n from: addDays(new Date(), -3).toISOString(),\\\\\\\\n to: addDays(new Date(), 1).toISOString(),\\\\\\\\n };\\\\\\\\n\\\\\\\\n const actionButton = {\\\\\\\\n name: 'Operational View',\\\\\\\\n color: '#00A4EC',\\\\\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\\\\\n };\\\\\\\\n\\\\\\\\n return (\\\\\\\\n
\\\\\\\\n \\\\\\\\n \\\\\\\\n Scenarios JSON\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n {({ token }) => (\\\\\\\\n <>\\\\\\\\n \\\\\\\\n }\\\\\\\\n onClick={onAddScenario}\\\\\\\\n >\\\\\\\\n Add new scenario\\\\\\\\n \\\\\\\\n \\\\\\\\n \\\\\\\\n console.log('Scenario menu item clicked', {\\\\\\\\n menuItem,\\\\\\\\n scenario,\\\\\\\\n })\\\\\\\\n }\\\\\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\\\\\n console.log('Scenario selected', scenario);\\\\\\\\n }}\\\\\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\\\\\n console.log('Full Scenario received', scenario);\\\\\\\\n }}\\\\\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\\\\\n console.log('Received new scenarios!', scenarios);\\\\\\\\n }}\\\\\\\\n showDate\\\\\\\\n showHour\\\\\\\\n showMenu\\\\\\\\n showStatus\\\\\\\\n status={STATUS}\\\\\\\\n highlightNameOnStatus=\\\\\\\\\\\\\\\"Error\\\\\\\\\\\\\\\"\\\\\\\\n addScenario={newScenario}\\\\\\\\n translations={TRANSLATIONS}\\\\\\\\n debug\\\\\\\\n />\\\\\\\\n \\\\\\\\n )}\\\\\\\\n \\\\\\\\n
\\\\\\\\n );\\\\\\\\n};\\\\\\\\n\\\\\\\", \\\\\\\"locationsMap\\\\\\\": { \\\\\\\"scenarios-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 30, \\\\\\\"line\\\\\\\": 18 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 247 } }, \\\\\\\"scenarios-json-story\\\\\\\": { \\\\\\\"startLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endLoc\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 }, \\\\\\\"startBody\\\\\\\": { \\\\\\\"col\\\\\\\": 34, \\\\\\\"line\\\\\\\": 249 }, \\\\\\\"endBody\\\\\\\": { \\\\\\\"col\\\\\\\": 1, \\\\\\\"line\\\\\\\": 399 } } } }, },\\\\r\\\\n title: 'Scenarios Components',\\\\r\\\\n component: ScenariosOLD,\\\\r\\\\n};\\\\r\\\\nexport const ScenariosStory = () => {\\\\r\\\\n const [newScenario, setNewScenario] = useState();\\\\r\\\\n const onAddScenario = () => {\\\\r\\\\n setNewScenario({\\\\r\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\r\\\\n });\\\\r\\\\n };\\\\r\\\\n const queryDates = {\\\\r\\\\n from: addDays(new Date(), -1).toISOString(),\\\\r\\\\n to: addDays(new Date(), 1).toISOString(),\\\\r\\\\n };\\\\r\\\\n return (
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (<>\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\r\\\\n menuItem,\\\\r\\\\n scenario,\\\\r\\\\n })} onScenarioSelected={(scenario) => {\\\\r\\\\n console.log('Scenario selected', scenario);\\\\r\\\\n }} onScenarioReceived={(scenario) => {\\\\r\\\\n console.log('Full Scenario received', scenario);\\\\r\\\\n }} onScenariosReceived={(scenarios) => {\\\\r\\\\n console.log('Received new scenarios!', scenarios);\\\\r\\\\n }} showDate showHour showMenu showStatus status={[\\\\r\\\\n {\\\\r\\\\n name: 'Pending',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Pending',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Starting',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Starting',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancel',\\\\r\\\\n color: 'grey',\\\\r\\\\n message: 'Cancel',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancelling',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Cancelling',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Cancelled',\\\\r\\\\n color: 'grey',\\\\r\\\\n message: 'Cancelled',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'InProgress',\\\\r\\\\n color: 'orange',\\\\r\\\\n message: 'Running',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Unknown',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Unknown',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'ReadyToInitiate',\\\\r\\\\n color: 'red',\\\\r\\\\n message: 'Ready',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Completed',\\\\r\\\\n color: 'green',\\\\r\\\\n message: 'Completed',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Error',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Error',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n name: 'Default',\\\\r\\\\n color: 'black',\\\\r\\\\n message: 'Unknown',\\\\r\\\\n },\\\\r\\\\n ]} addScenario={newScenario} translations={{\\\\r\\\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\r\\\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\r\\\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\r\\\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\r\\\\n cancelLabel: 'Batal',\\\\r\\\\n confirmLabel: 'Lanjut',\\\\r\\\\n }}/>\\\\n )}\\\\n \\\\n
);\\\\r\\\\n};\\\\r\\\\n;\\\\r\\\\nexport const ScenariosJSONStory = () => {\\\\r\\\\n const [newScenario, setNewScenario] = useState();\\\\r\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\r\\\\n const onAddScenario = () => {\\\\r\\\\n setNewScenario({\\\\r\\\\n fullName: `scenario-${uniqueId()}`,\\\\r\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\r\\\\n dateTime: new Date().toISOString(),\\\\r\\\\n permissions: [\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\r\\\\n operation: 'read',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators', 'Editors'],\\\\r\\\\n operation: 'update',\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n principals: ['Administrators'],\\\\r\\\\n operation: 'delete',\\\\r\\\\n },\\\\r\\\\n ],\\\\r\\\\n });\\\\r\\\\n };\\\\r\\\\n const queryDates = {\\\\r\\\\n from: addDays(new Date(), -3).toISOString(),\\\\r\\\\n to: addDays(new Date(), 1).toISOString(),\\\\r\\\\n };\\\\r\\\\n const actionButton = {\\\\r\\\\n name: 'Operational View',\\\\r\\\\n color: '#00A4EC',\\\\r\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\r\\\\n };\\\\r\\\\n return (
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (<>\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\r\\\\n menuItem,\\\\r\\\\n scenario,\\\\r\\\\n })} onScenarioSelected={(scenario) => {\\\\r\\\\n console.log('Scenario selected', scenario);\\\\r\\\\n }} onScenarioReceived={(scenario) => {\\\\r\\\\n console.log('Full Scenario received', scenario);\\\\r\\\\n }} onScenariosReceived={(scenarios) => {\\\\r\\\\n console.log('Received new scenarios!', scenarios);\\\\r\\\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\\\\\"Error\\\\\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\\\n )}\\\\n \\\\n
);\\\\r\\\\n};\\\\r\\\\n\\\",\\\"locationsMap\\\":{\\\"scenarios-story\\\":{\\\"startLoc\\\":{\\\"col\\\":30,\\\"line\\\":20},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":203},\\\"startBody\\\":{\\\"col\\\":30,\\\"line\\\":20},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":203}},\\\"scenarios-json-story\\\":{\\\"startLoc\\\":{\\\"col\\\":34,\\\"line\\\":205},\\\"endLoc\\\":{\\\"col\\\":1,\\\"line\\\":310},\\\"startBody\\\":{\\\"col\\\":34,\\\"line\\\":205},\\\"endBody\\\":{\\\"col\\\":1,\\\"line\\\":310}}}}, \\\"storySource\\\": { \\\"source\\\": \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"scenarios-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"scenarios-json-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } } }, },\\r\\n title: 'Scenarios Components',\\r\\n component: ScenariosOLD,\\r\\n};\\r\\nexport const ScenariosStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -1).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={[\\r\\n {\\r\\n name: 'Pending',\\r\\n color: 'orange',\\r\\n message: 'Pending',\\r\\n },\\r\\n {\\r\\n name: 'Starting',\\r\\n color: 'orange',\\r\\n message: 'Starting',\\r\\n },\\r\\n {\\r\\n name: 'Cancel',\\r\\n color: 'grey',\\r\\n message: 'Cancel',\\r\\n },\\r\\n {\\r\\n name: 'Cancelling',\\r\\n color: 'orange',\\r\\n message: 'Cancelling',\\r\\n },\\r\\n {\\r\\n name: 'Cancelled',\\r\\n color: 'grey',\\r\\n message: 'Cancelled',\\r\\n },\\r\\n {\\r\\n name: 'InProgress',\\r\\n color: 'orange',\\r\\n message: 'Running',\\r\\n },\\r\\n {\\r\\n name: 'Unknown',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n {\\r\\n name: 'ReadyToInitiate',\\r\\n color: 'red',\\r\\n message: 'Ready',\\r\\n },\\r\\n {\\r\\n name: 'Completed',\\r\\n color: 'green',\\r\\n message: 'Completed',\\r\\n },\\r\\n {\\r\\n name: 'Error',\\r\\n color: 'black',\\r\\n message: 'Error',\\r\\n },\\r\\n {\\r\\n name: 'Default',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n ]} addScenario={newScenario} translations={{\\r\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\r\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\r\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\r\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\r\\n cancelLabel: 'Batal',\\r\\n confirmLabel: 'Lanjut',\\r\\n }}/>\\n )}\\n \\n
);\\r\\n};;\\r\\n;\\r\\nexport const ScenariosJSONStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const NOTIFICATION_HUB = '/notificationhub';\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n fullName: `scenario-${uniqueId()}`,\\r\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n dateTime: new Date().toISOString(),\\r\\n permissions: [\\r\\n {\\r\\n principals: ['Administrators', 'Editors', 'Users'],\\r\\n operation: 'read',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators', 'Editors'],\\r\\n operation: 'update',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators'],\\r\\n operation: 'delete',\\r\\n },\\r\\n ],\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -3).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n const actionButton = {\\r\\n name: 'Operational View',\\r\\n color: '#00A4EC',\\r\\n handleActionButton: () => console.log('Action Button Clicked'),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\"Error\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\n )}\\n \\n
);\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"ScenariosStory\":{\"startLoc\":{\"col\":30,\"line\":28},\"endLoc\":{\"col\":1,\"line\":211},\"startBody\":{\"col\":30,\"line\":28},\"endBody\":{\"col\":1,\"line\":211}},\"ScenariosJSONStory\":{\"startLoc\":{\"col\":34,\"line\":213},\"endLoc\":{\"col\":1,\"line\":318},\"startBody\":{\"col\":34,\"line\":213},\"endBody\":{\"col\":1,\"line\":318}}};\n \n\n /* eslint-disable */\n // @ts-nocheck\n // @ts-ignore\n var __STORY__ = \"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ScenariosStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"ScenariosJSONStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } };\\r\\nimport { Button, Typography } from '@material-ui/core';\\r\\nimport AddIcon from '@material-ui/icons/Add';\\r\\nimport addDays from 'date-fns/addDays';\\r\\nimport React, { useState } from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { uniqueId } from '../utils/Utils';\\r\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\r\\nimport { Scenarios } from './Scenarios/Scenarios';\\r\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"scenarios-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"scenarios-json-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } } }, },\\r\\n title: 'Scenarios Components',\\r\\n component: ScenariosOLD,\\r\\n};\\r\\nexport const ScenariosStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -1).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={[\\r\\n {\\r\\n name: 'Pending',\\r\\n color: 'orange',\\r\\n message: 'Pending',\\r\\n },\\r\\n {\\r\\n name: 'Starting',\\r\\n color: 'orange',\\r\\n message: 'Starting',\\r\\n },\\r\\n {\\r\\n name: 'Cancel',\\r\\n color: 'grey',\\r\\n message: 'Cancel',\\r\\n },\\r\\n {\\r\\n name: 'Cancelling',\\r\\n color: 'orange',\\r\\n message: 'Cancelling',\\r\\n },\\r\\n {\\r\\n name: 'Cancelled',\\r\\n color: 'grey',\\r\\n message: 'Cancelled',\\r\\n },\\r\\n {\\r\\n name: 'InProgress',\\r\\n color: 'orange',\\r\\n message: 'Running',\\r\\n },\\r\\n {\\r\\n name: 'Unknown',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n {\\r\\n name: 'ReadyToInitiate',\\r\\n color: 'red',\\r\\n message: 'Ready',\\r\\n },\\r\\n {\\r\\n name: 'Completed',\\r\\n color: 'green',\\r\\n message: 'Completed',\\r\\n },\\r\\n {\\r\\n name: 'Error',\\r\\n color: 'black',\\r\\n message: 'Error',\\r\\n },\\r\\n {\\r\\n name: 'Default',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n ]} addScenario={newScenario} translations={{\\r\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\r\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\r\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\r\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\r\\n cancelLabel: 'Batal',\\r\\n confirmLabel: 'Lanjut',\\r\\n }}/>\\n )}\\n \\n
);\\r\\n};\\r\\n;\\r\\nexport const ScenariosJSONStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const NOTIFICATION_HUB = '/notificationhub';\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n fullName: `scenario-${uniqueId()}`,\\r\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n dateTime: new Date().toISOString(),\\r\\n permissions: [\\r\\n {\\r\\n principals: ['Administrators', 'Editors', 'Users'],\\r\\n operation: 'read',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators', 'Editors'],\\r\\n operation: 'update',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators'],\\r\\n operation: 'delete',\\r\\n },\\r\\n ],\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -3).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n const actionButton = {\\r\\n name: 'Operational View',\\r\\n color: '#00A4EC',\\r\\n handleActionButton: () => console.log('Action Button Clicked'),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\"Error\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\n )}\\n \\n
);\\r\\n};\\r\\n\";\n // @ts-ignore\n var __LOCATIONS_MAP__ = {\"ScenariosStory\":{\"startLoc\":{\"col\":30,\"line\":20},\"endLoc\":{\"col\":1,\"line\":203},\"startBody\":{\"col\":30,\"line\":20},\"endBody\":{\"col\":1,\"line\":203}},\"ScenariosJSONStory\":{\"startLoc\":{\"col\":34,\"line\":205},\"endLoc\":{\"col\":1,\"line\":310},\"startBody\":{\"col\":34,\"line\":205},\"endBody\":{\"col\":1,\"line\":310}}};\n \n/* eslint-disable */\r\n// @ts-nocheck\r\n// @ts-ignore\r\nvar __STORY__ = \"import { Button, Typography } from '@material-ui/core';\\nimport AddIcon from '@material-ui/icons/Add';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport addDays from 'date-fns/addDays';\\nimport React, { useState } from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { uniqueId } from '../utils/Utils';\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\nimport { Scenarios } from './Scenarios/Scenarios';\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\n\\nexport default {\\n title: 'Scenarios Components',\\n component: ScenariosOLD,\\n} as Meta;\\n\\nexport const ScenariosStory = () => {\\n const [newScenario, setNewScenario] = useState();\\n\\n const onAddScenario = () => {\\n setNewScenario({\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\n });\\n };\\n\\n const queryDates = {\\n from: addDays(new Date(), -1).toISOString(),\\n to: addDays(new Date(), 1).toISOString(),\\n };\\n\\n return (\\n
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (\\n <>\\n \\n }\\n onClick={onAddScenario}\\n >\\n Add new scenario\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\n menuItem,\\n scenario,\\n })\\n }\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\n console.log('Scenario selected', scenario);\\n }}\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\n console.log('Full Scenario received', scenario);\\n }}\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\n console.log('Received new scenarios!', scenarios);\\n }}\\n showDate\\n showHour\\n showMenu\\n showStatus\\n status={[\\n {\\n name: 'Pending',\\n color: 'orange',\\n message: 'Pending',\\n },\\n {\\n name: 'Starting',\\n color: 'orange',\\n message: 'Starting',\\n },\\n {\\n name: 'Cancel',\\n color: 'grey',\\n message: 'Cancel',\\n },\\n {\\n name: 'Cancelling',\\n color: 'orange',\\n message: 'Cancelling',\\n },\\n {\\n name: 'Cancelled',\\n color: 'grey',\\n message: 'Cancelled',\\n },\\n {\\n name: 'InProgress',\\n color: 'orange',\\n message: 'Running',\\n },\\n {\\n name: 'Unknown',\\n color: 'black',\\n message: 'Unknown',\\n },\\n {\\n name: 'ReadyToInitiate',\\n color: 'red',\\n message: 'Ready',\\n },\\n {\\n name: 'Completed',\\n color: 'green',\\n message: 'Completed',\\n },\\n {\\n name: 'Error',\\n color: 'black',\\n message: 'Error',\\n },\\n {\\n name: 'Default',\\n color: 'black',\\n message: 'Unknown',\\n },\\n ]}\\n addScenario={newScenario}\\n translations={{\\n executeConfirmation:\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\n terminateConfirmation:\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\n cloneConfirmation:\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\n deleteConfirmation:\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\n cancelLabel: 'Batal',\\n confirmLabel: 'Lanjut',\\n }}\\n />\\n \\n )}\\n \\n
\\n );\\n};\\n\\nexport const ScenariosJSONStory = () => {\\n const [newScenario, setNewScenario] = useState();\\n const NOTIFICATION_HUB = '/notificationhub';\\n\\n const onAddScenario = () => {\\n setNewScenario({\\n fullName: `scenario-${uniqueId()}`,\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\n dateTime: new Date().toISOString(),\\n permissions: [\\n {\\n principals: ['Administrators', 'Editors', 'Users'],\\n operation: 'read',\\n },\\n {\\n principals: ['Administrators', 'Editors'],\\n operation: 'update',\\n },\\n {\\n principals: ['Administrators'],\\n operation: 'delete',\\n },\\n ],\\n });\\n };\\n\\n const queryDates = {\\n from: addDays(new Date(), -3).toISOString(),\\n to: addDays(new Date(), 1).toISOString(),\\n };\\n\\n const actionButton = {\\n name: 'Operational View',\\n color: '#00A4EC',\\n handleActionButton: () => console.log('Action Button Clicked'),\\n };\\n\\n return (\\n
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (\\n <>\\n \\n }\\n onClick={onAddScenario}\\n >\\n Add new scenario\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\n menuItem,\\n scenario,\\n })\\n }\\n onScenarioSelected={(scenario: Scenario) => {\\n console.log('Scenario selected', scenario);\\n }}\\n onScenarioReceived={(scenario: Scenario) => {\\n console.log('Full Scenario received', scenario);\\n }}\\n onScenariosReceived={(scenarios: Scenario[]) => {\\n console.log('Received new scenarios!', scenarios);\\n }}\\n showDate\\n showHour\\n showMenu\\n showStatus\\n status={STATUS}\\n highlightNameOnStatus=\\\"Error\\\"\\n addScenario={newScenario}\\n translations={TRANSLATIONS}\\n debug\\n />\\n \\n )}\\n \\n
\\n );\\n};\\n\";\r\n// @ts-ignore\r\nvar __LOCATIONS_MAP__ = { \"ScenariosStory\": { \"startLoc\": { \"col\": 30, \"line\": 18 }, \"endLoc\": { \"col\": 1, \"line\": 247 }, \"startBody\": { \"col\": 30, \"line\": 18 }, \"endBody\": { \"col\": 1, \"line\": 247 } }, \"ScenariosJSONStory\": { \"startLoc\": { \"col\": 34, \"line\": 249 }, \"endLoc\": { \"col\": 1, \"line\": 399 }, \"startBody\": { \"col\": 34, \"line\": 249 }, \"endBody\": { \"col\": 1, \"line\": 399 } } };\r\nimport { Button, Typography } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport addDays from 'date-fns/addDays';\r\nimport React, { useState } from 'react';\r\nimport { LoginGate } from '../Auth/LoginGate';\r\nimport { uniqueId } from '../utils/Utils';\r\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\r\nimport { Scenarios } from './Scenarios/Scenarios';\r\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\r\nexport default { parameters: {\"storySource\":{\"source\":\"\\r\\n// @ts-nocheck\\r\\n// @ts-ignore\\r\\nvar __STORY__ = \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\";\\r\\n// @ts-ignore\\r\\nvar __LOCATIONS_MAP__ = { \\\"ScenariosStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"ScenariosJSONStory\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } };\\r\\nimport { Button, Typography } from '@material-ui/core';\\r\\nimport AddIcon from '@material-ui/icons/Add';\\r\\nimport addDays from 'date-fns/addDays';\\r\\nimport React, { useState } from 'react';\\r\\nimport { LoginGate } from '../Auth/LoginGate';\\r\\nimport { uniqueId } from '../utils/Utils';\\r\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\r\\nimport { Scenarios } from './Scenarios/Scenarios';\\r\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\r\\nexport default { parameters: { \\\"storySource\\\": { \\\"source\\\": \\\"import { Button, Typography } from '@material-ui/core';\\\\nimport AddIcon from '@material-ui/icons/Add';\\\\nimport { Meta } from '@storybook/react/types-6-0.d';\\\\nimport addDays from 'date-fns/addDays';\\\\nimport React, { useState } from 'react';\\\\nimport { LoginGate } from '../Auth/LoginGate';\\\\nimport { uniqueId } from '../utils/Utils';\\\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\\\nimport { Scenarios } from './Scenarios/Scenarios';\\\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\\\n\\\\nexport default {\\\\n title: 'Scenarios Components',\\\\n component: ScenariosOLD,\\\\n} as Meta;\\\\n\\\\nexport const ScenariosStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n data: `{\\\\\\\"testProperty\\\\\\\":false,\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario test\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -1).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={[\\\\n {\\\\n name: 'Pending',\\\\n color: 'orange',\\\\n message: 'Pending',\\\\n },\\\\n {\\\\n name: 'Starting',\\\\n color: 'orange',\\\\n message: 'Starting',\\\\n },\\\\n {\\\\n name: 'Cancel',\\\\n color: 'grey',\\\\n message: 'Cancel',\\\\n },\\\\n {\\\\n name: 'Cancelling',\\\\n color: 'orange',\\\\n message: 'Cancelling',\\\\n },\\\\n {\\\\n name: 'Cancelled',\\\\n color: 'grey',\\\\n message: 'Cancelled',\\\\n },\\\\n {\\\\n name: 'InProgress',\\\\n color: 'orange',\\\\n message: 'Running',\\\\n },\\\\n {\\\\n name: 'Unknown',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n {\\\\n name: 'ReadyToInitiate',\\\\n color: 'red',\\\\n message: 'Ready',\\\\n },\\\\n {\\\\n name: 'Completed',\\\\n color: 'green',\\\\n message: 'Completed',\\\\n },\\\\n {\\\\n name: 'Error',\\\\n color: 'black',\\\\n message: 'Error',\\\\n },\\\\n {\\\\n name: 'Default',\\\\n color: 'black',\\\\n message: 'Unknown',\\\\n },\\\\n ]}\\\\n addScenario={newScenario}\\\\n translations={{\\\\n executeConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\\\n terminateConfirmation:\\\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\\\n cloneConfirmation:\\\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\\\n deleteConfirmation:\\\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\\\n cancelLabel: 'Batal',\\\\n confirmLabel: 'Lanjut',\\\\n }}\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\\nexport const ScenariosJSONStory = () => {\\\\n const [newScenario, setNewScenario] = useState();\\\\n const NOTIFICATION_HUB = '/notificationhub';\\\\n\\\\n const onAddScenario = () => {\\\\n setNewScenario({\\\\n fullName: `scenario-${uniqueId()}`,\\\\n data: `{\\\\\\\"name\\\\\\\":\\\\\\\"My Scenario JSON\\\\\\\",\\\\\\\"startTime\\\\\\\":\\\\\\\"${new Date().toISOString()}\\\\\\\",\\\\\\\"vessel\\\\\\\":{\\\\\\\"vesselName\\\\\\\":\\\\\\\"MSC Pamela\\\\\\\"},\\\\\\\"mooring\\\\\\\":{\\\\\\\"berthName\\\\\\\":\\\\\\\"VIG Berth 2\\\\\\\"}}`,\\\\n dateTime: new Date().toISOString(),\\\\n permissions: [\\\\n {\\\\n principals: ['Administrators', 'Editors', 'Users'],\\\\n operation: 'read',\\\\n },\\\\n {\\\\n principals: ['Administrators', 'Editors'],\\\\n operation: 'update',\\\\n },\\\\n {\\\\n principals: ['Administrators'],\\\\n operation: 'delete',\\\\n },\\\\n ],\\\\n });\\\\n };\\\\n\\\\n const queryDates = {\\\\n from: addDays(new Date(), -3).toISOString(),\\\\n to: addDays(new Date(), 1).toISOString(),\\\\n };\\\\n\\\\n const actionButton = {\\\\n name: 'Operational View',\\\\n color: '#00A4EC',\\\\n handleActionButton: () => console.log('Action Button Clicked'),\\\\n };\\\\n\\\\n return (\\\\n
\\\\n \\\\n \\\\n Scenarios JSON\\\\n \\\\n \\\\n \\\\n {({ token }) => (\\\\n <>\\\\n \\\\n }\\\\n onClick={onAddScenario}\\\\n >\\\\n Add new scenario\\\\n \\\\n \\\\n \\\\n console.log('Scenario menu item clicked', {\\\\n menuItem,\\\\n scenario,\\\\n })\\\\n }\\\\n onScenarioSelected={(scenario: Scenario) => {\\\\n console.log('Scenario selected', scenario);\\\\n }}\\\\n onScenarioReceived={(scenario: Scenario) => {\\\\n console.log('Full Scenario received', scenario);\\\\n }}\\\\n onScenariosReceived={(scenarios: Scenario[]) => {\\\\n console.log('Received new scenarios!', scenarios);\\\\n }}\\\\n showDate\\\\n showHour\\\\n showMenu\\\\n showStatus\\\\n status={STATUS}\\\\n highlightNameOnStatus=\\\\\\\"Error\\\\\\\"\\\\n addScenario={newScenario}\\\\n translations={TRANSLATIONS}\\\\n debug\\\\n />\\\\n \\\\n )}\\\\n \\\\n
\\\\n );\\\\n};\\\\n\\\", \\\"locationsMap\\\": { \\\"scenarios-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 247 }, \\\"startBody\\\": { \\\"col\\\": 30, \\\"line\\\": 18 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 247 } }, \\\"scenarios-json-story\\\": { \\\"startLoc\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endLoc\\\": { \\\"col\\\": 1, \\\"line\\\": 399 }, \\\"startBody\\\": { \\\"col\\\": 34, \\\"line\\\": 249 }, \\\"endBody\\\": { \\\"col\\\": 1, \\\"line\\\": 399 } } } }, },\\r\\n title: 'Scenarios Components',\\r\\n component: ScenariosOLD,\\r\\n};\\r\\nexport const ScenariosStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -1).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={[\\r\\n {\\r\\n name: 'Pending',\\r\\n color: 'orange',\\r\\n message: 'Pending',\\r\\n },\\r\\n {\\r\\n name: 'Starting',\\r\\n color: 'orange',\\r\\n message: 'Starting',\\r\\n },\\r\\n {\\r\\n name: 'Cancel',\\r\\n color: 'grey',\\r\\n message: 'Cancel',\\r\\n },\\r\\n {\\r\\n name: 'Cancelling',\\r\\n color: 'orange',\\r\\n message: 'Cancelling',\\r\\n },\\r\\n {\\r\\n name: 'Cancelled',\\r\\n color: 'grey',\\r\\n message: 'Cancelled',\\r\\n },\\r\\n {\\r\\n name: 'InProgress',\\r\\n color: 'orange',\\r\\n message: 'Running',\\r\\n },\\r\\n {\\r\\n name: 'Unknown',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n {\\r\\n name: 'ReadyToInitiate',\\r\\n color: 'red',\\r\\n message: 'Ready',\\r\\n },\\r\\n {\\r\\n name: 'Completed',\\r\\n color: 'green',\\r\\n message: 'Completed',\\r\\n },\\r\\n {\\r\\n name: 'Error',\\r\\n color: 'black',\\r\\n message: 'Error',\\r\\n },\\r\\n {\\r\\n name: 'Default',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n ]} addScenario={newScenario} translations={{\\r\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\r\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\r\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\r\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\r\\n cancelLabel: 'Batal',\\r\\n confirmLabel: 'Lanjut',\\r\\n }}/>\\n )}\\n \\n
);\\r\\n};\\r\\n;\\r\\nexport const ScenariosJSONStory = () => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const NOTIFICATION_HUB = '/notificationhub';\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n fullName: `scenario-${uniqueId()}`,\\r\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n dateTime: new Date().toISOString(),\\r\\n permissions: [\\r\\n {\\r\\n principals: ['Administrators', 'Editors', 'Users'],\\r\\n operation: 'read',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators', 'Editors'],\\r\\n operation: 'update',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators'],\\r\\n operation: 'delete',\\r\\n },\\r\\n ],\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -3).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n const actionButton = {\\r\\n name: 'Operational View',\\r\\n color: '#00A4EC',\\r\\n handleActionButton: () => console.log('Action Button Clicked'),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\"Error\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\n )}\\n \\n
);\\r\\n};\\r\\n\",\"locationsMap\":{\"scenarios-story\":{\"startLoc\":{\"col\":30,\"line\":20},\"endLoc\":{\"col\":1,\"line\":203},\"startBody\":{\"col\":30,\"line\":20},\"endBody\":{\"col\":1,\"line\":203}},\"scenarios-json-story\":{\"startLoc\":{\"col\":34,\"line\":205},\"endLoc\":{\"col\":1,\"line\":310},\"startBody\":{\"col\":34,\"line\":205},\"endBody\":{\"col\":1,\"line\":310}}}}, \"storySource\": { \"source\": \"import { Button, Typography } from '@material-ui/core';\\nimport AddIcon from '@material-ui/icons/Add';\\nimport { Meta } from '@storybook/react/types-6-0.d';\\nimport addDays from 'date-fns/addDays';\\nimport React, { useState } from 'react';\\nimport { LoginGate } from '../Auth/LoginGate';\\nimport { uniqueId } from '../utils/Utils';\\nimport { MENU_ITEMS, STATUS, TRANSLATIONS } from './ScenarioList/scenarioListConstants';\\nimport { Scenarios } from './Scenarios/Scenarios';\\nimport { ScenariosOLD } from './ScenariosOLD/Scenarios';\\nimport { MenuItem, Scenario, ScenarioOLD } from './types';\\n\\nexport default {\\n title: 'Scenarios Components',\\n component: ScenariosOLD,\\n} as Meta;\\n\\nexport const ScenariosStory = () => {\\n const [newScenario, setNewScenario] = useState();\\n\\n const onAddScenario = () => {\\n setNewScenario({\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\n });\\n };\\n\\n const queryDates = {\\n from: addDays(new Date(), -1).toISOString(),\\n to: addDays(new Date(), 1).toISOString(),\\n };\\n\\n return (\\n
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (\\n <>\\n \\n }\\n onClick={onAddScenario}\\n >\\n Add new scenario\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\n menuItem,\\n scenario,\\n })\\n }\\n onScenarioSelected={(scenario: ScenarioOLD) => {\\n console.log('Scenario selected', scenario);\\n }}\\n onScenarioReceived={(scenario: ScenarioOLD) => {\\n console.log('Full Scenario received', scenario);\\n }}\\n onScenariosReceived={(scenarios: ScenarioOLD[]) => {\\n console.log('Received new scenarios!', scenarios);\\n }}\\n showDate\\n showHour\\n showMenu\\n showStatus\\n status={[\\n {\\n name: 'Pending',\\n color: 'orange',\\n message: 'Pending',\\n },\\n {\\n name: 'Starting',\\n color: 'orange',\\n message: 'Starting',\\n },\\n {\\n name: 'Cancel',\\n color: 'grey',\\n message: 'Cancel',\\n },\\n {\\n name: 'Cancelling',\\n color: 'orange',\\n message: 'Cancelling',\\n },\\n {\\n name: 'Cancelled',\\n color: 'grey',\\n message: 'Cancelled',\\n },\\n {\\n name: 'InProgress',\\n color: 'orange',\\n message: 'Running',\\n },\\n {\\n name: 'Unknown',\\n color: 'black',\\n message: 'Unknown',\\n },\\n {\\n name: 'ReadyToInitiate',\\n color: 'red',\\n message: 'Ready',\\n },\\n {\\n name: 'Completed',\\n color: 'green',\\n message: 'Completed',\\n },\\n {\\n name: 'Error',\\n color: 'black',\\n message: 'Error',\\n },\\n {\\n name: 'Default',\\n color: 'black',\\n message: 'Unknown',\\n },\\n ]}\\n addScenario={newScenario}\\n translations={{\\n executeConfirmation:\\n 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\n terminateConfirmation:\\n 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\n cloneConfirmation:\\n 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\n deleteConfirmation:\\n 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\n cancelLabel: 'Batal',\\n confirmLabel: 'Lanjut',\\n }}\\n />\\n \\n )}\\n \\n
\\n );\\n};\\n\\nexport const ScenariosJSONStory = () => {\\n const [newScenario, setNewScenario] = useState();\\n const NOTIFICATION_HUB = '/notificationhub';\\n\\n const onAddScenario = () => {\\n setNewScenario({\\n fullName: `scenario-${uniqueId()}`,\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\n dateTime: new Date().toISOString(),\\n permissions: [\\n {\\n principals: ['Administrators', 'Editors', 'Users'],\\n operation: 'read',\\n },\\n {\\n principals: ['Administrators', 'Editors'],\\n operation: 'update',\\n },\\n {\\n principals: ['Administrators'],\\n operation: 'delete',\\n },\\n ],\\n });\\n };\\n\\n const queryDates = {\\n from: addDays(new Date(), -3).toISOString(),\\n to: addDays(new Date(), 1).toISOString(),\\n };\\n\\n const actionButton = {\\n name: 'Operational View',\\n color: '#00A4EC',\\n handleActionButton: () => console.log('Action Button Clicked'),\\n };\\n\\n return (\\n
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (\\n <>\\n \\n }\\n onClick={onAddScenario}\\n >\\n Add new scenario\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\n menuItem,\\n scenario,\\n })\\n }\\n onScenarioSelected={(scenario: Scenario) => {\\n console.log('Scenario selected', scenario);\\n }}\\n onScenarioReceived={(scenario: Scenario) => {\\n console.log('Full Scenario received', scenario);\\n }}\\n onScenariosReceived={(scenarios: Scenario[]) => {\\n console.log('Received new scenarios!', scenarios);\\n }}\\n showDate\\n showHour\\n showMenu\\n showStatus\\n status={STATUS}\\n highlightNameOnStatus=\\\"Error\\\"\\n addScenario={newScenario}\\n translations={TRANSLATIONS}\\n debug\\n />\\n \\n )}\\n \\n
\\n );\\n};\\n\", \"locationsMap\": { \"scenarios-story\": { \"startLoc\": { \"col\": 30, \"line\": 18 }, \"endLoc\": { \"col\": 1, \"line\": 247 }, \"startBody\": { \"col\": 30, \"line\": 18 }, \"endBody\": { \"col\": 1, \"line\": 247 } }, \"scenarios-json-story\": { \"startLoc\": { \"col\": 34, \"line\": 249 }, \"endLoc\": { \"col\": 1, \"line\": 399 }, \"startBody\": { \"col\": 34, \"line\": 249 }, \"endBody\": { \"col\": 1, \"line\": 399 } } } }, },\r\n title: 'Scenarios Components',\r\n component: ScenariosOLD,\r\n};\r\nexport const ScenariosStory = () => {\r\n const [newScenario, setNewScenario] = useState();\r\n const onAddScenario = () => {\r\n setNewScenario({\r\n data: `{\"testProperty\":false,\"name\":\"My Scenario test\",\"startTime\":\"${new Date().toISOString()}\",\"vessel\":{\"vesselName\":\"MSC Pamela\"},\"mooring\":{\"berthName\":\"VIG Berth 2\"}}`,\r\n });\r\n };\r\n const queryDates = {\r\n from: addDays(new Date(), -1).toISOString(),\r\n to: addDays(new Date(), 1).toISOString(),\r\n };\r\n return (
\n \n \n Scenarios\n \n \n \n {({ token }) => (<>\n \n \n \n console.log('Scenario menu item clicked', {\r\n menuItem,\r\n scenario,\r\n })} onScenarioSelected={(scenario) => {\r\n console.log('Scenario selected', scenario);\r\n }} onScenarioReceived={(scenario) => {\r\n console.log('Full Scenario received', scenario);\r\n }} onScenariosReceived={(scenarios) => {\r\n console.log('Received new scenarios!', scenarios);\r\n }} showDate showHour showMenu showStatus status={[\r\n {\r\n name: 'Pending',\r\n color: 'orange',\r\n message: 'Pending',\r\n },\r\n {\r\n name: 'Starting',\r\n color: 'orange',\r\n message: 'Starting',\r\n },\r\n {\r\n name: 'Cancel',\r\n color: 'grey',\r\n message: 'Cancel',\r\n },\r\n {\r\n name: 'Cancelling',\r\n color: 'orange',\r\n message: 'Cancelling',\r\n },\r\n {\r\n name: 'Cancelled',\r\n color: 'grey',\r\n message: 'Cancelled',\r\n },\r\n {\r\n name: 'InProgress',\r\n color: 'orange',\r\n message: 'Running',\r\n },\r\n {\r\n name: 'Unknown',\r\n color: 'black',\r\n message: 'Unknown',\r\n },\r\n {\r\n name: 'ReadyToInitiate',\r\n color: 'red',\r\n message: 'Ready',\r\n },\r\n {\r\n name: 'Completed',\r\n color: 'green',\r\n message: 'Completed',\r\n },\r\n {\r\n name: 'Error',\r\n color: 'black',\r\n message: 'Error',\r\n },\r\n {\r\n name: 'Default',\r\n color: 'black',\r\n message: 'Unknown',\r\n },\r\n ]} addScenario={newScenario} translations={{\r\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\r\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\r\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\r\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\r\n cancelLabel: 'Batal',\r\n confirmLabel: 'Lanjut',\r\n }}/>\n )}\n \n
);\r\n};;;\r\n;\r\nexport const ScenariosJSONStory = () => {\r\n const [newScenario, setNewScenario] = useState();\r\n const NOTIFICATION_HUB = '/notificationhub';\r\n const onAddScenario = () => {\r\n setNewScenario({\r\n fullName: `scenario-${uniqueId()}`,\r\n data: `{\"name\":\"My Scenario JSON\",\"startTime\":\"${new Date().toISOString()}\",\"vessel\":{\"vesselName\":\"MSC Pamela\"},\"mooring\":{\"berthName\":\"VIG Berth 2\"}}`,\r\n dateTime: new Date().toISOString(),\r\n permissions: [\r\n {\r\n principals: ['Administrators', 'Editors', 'Users'],\r\n operation: 'read',\r\n },\r\n {\r\n principals: ['Administrators', 'Editors'],\r\n operation: 'update',\r\n },\r\n {\r\n principals: ['Administrators'],\r\n operation: 'delete',\r\n },\r\n ],\r\n });\r\n };\r\n const queryDates = {\r\n from: addDays(new Date(), -3).toISOString(),\r\n to: addDays(new Date(), 1).toISOString(),\r\n };\r\n const actionButton = {\r\n name: 'Operational View',\r\n color: '#00A4EC',\r\n handleActionButton: () => console.log('Action Button Clicked'),\r\n };\r\n return (
\n \n \n Scenarios JSON\n \n \n \n {({ token }) => (<>\n \n \n \n console.log('Scenario menu item clicked', {\r\n menuItem,\r\n scenario,\r\n })} onScenarioSelected={(scenario) => {\r\n console.log('Scenario selected', scenario);\r\n }} onScenarioReceived={(scenario) => {\r\n console.log('Full Scenario received', scenario);\r\n }} onScenariosReceived={(scenarios) => {\r\n console.log('Received new scenarios!', scenarios);\r\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\"Error\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\n )}\n \n
);\r\n};\r\n\n\n\nScenariosStory.parameters = { storySource: { source: \"() => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n data: `{\\\"testProperty\\\":false,\\\"name\\\":\\\"My Scenario test\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -1).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={[\\r\\n {\\r\\n name: 'Pending',\\r\\n color: 'orange',\\r\\n message: 'Pending',\\r\\n },\\r\\n {\\r\\n name: 'Starting',\\r\\n color: 'orange',\\r\\n message: 'Starting',\\r\\n },\\r\\n {\\r\\n name: 'Cancel',\\r\\n color: 'grey',\\r\\n message: 'Cancel',\\r\\n },\\r\\n {\\r\\n name: 'Cancelling',\\r\\n color: 'orange',\\r\\n message: 'Cancelling',\\r\\n },\\r\\n {\\r\\n name: 'Cancelled',\\r\\n color: 'grey',\\r\\n message: 'Cancelled',\\r\\n },\\r\\n {\\r\\n name: 'InProgress',\\r\\n color: 'orange',\\r\\n message: 'Running',\\r\\n },\\r\\n {\\r\\n name: 'Unknown',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n {\\r\\n name: 'ReadyToInitiate',\\r\\n color: 'red',\\r\\n message: 'Ready',\\r\\n },\\r\\n {\\r\\n name: 'Completed',\\r\\n color: 'green',\\r\\n message: 'Completed',\\r\\n },\\r\\n {\\r\\n name: 'Error',\\r\\n color: 'black',\\r\\n message: 'Error',\\r\\n },\\r\\n {\\r\\n name: 'Default',\\r\\n color: 'black',\\r\\n message: 'Unknown',\\r\\n },\\r\\n ]} addScenario={newScenario} translations={{\\r\\n executeConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Status akan berubah setelah penyelesaian pekerjaan. Anda yakin ingin mengeksekusi',\\r\\n terminateConfirmation: 'Ini akan membatalkan pekerjaan yang sedang dieksekusi. Status akan berubah setelah pembatalan pekerjaan. Anda yakin ingin mengakhiri',\\r\\n cloneConfirmation: 'Ini akan memulai pekerjaan baru di latar belakang. Anda dapat menghapus skenario kloning ini nanti. Anda yakin ingin mengkloning',\\r\\n deleteConfirmation: 'Ini akan menghapus skenario yang dipilih dari daftar. Setelah dihapus, Anda tidak dapat mengambil data. Anda yakin ingin menghapus',\\r\\n cancelLabel: 'Batal',\\r\\n confirmLabel: 'Lanjut',\\r\\n }}/>\\n )}\\n \\n
);\\r\\n}\" }, ...ScenariosStory.parameters };\nScenariosJSONStory.parameters = { storySource: { source: \"() => {\\r\\n const [newScenario, setNewScenario] = useState();\\r\\n const NOTIFICATION_HUB = '/notificationhub';\\r\\n const onAddScenario = () => {\\r\\n setNewScenario({\\r\\n fullName: `scenario-${uniqueId()}`,\\r\\n data: `{\\\"name\\\":\\\"My Scenario JSON\\\",\\\"startTime\\\":\\\"${new Date().toISOString()}\\\",\\\"vessel\\\":{\\\"vesselName\\\":\\\"MSC Pamela\\\"},\\\"mooring\\\":{\\\"berthName\\\":\\\"VIG Berth 2\\\"}}`,\\r\\n dateTime: new Date().toISOString(),\\r\\n permissions: [\\r\\n {\\r\\n principals: ['Administrators', 'Editors', 'Users'],\\r\\n operation: 'read',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators', 'Editors'],\\r\\n operation: 'update',\\r\\n },\\r\\n {\\r\\n principals: ['Administrators'],\\r\\n operation: 'delete',\\r\\n },\\r\\n ],\\r\\n });\\r\\n };\\r\\n const queryDates = {\\r\\n from: addDays(new Date(), -3).toISOString(),\\r\\n to: addDays(new Date(), 1).toISOString(),\\r\\n };\\r\\n const actionButton = {\\r\\n name: 'Operational View',\\r\\n color: '#00A4EC',\\r\\n handleActionButton: () => console.log('Action Button Clicked'),\\r\\n };\\r\\n return (
\\n \\n \\n Scenarios JSON\\n \\n \\n \\n {({ token }) => (<>\\n \\n \\n \\n console.log('Scenario menu item clicked', {\\r\\n menuItem,\\r\\n scenario,\\r\\n })} onScenarioSelected={(scenario) => {\\r\\n console.log('Scenario selected', scenario);\\r\\n }} onScenarioReceived={(scenario) => {\\r\\n console.log('Full Scenario received', scenario);\\r\\n }} onScenariosReceived={(scenarios) => {\\r\\n console.log('Received new scenarios!', scenarios);\\r\\n }} showDate showHour showMenu showStatus status={STATUS} highlightNameOnStatus=\\\"Error\\\" addScenario={newScenario} translations={TRANSLATIONS} debug/>\\n )}\\n \\n
);\\r\\n}\" }, ...ScenariosJSONStory.parameters };","import * as React from 'react';\nimport { Login, LoginProps } from './Login/Login';\nimport { Token, User } from './types';\n\nexport type LoginState = { user?: User; token?: Token };\n\n/** See ../Accounts/Accounts.stories.tsx for example usage */\nexport const LoginGate = (\n props: LoginProps & {\n children(login: Required): React.ReactNode;\n },\n) => {\n const [state, setState] = React.useState({});\n\n if (!state.token?.accessToken?.token)\n return (\n {\n setState({ user, token });\n props.onSuccess && props.onSuccess(user, token);\n }}\n />\n );\n\n return <>{props.children(state as Required)};\n};\n","import { fetchAccount, fetchToken, resetPassword, updatePassword } from '../api';\nimport { Form, OtpInfo, Token, User } from './types';\n\nexport default class AuthService {\n host: string | string[];\n\n constructor(host: string | string[]) {\n this.host = host;\n }\n\n login = (\n form: Form,\n onOtpRequired: (otpInfo: OtpInfo) => void,\n onSuccess: (user: User, token: Token) => void,\n onError: (err: string) => void,\n ) => {\n if (Array.isArray(this.host)) {\n let firstResponse;\n const accessTokenList = [];\n\n this.host.forEach((host, index) => {\n fetchToken(host, {\n id: form.id,\n password: form.password,\n otp: form.otp,\n otpAuthenticator: form.otpAuthenticator,\n }).subscribe(\n (response) => {\n if ((response as OtpInfo).otpRequired && !form.otp) {\n onOtpRequired(response as OtpInfo);\n } else {\n fetchAccount(host, response.accessToken.token, 'me').subscribe(\n (user) => {\n const loggedInUser: User = {\n ...user,\n roles: user.roles ? user.roles.split(',').map((role: string) => role.trim()) : [],\n metadata: user.metadata ? user.metadata : {},\n };\n\n if (index === 0) {\n this.setSession(response, loggedInUser, form.rememberMe);\n firstResponse = response;\n\n if (onSuccess != null) {\n onSuccess(loggedInUser, response);\n }\n } else {\n accessTokenList.push({ ...response, host });\n this.setSession(firstResponse, loggedInUser, form.rememberMe, accessTokenList);\n }\n },\n (err) => {\n if (onError != null) {\n onError(err);\n }\n },\n );\n }\n },\n (error) => onError(error),\n );\n });\n } else {\n fetchToken(this.host, {\n id: form.id,\n password: form.password,\n otp: form.otp,\n otpAuthenticator: form.otpAuthenticator,\n }).subscribe(\n (response) => {\n if ((response as OtpInfo).otpRequired && !form.otp) {\n onOtpRequired(response as OtpInfo);\n } else {\n fetchAccount(this.host as string, response.accessToken.token, 'me').subscribe(\n (user) => {\n const loggedInUser: User = {\n ...user,\n roles: user.roles ? user.roles.split(',').map((role: string) => role.trim()) : [],\n metadata: user.metadata ? user.metadata : {},\n };\n\n this.setSession(response, loggedInUser, form.rememberMe);\n\n if (onSuccess != null) {\n onSuccess(loggedInUser, response);\n }\n },\n (err) => {\n if (onError != null) {\n onError(err);\n }\n },\n );\n }\n },\n (error) => onError(error),\n );\n }\n };\n\n requestResetPassword = (\n mailBody: string,\n emailAddress: string,\n onSuccess: () => void,\n onError: (err: string) => void,\n ) => {\n return resetPassword(this.host as string, mailBody, emailAddress).subscribe(\n (response) => {\n if (onSuccess != null) {\n onSuccess();\n }\n },\n (error) => onError(error),\n );\n };\n\n confirmResetPassword = (\n token: string,\n newPassword: string,\n onSuccess: () => void,\n onError: (err: string) => void,\n ) => {\n return updatePassword(this.host as string, token, newPassword).subscribe(\n (response) => {\n if (onSuccess != null) {\n onSuccess();\n }\n },\n (error) => onError(error),\n );\n };\n\n // Get user details in local storage\n getSession = () => {\n const storage = localStorage.getItem('accessToken') != null ? localStorage : sessionStorage;\n const userStorage = storage.getItem('user');\n const accessTokenList = storage.getItem('accessTokenList');\n\n return {\n accessToken: storage.getItem('accessToken'),\n refreshToken: storage.getItem('refreshToken'),\n user: userStorage ? JSON.parse(userStorage) : null,\n expiration: storage.getItem('expiration'),\n accessTokenList: accessTokenList ? JSON.parse(accessTokenList) : null,\n };\n };\n\n // Sets user details in localStorage\n setSession = (authResult: Token, user: User, useLocalStorage: boolean, list?: any) => {\n // Set the time that the access token will expire at\n // const expiresAt = JSON.stringify(authResult.expiresIn * 1000 + new Date().getTime());\n const storage = useLocalStorage ? localStorage : sessionStorage;\n\n storage.setItem('accessToken', authResult.accessToken.token);\n\n storage.setItem('refreshToken', authResult.refreshToken.token);\n\n storage.setItem('user', JSON.stringify(user));\n\n storage.setItem('expiration', authResult.accessToken.expiration);\n\n if (list) {\n storage.setItem('accessTokenList', JSON.stringify(list));\n }\n };\n\n // checks if the user is authenticated\n isAuthenticated = (): boolean => {\n const storage = localStorage.getItem('accessToken') != null ? localStorage : sessionStorage;\n const expirationStorage = storage.getItem('expiration');\n const accessToken = storage.getItem('accessToken');\n\n if (expirationStorage && accessToken) {\n // Check whether the current time is past the\n // access token's expiry time (in UTC, but once it goes into new Date() it will be converted to local time)\n const expiresAt = new Date(expirationStorage);\n const now = new Date();\n // Get and check against UTC date\n // const nowUtc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);\n\n return now < expiresAt;\n }\n\n return false;\n };\n\n // removes user details from localStorage\n logout = () => {\n const storage = localStorage.getItem('accessToken') != null ? localStorage : sessionStorage;\n // Clear access token and ID token from local storage\n\n storage.removeItem('accessToken');\n storage.removeItem('refreshToken');\n storage.removeItem('user');\n storage.removeItem('expiration');\n storage.removeItem('accessTokenList');\n };\n}\n","import { createTheme } from '@material-ui/core/styles';\n\nconst DHITheme = createTheme({\n palette: {\n primary: {\n main: '#0B4566', // DHI Primary color\n },\n secondary: {\n main: '#3d6079', // Automatically generated secondary color\n },\n },\n});\n\nexport default DHITheme;\n","import { addHours, differenceInMinutes, parseISO } from 'date-fns';\nimport { format, toDate, utcToZonedTime } from 'date-fns-tz';\nimport jp from 'jsonpath';\nimport { isArray } from 'lodash';\nimport { Condition, DescriptionField, Scenario, Status } from '../Scenarios/types';\nimport ReportProblemOutlinedIcon from '@material-ui/icons/ReportProblemOutlined';\nimport { ErrorRounded } from '@material-ui/icons';\n\nconst dataObjectToArray = (data: { [x: string]: any }) => {\n return Object.keys(data).map((key) => ({\n id: key,\n data: data[key],\n }));\n};\n\nconst getObjectProperty = (objectItem: any, property: string): any => {\n if (!objectItem) return null;\n\n const value = jp.query(objectItem, property);\n\n return value.length > 0 ? value[0] : null;\n};\n\nconst setObjectProperty = (objectItem: any, property: string, newValue: any) => {\n // Use jsonpath to apply in a deep path approach\n jp.apply(objectItem, `$.${property}`, () => newValue);\n};\n\nconst trimRecursive = (obj) => {\n for (const k in obj) {\n if (typeof obj[k] === 'string') obj[k] = obj[k].trim();\n else if (typeof obj[k] === 'object' && !(obj[k] instanceof Array)) trimRecursive(obj[k]);\n }\n\n return obj;\n};\n\nconst getDescriptions = (\n scenarioData: Scenario,\n descriptionFields: DescriptionField[] | undefined,\n timeZone: string | undefined,\n) => {\n const descriptions: { name: string; value: any }[] = [];\n\n if (!descriptionFields) {\n return descriptions;\n }\n\n for (const field of descriptionFields) {\n const value = getObjectProperty(scenarioData, field.field);\n\n // if (!value) {\n // console.warn(`Could not find field reference: ${field.field}!`);\n // continue;\n // }\n\n // Check if valid conditions met\n if (!field.condition || checkCondition(scenarioData, field.condition)) {\n // Formatting\n let formattedValue = value;\n\n // Formatting if date/time type\n if (value && field.dataType === 'dateTime') {\n let date: Date = parseISO(value);\n\n if (timeZone) {\n date = utcToTz(value, timeZone);\n }\n\n formattedValue = format(date, field.format ? field.format : 'yyyy-MM-dd HH:mm:ss');\n }\n\n descriptions.push({\n name: field.name,\n value: formattedValue,\n });\n }\n }\n\n return descriptions;\n};\n\n/**\n * Check if the property passed in the condition object is in the Scenario object\n * @param scenarioData Scenario Data\n * @param condition A object with a condition\n * @returns true or false\n */\nconst checkCondition = (scenarioData: Scenario, condition: Condition) => {\n let conditions: string[] = [];\n let isInverse = false;\n\n if (condition) {\n if (condition!.field.indexOf('!') === 0) {\n isInverse = true;\n }\n\n // If we have a value, check that it matches\n // If we didn't specify a value, just want to check if this field has data or not\n if (condition.value) {\n if (isArray(condition.value)) {\n conditions = [...condition.value];\n } else {\n conditions = [condition.value!];\n }\n\n return conditions.indexOf(getObjectProperty(scenarioData, condition!.field.replace('!', ''))) >= 0 === !isInverse;\n } else {\n return (getObjectProperty(scenarioData, condition!.field.replace('!', '')) != null) === !isInverse;\n }\n } else {\n return true;\n }\n};\n\n/**\n * Check if any of the listed properties are in the Scenario object\n * @param scenarioData Scenario Data\n * @param conditions Array of conditions\n * @returns true or false\n */\nconst checkConditions = (scenarioData: Scenario, conditions: Condition[]) => {\n let conditionsValue: string[] = [];\n let isInverse = false;\n const check = [];\n\n conditions.forEach((condition) => {\n if (condition) {\n if (condition!.field.indexOf('!') === 0) {\n isInverse = true;\n }\n\n const dtoProperty = getObjectProperty(scenarioData, condition!.field.replace('!', ''));\n\n // If we have a value, check that it matches\n // If we didn't specify a value, just want to check if this field has data or not\n if (condition.value) {\n if (isArray(condition.value)) {\n conditionsValue = [...condition.value];\n } else {\n conditionsValue = [condition.value!];\n }\n\n // * If checking field exists in the model, compare as normal *\n // * If checking field does NOT exist in the model, skip unless a boolean check equalling `false` *\n // This ensures we have backwards-compatibility where newly added DTO properties may not exist in older scenarioData's\n // but if it DOES exist, 'false' matches are explicitly checked.\n const values = conditionsValue\n .filter((val) => dtoProperty !== null || val !== 'false')\n .map((val) => (val === 'true' || val === 'false' ? val === 'true' : val));\n\n if (values.length > 0) {\n check.push(values.indexOf(dtoProperty) >= 0 === !isInverse);\n }\n } else {\n check.push((dtoProperty != null) === !isInverse);\n }\n } else {\n check.push(true);\n }\n });\n\n const finalCheck = check.filter((item) => item === false);\n\n return !(finalCheck.length > 0);\n};\n\nconst changeObjectProperty = (objectItem: any, property: string, intent: any) => {\n const properties = property.split('.');\n let value = objectItem;\n const body = [value];\n\n for (let i = 0; i < properties.length; i++) {\n value = value[properties[i]];\n body.push(value);\n }\n\n body[properties.length] = intent;\n\n for (let j = properties.length; j > 0; j--) {\n body[j - 1][properties[j - 1]] = body[j];\n }\n\n return body[0];\n};\n\nconst checkStatus = (scenario: Scenario, status: Status[], scenarioOLD?: boolean) => {\n let scenarioStatus;\n let progress;\n\n if (scenarioOLD) {\n scenarioStatus = getObjectProperty(scenario, 'lastJobStatus');\n progress = Number(getObjectProperty(scenario, 'lastJobProgress'));\n } else {\n scenarioStatus = getObjectProperty(scenario, 'status');\n progress = Number(getObjectProperty(scenario, 'progress'));\n }\n\n const currentStatus = {\n ...status.find((s) => s.name === scenarioStatus),\n progress: scenarioStatus === 'InProgress' ? progress : 0,\n };\n\n let result;\n\n if (!scenarioStatus) {\n result = {\n color: '#FD3F75',\n name: 'Error',\n message: 'Unknown Status',\n Icon: ErrorRounded,\n } as Status;\n } else {\n result = currentStatus;\n }\n\n return result;\n};\n\n/**\n * This converts the date provided to a specific IANA time zone\n * @param date The UTC date to convert. No time zone provided\n * @param timeZone The time zone to convert it to\n */\nconst utcToTz = (date: string, timeZone: string) => utcToZonedTime(`${date}Z`, timeZone);\n\nconst queryProp = (query: any) => {\n return typeof query === 'undefined' ? '' : query;\n};\n\nconst uniqueId = () => `${format(new Date(), 'yyyyMMddhhmmss')}-${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\n\nconst s4 = () =>\n Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n\nexport const passwordStrength = (password?: string) => {\n let score = 0;\n\n if (!password) {\n return 0;\n }\n\n // Length 4 or less\n if (password.length < 5) {\n score += 3;\n // Length between 5 and 7\n } else if (password.length < 8) {\n score += 6;\n // Length between 8 and 15\n } else if (password.length < 16) {\n score += 12;\n // Length 16 or more\n } else {\n score += 18;\n }\n\n // At least one lower case letter\n if (password.match(/[a-z]/)) {\n score += 3;\n }\n\n // At least one upper case letter\n if (password.match(/[A-Z]/)) {\n score += 6;\n }\n\n // At least one number\n if (password.match(/\\d+/)) {\n score += 6;\n }\n\n // At least three numbers\n if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {\n score += 6;\n }\n\n // At least one special character\n if (password.match(/.[!,@,#,$,%,^,&,*,?,_,~]/)) {\n score += 6;\n }\n\n // Aat least two special characters\n if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) {\n score += 8;\n }\n\n // Combinations both upper and lower case\n if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {\n score += 5;\n }\n\n // Both letters and numbers\n if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {\n score += 5;\n }\n\n // Letters, numbers, and special characters\n if (password.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/)) {\n score += 5;\n }\n\n if (score < 16) {\n return 0;\n }\n\n if (score < 25) {\n return 1;\n }\n\n if (score < 35) {\n return 2;\n }\n\n if (score < 45) {\n return 3;\n }\n\n if (score > 45) {\n return 4;\n }\n\n return 0;\n};\n\nconst calcTimeDifference = (beginDate: string, endDate: string) => {\n const difference = differenceInMinutes(new Date(endDate), new Date(beginDate));\n const hour = Math.floor(difference / 60);\n const minute = Math.floor(difference - hour * 60);\n\n if (isNaN(difference)) {\n return '';\n }\n\n if (hour === 0 && minute === 0) {\n return '<1m';\n } else if (hour !== 0) {\n return `${hour}h ${minute}m`;\n } else {\n return `${minute}m`;\n }\n};\n\n/**\n * Convert and format data to from UTC to Zoned Time\n * @param date Date and Time\n * @param timeZone 'Australia/Brisbane'\n * @param dateTimeFormat 'Date time format. 'yyyy-MM-dd HH:mm:ss'\n */\nconst zonedTimeFromUTC = (date, timeZone, dateTimeFormat) => {\n date = `${date.replace('Z', '')}Z`;\n\n return format(utcToZonedTime(date, timeZone), dateTimeFormat);\n};\n\n/**\n * This the current utc time possibly offset by a number of hours. The returned string is without time zone\n * @param offsetHours An optional number of hours to offset the time\n */\nconst utcNow = (offsetHours?: number | null) =>\n format(addHours(utcToZonedTime(new Date(), 'UTC'), offsetHours == null ? 0 : offsetHours), 'yyyy-MM-dd HH:mm:ss');\n\n/**\n * This converts the date provided in a specific IANA time zone to UTC\n * @param date The date in a time zone to convert. No time zone provided\n * @param timeZone The time zone its in\n */\nconst tzToUtc = (date: string | Date, timeZone: string) =>\n date\n ? format(utcToZonedTime(toDate(date, { timeZone }), 'UTC'), 'yyyy-MM-dd HH:mm:ss')\n : format(utcToZonedTime(toDate(utcNow(), { timeZone }), 'UTC'), 'yyyy-MM-dd HH:mm:ss');\n\nconst toISOLocal = (d: Date) => {\n const z = (n) => `0${n}`.slice(-2);\n const zz = (n) => `00${n}`.slice(-3);\n let off = d.getTimezoneOffset();\n off = Math.abs(off);\n\n return `${d.getFullYear()}-${z(d.getMonth() + 1)}-${z(d.getDate())}T${z(d.getHours())}:${z(d.getMinutes())}:${z(\n d.getSeconds(),\n )}.${zz(d.getMilliseconds())}`;\n};\n\n/**\n * A recursive function that will add a children property into the object when it matches the current obj.value\n * @param obj Object where the recursive function will look for its property\n * @param name Name of the value to match the current loop\n * @param children object that will be added\n */\nconst recursive = (obj: any, name: string, children: any) => {\n if (obj.value === name && !obj.fetched) {\n obj.children = children;\n obj.fetched = true;\n }\n\n Array.isArray(obj.children) && obj.children.map((obj) => recursive(obj, name, children));\n};\n\nexport {\n dataObjectToArray,\n getObjectProperty,\n setObjectProperty,\n getDescriptions,\n trimRecursive,\n changeObjectProperty,\n checkCondition,\n checkConditions,\n checkStatus,\n utcToTz,\n queryProp,\n uniqueId,\n calcTimeDifference,\n zonedTimeFromUTC,\n tzToUtc,\n toISOLocal,\n recursive,\n};\n","import ReactEcharts from 'echarts-for-react';\nimport React, { useEffect, useState } from 'react';\nimport { StandardChartProps } from './types';\n\nconst BaseChart = (props: StandardChartProps) => {\n const { className, options, chartHeightFunc, getRefFunc, debug } = props;\n const [chartSize, setChartSize] = useState({ width: '100%', height: chartHeightFunc() });\n\n useEffect(() => {\n const handleResize = () => setChartSize({ width: '100%', height: chartHeightFunc() });\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n });\n\n useEffect(() => {\n setChartSize({ width: '100%', height: chartHeightFunc() });\n }, [chartHeightFunc]);\n\n if (debug) {\n console.log('chart config', { data: options, raw: JSON.stringify(options) });\n }\n\n return (\n options?.series && (\n
\n {\n if (getRefFunc) getRefFunc(e);\n }}\n style={{ width: chartSize.width, height: chartSize.height }}\n option={options}\n {...props}\n />\n
\n )\n );\n};\n\nexport { BaseChart, StandardChartProps };\n","import { from, of, throwError } from 'rxjs';\nimport { catchError, flatMap, map, tap } from 'rxjs/operators';\nimport { Options } from '../api/types';\n\nconst DEFAULT_OPTIONS = {\n headers: {\n 'Content-Type': 'application/json',\n },\n};\n\nconst checkStatus = (response: Response) => {\n if (response.status === 204 || response.status === 202) {\n return of(response);\n }\n\n return response.text().then((text) => {\n return text ? JSON.parse(text) : {};\n });\n};\n\nconst fetchUrl = (endPoint: RequestInfo, options?: Options) => {\n const mergedOptions = {\n ...DEFAULT_OPTIONS,\n ...options,\n headers: {\n ...DEFAULT_OPTIONS.headers,\n ...options?.additionalHeaders,\n },\n };\n\n return from(fetch(endPoint, mergedOptions as any)).pipe(\n // tap((response) => console.log(`Response status: ${response.status}`)),\n map((response) => {\n if (response.status >= 400) {\n throw new Error(`Error: ${response.status}, reason: ${response.statusText}`);\n } else {\n return response;\n }\n }),\n flatMap((response) => checkStatus(response)),\n catchError((error) => throwError(error)),\n );\n};\n\nexport { DEFAULT_OPTIONS, fetchUrl };\n","import {\n EditingState,\n FilteringState,\n IntegratedFiltering,\n IntegratedSorting,\n SortingState,\n} from '@devexpress/dx-react-grid';\nimport {\n ColumnChooser,\n Grid,\n TableColumnVisibility,\n TableEditColumn,\n TableFilterRow,\n TableHeaderRow,\n Toolbar,\n VirtualTable,\n} from '@devexpress/dx-react-grid-material-ui';\nimport Paper from '@material-ui/core/Paper';\nimport React, { useEffect, useState } from 'react';\nimport { createAccount, deleteAccount, fetchAccounts, fetchUserGroups, updateAccount } from '../api';\nimport {\n Command,\n DefaultColumnsTypeProvider,\n DeleteDialog,\n FilterCellRow,\n filterRules,\n MetadataTypeProvider,\n Popup,\n PopupEditing,\n UsersTypeProvider,\n} from '../common/Table';\nimport { UserGroupProps, UserGroupsData } from '../UserGroups/types';\n\nconst DEFAULT_COLUMNS = [\n {\n title: 'Username',\n name: 'id',\n },\n {\n title: 'Name',\n name: 'name',\n },\n {\n title: 'Email',\n name: 'email',\n },\n {\n title: 'User Groups',\n name: 'userGroups',\n },\n];\n\nconst Accounts: React.FC = ({ host, token, userGroupsDefaultSelected, metadata }) => {\n const [rows, setRows] = useState([]);\n const [userGroups, setUserGroups] = useState[]>([]);\n const [deletedDialog, setDeletedDialog] = useState(false);\n const [deleteRow, setDeleteRow] = useState({});\n const [filteringColumnExtensions, setFilteringColumnExtensions] = useState([]);\n const getRowId = (row) => row.id;\n\n const metadataHeader = metadata\n ? metadata.reduce(\n (acc, cur) => [\n ...acc,\n {\n title: cur.label,\n type: cur.type,\n name: cur.key,\n },\n ],\n [],\n )\n : [];\n\n const [columns] = useState(DEFAULT_COLUMNS.concat(metadataHeader));\n const metadataColumnsArray = metadata ? metadata.reduce((acc, cur) => [...acc, cur.key], []) : [];\n const [metadataColumns] = useState(metadataColumnsArray);\n const [usersColumn] = useState(['userGroups']);\n const [defaultColumnsNameArray] = useState(DEFAULT_COLUMNS.map((column) => column.name));\n\n const fetchData = () => {\n fetchAccounts(host, token).subscribe(\n async (body: Record) => {\n setRows(body as any);\n },\n (error) => {\n console.error('AU Error: ', error);\n },\n );\n\n fetchUserGroups(host, token).subscribe(async (body) => {\n const userGroups = body.map((ug) => ({\n id: ug.id,\n name: ug.name,\n }));\n setUserGroups(userGroups);\n });\n };\n\n const commitChanges = ({ added, changed, deleted }) => {\n let changedRows;\n\n if (added) {\n const startingAddedId = rows.length > 0 ? rows[rows.length - 1].id + 1 : 0;\n\n changedRows = [\n ...rows,\n ...added.map((row, index) => ({\n id: startingAddedId + index,\n ...row,\n })),\n ];\n }\n if (changed) {\n changedRows = rows.map((row) => (changed[row.id] ? { ...row, ...changed[row.id] } : row));\n }\n if (deleted) {\n setDeletedDialog(true);\n const deletedSet = new Set(deleted);\n const selectedRow = rows.filter((row) => deletedSet.has(row.id));\n setDeleteRow(selectedRow);\n\n // return the same rows and let the handleDelete deal with the data, otherwise it will be undefined and crash with no rows\n changedRows = rows;\n }\n\n setRows(changedRows);\n };\n\n const handleSubmit = (row, isNew = false) => {\n if (isNew) {\n return (\n createAccount(host, token, { ...row }).subscribe(() => {\n fetchData();\n }),\n (error) => {\n console.log('Create Account: ', error);\n }\n );\n } else {\n return (\n updateAccount(host, token, { ...row }).subscribe(() => {\n fetchData();\n }),\n (error) => {\n console.log('Update Accounts: ', error);\n }\n );\n }\n };\n\n const handleDelete = (row) => {\n deleteAccount(host, token, row.id).subscribe(\n () => {\n fetchData();\n setDeletedDialog(false);\n },\n (error) => console.log(error),\n );\n };\n\n useEffect(() => {\n fetchData();\n\n if (metadata) {\n setFilteringColumnExtensions(filterRules(metadata));\n }\n }, []);\n\n return (\n \n setDeletedDialog(false)}\n handleDelete={handleDelete}\n />\n \n \n \n\n \n \n\n \n \n\n \n {metadataColumns && }\n \n\n \n \n\n \n \n \n \n \n \n \n );\n};\n\nexport { UserGroupProps, Accounts };\n","import { makeStyles, Theme } from '@material-ui/core';\nimport { round, uniq } from 'lodash';\nimport React from 'react';\nimport { InterpolateIntensityColor } from './ColourScaleHelper';\nimport { ColourScaleProps } from './types';\n\nconst useStyles = makeStyles((theme: Theme) => ({}));\n\nconst ColourScale = ({\n type = 'intensity',\n mode = 'blocks',\n intervals = [],\n height = 24,\n markers = true,\n borderColour = 'transparent',\n}: ColourScaleProps) => {\n const classes = useStyles();\n let colours = [];\n\n if (type === 'intensity') {\n for (let i = 0; i < 100; i++) {\n const fillColor = InterpolateIntensityColor((i + 1) / 100);\n\n if (fillColor !== '#FFFFFF') {\n colours.push(fillColor);\n }\n }\n }\n\n // Only unique\n colours = uniq(colours);\n\n if (intervals.length === 0) {\n for (let i = 0; i < colours.length; i++) {\n intervals.push((i / colours.length) * 10);\n }\n }\n\n const intervalBreak = round(colours.length / intervals.length);\n let intervalIndex = 0;\n\n const markerStrip = markers && (\n \n {colours.map((c, index) => {\n if (index % intervalBreak === 0) {\n intervalIndex++;\n }\n\n return (\n \n {index === colours.length || index % intervalBreak === 0 ? intervals[intervalIndex - 1] : null}\n \n );\n })}\n \n );\n\n if (mode === 'gradient') {\n return (\n
\n
\n {markerStrip}\n \n );\n }\n if (mode === 'blocks')\n return (\n
\n \n {colours.map((c, index) => (\n
\n ))}\n
\n {markerStrip}\n \n );\n\n return <>;\n};\n\nexport { ColourScale, ColourScaleProps };\n","import { Button } from '@material-ui/core';\nimport { differenceInSeconds, format, parseISO } from 'date-fns';\nimport React from 'react';\nimport { TimeseriesData, TimeseriesExporterProps } from './types';\n\nconst TimeseriesExporter = (props: TimeseriesExporterProps) => {\n const exportTable = () => {\n const columns = [\n '',\n ...props.data.map(\n (timeseries, index) =>\n (props.timeseries && props.timeseries[index] && props.timeseries[index]?.name) || timeseries.id,\n ),\n ];\n\n let timesteps: string[] = [];\n\n props.data.forEach((timeseries) => {\n timesteps = [\n ...timesteps,\n ...timeseries.data.map((timestep: (string | number)[]) =>\n format(parseISO(timestep[0].toString()), \"yyyy-MM-dd'T'HH:mm:ss\"),\n ),\n ];\n });\n\n timesteps = timesteps.filter((value, index, self) => self.indexOf(value) === index);\n\n timesteps = timesteps.map((timestep) => format(parseISO(timestep), \"yyyy-MM-dd'T'HH:mm:ss\"));\n\n timesteps.sort((a, b) => differenceInSeconds(new Date(a), new Date(b)));\n\n let table: string[][] = [];\n\n timesteps.forEach((datetime: string) => {\n const cells = [format(parseISO(datetime), props.dateTimeFormat || 'yyyy-MM-dd HH:mm:ss')];\n const dateTimeLookup = format(parseISO(datetime), \"yyyy-MM-dd'T'HH:mm:ss\");\n\n props.data.forEach((timeseries: TimeseriesData, index: number) => {\n const found = timeseries.data.filter((timestep: (string | number)[]) => timestep[0] === dateTimeLookup);\n\n cells.push(\n found.length === 1\n ? props.timeseries && props.timeseries[index] && props.timeseries[index]?.decimals\n ? (found[0][1] as number).toFixed(props.timeseries[index]!.decimals!)\n : found[0][1].toString()\n : '',\n );\n });\n\n table = [...table, cells];\n });\n\n const csv = columns.join(', ') + table.map((row) => `\\r\\n${row.join(', ')}`);\n const link = document.createElement('a');\n\n link.setAttribute('href', encodeURI(`data:text/csv;charset=utf-8,${csv}`));\n\n link.setAttribute('download', !props.exportFileName ? 'Export.csv' : `${props.exportFileName}.csv`);\n\n document.body.appendChild(link);\n link.click();\n };\n\n return (\n
\n \n
\n );\n};\n\nexport { TimeseriesExporterProps, TimeseriesData, TimeseriesExporter };\n","import {\n EditingState,\n FilteringState,\n IntegratedFiltering,\n IntegratedSorting,\n SortingState,\n} from '@devexpress/dx-react-grid';\nimport {\n ColumnChooser,\n Grid,\n TableColumnVisibility,\n TableEditColumn,\n TableFilterRow,\n TableHeaderRow,\n Toolbar,\n VirtualTable,\n} from '@devexpress/dx-react-grid-material-ui';\nimport Paper from '@material-ui/core/Paper';\nimport React, { useEffect, useState } from 'react';\nimport { createUserGroup, deleteUserGroup, fetchAccounts, fetchUserGroups, updateUserGroups } from '../api';\nimport {\n Command,\n DeleteDialog,\n FilterCellRow,\n filterRules,\n MetadataTypeProvider,\n Popup,\n PopupEditing,\n UsersTypeProvider,\n} from '../common/Table';\nimport { UserGroupProps, UserGroups, UserGroupsData } from './types';\n\nconst DEFAULT_COLUMNS = [\n {\n title: 'Name',\n name: 'name',\n },\n {\n title: 'Users',\n name: 'users',\n },\n];\n\nconst UserGroups: React.FC = ({ host, token, metadata }) => {\n const [rows, setRows] = useState([]);\n const [users, setUsers] = useState[]>([]);\n const [deletedDialog, setDeletedDialog] = useState(false);\n const [deleteRow, setDeleteRow] = useState({});\n const [filteringColumnExtensions, setFilteringColumnExtensions] = useState([]);\n const getRowId = (row) => row.id;\n\n const metadataHeader = metadata\n ? metadata.reduce(\n (acc, cur) => [\n ...acc,\n {\n title: cur.label,\n type: cur.type,\n name: cur.key,\n },\n ],\n [],\n )\n : [];\n\n const [columns] = useState(DEFAULT_COLUMNS.concat(metadataHeader));\n const metadataColumnsArray = metadata ? metadata.reduce((acc, cur) => [...acc, cur.key], []) : [];\n const [metadataColumns] = useState(metadataColumnsArray);\n const [usersColumn] = useState(['users']);\n\n const fetchData = () => {\n fetchUserGroups(host, token).subscribe(\n async (body: Record) => {\n const userGroups = body as UserGroups[];\n setRows(userGroups);\n },\n (error) => {\n console.error('UG Error: ', error);\n },\n );\n\n fetchAccounts(host, token).subscribe(\n async (body: Record) => {\n const usersOnly = body.map((item) => ({\n id: item.id,\n name: item.name,\n }));\n setUsers(usersOnly);\n },\n (error) => {\n console.error('UGU Error: ', error);\n },\n );\n };\n\n const commitChanges = ({ added, changed, deleted }) => {\n let changedRows;\n\n if (added) {\n const startingAddedId = rows.length > 0 ? rows[rows.length - 1].id + 1 : 0;\n\n changedRows = [\n ...rows,\n ...added.map((row, index) => ({\n id: startingAddedId + index,\n ...row,\n })),\n ];\n }\n if (changed) {\n changedRows = rows.map((row) => (changed[row.id] ? { ...row, ...changed[row.id] } : row));\n }\n if (deleted) {\n setDeletedDialog(true);\n const deletedSet = new Set(deleted);\n const selectedRow = rows.filter((row) => deletedSet.has(row.id));\n setDeleteRow(selectedRow);\n\n // return the same rows and let the handleDelete deal with the data, otherwise it will be undefined and crash with no rows\n changedRows = rows;\n }\n\n setRows(changedRows);\n };\n\n const handleSubmit = (row, isNew = false) => {\n if (isNew) {\n return (\n createUserGroup(host, token, {\n id: row.id,\n name: row.name,\n users: row.users,\n metadata: row.metadata,\n }).subscribe(() => {\n fetchData();\n }),\n (error) => {\n console.log('Create User Group: ', error);\n }\n );\n } else {\n return (\n updateUserGroups(host, token, {\n id: row.id,\n name: row.name,\n users: row.users,\n metadata: row.metadata,\n }).subscribe(() => {\n fetchData();\n }),\n (error) => {\n console.log('Update User Groups: ', error);\n }\n );\n }\n };\n\n const handleDelete = (row) => {\n deleteUserGroup(host, token, row.id).subscribe(\n () => {\n fetchData();\n setDeletedDialog(false);\n },\n (error) => console.log(error),\n );\n };\n\n useEffect(() => {\n fetchData();\n setFilteringColumnExtensions(filterRules(metadata));\n }, []);\n\n return (\n \n setDeletedDialog(false)}\n handleDelete={handleDelete}\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\nexport { UserGroupProps, UserGroups };\n","import { Box, CircularProgress, Tooltip, Typography } from '@material-ui/core';\nimport { blue, green, red, yellow } from '@material-ui/core/colors';\nimport { Cancel, CancelScheduleSend, CheckCircle, Error, HelpOutline, HourglassEmpty } from '@material-ui/icons';\nimport React from 'react';\n\nconst StatusCell = ({ row }: { row: any }) => {\n const { status, progress } = row;\n\n switch (status) {\n case 'Completed':\n return (\n \n \n \n );\n case 'InProgress':\n return (\n \n \n \n \n {`${progress}%`}\n \n \n \n );\n case 'Pending':\n return (\n \n \n \n );\n case 'Error':\n return (\n \n \n \n );\n case 'Cancelled':\n return (\n \n \n \n );\n case 'Cancelling':\n case 'Cancel':\n return (\n \n \n \n );\n default:\n return (\n \n \n \n );\n }\n};\n\nexport default StatusCell;\n","import { VirtualTable } from '@devexpress/dx-react-grid-material-ui';\nimport { Tooltip, Typography, Zoom } from '@material-ui/core';\nimport { differenceInMinutes, format } from 'date-fns';\nimport React from 'react';\nimport StatusCell from './StatusCell';\n\nexport const GroupCellContent = (props: any) => (\n \n {props.row.value}\n \n);\n\nexport const Cell = (props: any) => {\n if (props.column.name === 'status') {\n return (\n \n \n \n );\n }\n\n if (props.column.name === 'delay') {\n const { requested, started } = props.row;\n\n if (!requested && !started) {\n return ;\n }\n\n const difference = differenceInMinutes(new Date(props.row.started), new Date(props.row.requested));\n const hour = Math.floor(difference / 60);\n const minute = Math.floor(difference - hour * 60);\n\n let delayColor = '';\n\n if (minute > 30) {\n delayColor = 'darkorange';\n } else if (minute > 60) {\n delayColor = ' red';\n }\n\n return (\n \n {props.value && (\n \n \n {props.value}\n \n \n )}\n \n );\n }\n\n return ;\n};\n\nexport const dateGroupCriteria = (value) => {\n return { key: format(new Date(value), 'yyyy-MM-dd - HH:00') };\n};\n","import { makeStyles, Theme } from '@material-ui/core/styles';\n\nexport const JobDetailStyles = makeStyles((theme: Theme) => ({\n root: {\n flexGrow: 1,\n height: '100%',\n },\n paper: {\n display: 'flex',\n padding: '16px 0',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n justifyContent: 'space-evenly',\n position: 'relative',\n width: '100%',\n alignItems: 'center',\n },\n item: {\n display: 'flex',\n flexDirection: 'column',\n fontFamily: theme.typography.fontFamily,\n fontSize: 12,\n },\n button: {\n backgroundColor: 'transparent',\n border: 'none',\n position: 'absolute',\n right: '0',\n cursor: 'pointer',\n },\n textarea: {\n width: '100%',\n minHeight: 400,\n overflow: 'scroll',\n whiteSpace: 'nowrap',\n height: 'calc(100% - 180px)',\n marginTop: theme.spacing(2),\n },\n}));\n\nexport const JobPanelStyles = (loadingDetail) =>\n makeStyles(() => ({\n wrapper: {\n display: 'flex',\n position: 'relative',\n overflow: loadingDetail ? 'hidden' : 'visible',\n },\n loadJobDetail: {\n display: 'flex',\n position: 'absolute',\n zIndex: 1200,\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100vh',\n },\n jobPanel: {\n zIndex: 999,\n padding: '1rem 2rem',\n background: '#FFF',\n top: 0,\n bottom: 0,\n right: 0,\n width: '50%',\n transition: 'all, .5s',\n position: loadingDetail ? 'absolute' : 'fixed',\n transform: loadingDetail ? 'translate3d(0, 0, 0)' : 'translate3d(100%, 0, 0)',\n boxShadow: loadingDetail ? '-20px 0px 19px -12px rgba(0,0,0,0.3)' : 'none',\n visibility: loadingDetail ? 'visible' : 'hidden',\n },\n }));\n","import { Grid, Paper, Typography } from '@material-ui/core';\nimport CancelOutlinedIcon from '@material-ui/icons/CancelOutlined';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { zonedTimeFromUTC } from '../../../utils/Utils';\nimport { JobDetailStyles } from '../styles';\nimport { JobDetailProps } from '../types';\n\nconst JobDetail = ({ detail, textareaScrolled, timeZone, dateTimeFormat, onClose }: JobDetailProps) => {\n const classes = JobDetailStyles();\n const [structuredLogs, setStructuredLogs] = useState('');\n const [scrollHeight, setScrollHeight] = useState(null);\n\n const displayBlock = (detail) => {\n return (\n
\n {Object.entries(detail).map(([key, value], i) => {\n if (key !== 'taskId' && key !== 'id' && key !== 'logs' && value !== '') {\n return (\n \n {key}: {value}\n \n );\n } else {\n return null;\n }\n })}\n
\n );\n };\n\n const formatLog = () => {\n const log = detail?.logs\n ?.map(\n (item) => `${zonedTimeFromUTC(item.dateTime, timeZone, dateTimeFormat)} - [${item.logLevel}] - ${item.text} \\n`,\n )\n .join('');\n\n setStructuredLogs(log);\n };\n\n useEffect(() => {\n formatLog();\n }, [detail.logs]);\n\n const textareaInputRef = useCallback(\n (node) => {\n if (node !== null) {\n if (textareaScrolled) {\n setScrollHeight(node.scrollHeight);\n node.scrollTop = scrollHeight;\n } else {\n node.scrollTop = 0;\n }\n }\n },\n [textareaScrolled, scrollHeight],\n );\n\n return (\n
\n \n \n Timezone: {timeZone}\n Job Detail: {detail.taskId}\n id: {detail.id}\n \n \n \n {displayBlock(detail)}\n\n textareaInputRef(node)}\n className={classes.textarea}\n defaultValue={structuredLogs}\n />\n
\n );\n};\n\nexport default JobDetail;\n","import {\n FilteringState,\n GroupingState,\n IntegratedFiltering,\n IntegratedGrouping,\n IntegratedSorting,\n SortingState,\n} from '@devexpress/dx-react-grid';\nimport {\n ColumnChooser,\n DragDropProvider,\n Grid,\n GroupingPanel,\n TableColumnVisibility,\n TableFilterRow,\n TableGroupRow,\n TableHeaderRow,\n Toolbar,\n VirtualTable,\n} from '@devexpress/dx-react-grid-material-ui';\nimport { FormControlLabel, Grid as MUIGrid, Paper, Switch } from '@material-ui/core';\nimport { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { executeJobQuery, fetchLogs } from '../../api';\nimport Loading from '../../common/Loading/Loading';\nimport { DefaultColumnsTypeProvider } from '../../common/Table';\nimport { calcTimeDifference, zonedTimeFromUTC } from '../../utils/Utils';\nimport { DateFilter } from '../../common/DateFilter/DateFilter';\nimport { Cell, dateGroupCriteria, GroupCellContent } from './helpers/helpers';\nimport JobDetail from './helpers/JobDetail';\nimport { JobPanelStyles } from './styles';\nimport JobListProps, { JobData } from './types';\nimport { DateProps } from '../../common/types';\n\nconst DEFAULT_COLUMNS = [\n { title: 'Task Id', name: 'taskId' },\n { title: 'Status', name: 'status', width: 80 },\n { title: 'Account ID', name: 'accountId' },\n { title: 'Host Id', name: 'hostId' },\n { title: 'Duration', name: 'duration' },\n { title: 'Delay', name: 'delay' },\n { title: 'Requested', name: 'requested' },\n { title: 'Started', name: 'started' },\n { title: 'Finished', name: 'finished' },\n];\n\nconst NOTIFICATION_HUB = '/notificationhub';\n\nconst JobList = (props: JobListProps) => {\n const { dataSources, token, disabledColumns, parameters, startTimeUtc, dateTimeFormat, timeZone } = props;\n const initialDateState = {\n from: new Date(startTimeUtc).toISOString(),\n to: new Date().toISOString(),\n };\n const initialJobData = {\n id: '',\n taskId: '',\n accountId: '',\n status: '',\n hostId: '',\n duration: '',\n delay: '',\n requested: '',\n started: '',\n finished: '',\n progress: 0,\n connectionJobLog: '',\n };\n\n const [job, setJob] = useState(initialJobData);\n const classes = JobPanelStyles(job?.id)();\n const [jobsData, setJobsData] = useState([]);\n const [loading, setLoading] = useState(true);\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\n const [textareaScrolled, setTextareaScrolled] = useState(true);\n const [date, setDate] = useState(initialDateState);\n const [selectedRow, setSelectedRow] = useState('');\n const [tableColumnExtensions] = useState([{ columnName: 'status', width: 120 }]);\n const latestJobs = useRef(null);\n\n latestJobs.current = jobsData;\n\n const [defaultColumnsNameArray] = useState(DEFAULT_COLUMNS.map((column) => column.name));\n\n const [tableGroupColumnExtension] = useState([\n { columnName: 'requested', showWhenGrouped: true },\n { columnName: 'started', showWhenGrouped: true },\n { columnName: 'finished', showWhenGrouped: true },\n ]);\n\n const [integratedGroupingColumnExtensions] = useState([\n { columnName: 'requested', criteria: dateGroupCriteria },\n { columnName: 'started', criteria: dateGroupCriteria },\n { columnName: 'finished', criteria: dateGroupCriteria },\n ]);\n\n const fetchJobList = () => {\n setLoading(true);\n\n const query = [\n {\n item: 'Requested',\n queryOperator: 'GreaterThan',\n value: date.from ? date.from : initialDateState.from,\n },\n {\n item: 'Requested',\n queryOperator: 'LessThan',\n value: date.to ? date.to : initialDateState.to,\n },\n ];\n\n executeJobQuery(dataSources, token, query).subscribe(\n (res) => {\n const rawJobs = res.map((s: { data }) => {\n const { id, taskId, hostId, accountId, status } = s.data;\n\n // Mapping to JobData.\n const dataMapping = {\n id,\n taskId,\n hostId,\n accountId,\n status,\n progress: s.data.progress || 0,\n requested: s.data.requested ? zonedTimeFromUTC(s.data.requested, timeZone, dateTimeFormat) : '',\n started: s.data.started ? zonedTimeFromUTC(s.data.started, timeZone, dateTimeFormat) : '',\n finished: s.data.finished ? zonedTimeFromUTC(s.data.finished, timeZone, dateTimeFormat) : '',\n duration: calcTimeDifference(s.data.started, s.data.finished),\n delay: calcTimeDifference(s.data.requested, s.data.started),\n connectionJobLog: s.data.connectionJobLog || '',\n };\n\n if (s.data.parameters) {\n for (const key of Object.keys(s.data.parameters)) {\n dataMapping[key] = s.data.parameters[key];\n }\n }\n\n return dataMapping;\n });\n\n setJobsData(rawJobs);\n\n setLoading(false);\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const parameterHeader = parameters\n ? parameters.reduce(\n (acc, cur) => [\n ...acc,\n {\n title: cur.label,\n name: cur.parameter,\n },\n ],\n [],\n )\n : [];\n\n const [columns] = useState(DEFAULT_COLUMNS.concat(parameterHeader));\n\n const expandWithData = (row) => {\n const {\n id = '',\n taskId = '',\n accountId = '',\n status = '',\n hostId = '',\n duration = '',\n delay = '',\n requested = '',\n started = '',\n finished = '',\n progress = 0,\n connectionJobLog = '',\n } = row;\n\n if (job.id === id) {\n setJob(initialJobData);\n setSelectedRow('');\n } else {\n setLoading(true);\n setSelectedRow(id);\n const query = [\n {\n Item: 'Tag',\n Value: id,\n QueryOperator: 'Equal',\n },\n ];\n\n const sources = dataSources.map((item) => ({\n host: item.host,\n connection: item.connectionJobLog,\n }));\n\n fetchLogs(sources, token, query).subscribe(\n (res) => {\n const logs = res.map((item) => item.data);\n\n setJob({\n id,\n taskId,\n accountId,\n status,\n hostId,\n duration,\n delay,\n requested,\n started,\n finished,\n progress,\n connectionJobLog,\n logs,\n });\n\n setLoading(false);\n },\n (error) => {\n console.log(error);\n },\n );\n }\n };\n\n const closeTab = () => {\n setJob(initialJobData);\n };\n\n const clearDateFilter = () => {\n setDate(initialDateState);\n };\n\n useEffect(() => fetchJobList(), [date]);\n\n const TableRow = (props: any) => (\n expandWithData(props.tableRow.row)}\n />\n );\n\n const ToolbarRootComponent = (props: any) => (\n
\n
{props.children}
\n setDate(date)}\n onClearDateFilter={clearDateFilter}\n >\n \n setTextareaScrolled(!textareaScrolled)}\n color=\"primary\"\n name=\"textareaView\"\n inputProps={{ 'aria-label': 'textareaView checkbox' }}\n />\n }\n label=\"Log scrolled down\"\n />\n \n \n
\n );\n\n const jobUpdated = (job) => {\n const dataUpdated = JSON.parse(job.data);\n const jobs = [...latestJobs.current];\n\n console.log({ dataUpdated });\n\n const updatedJob = jobs.map((job) =>\n job.id === dataUpdated.Id\n ? {\n ...job,\n started:\n job.started || dataUpdated.Started ? zonedTimeFromUTC(dataUpdated.Started, timeZone, dateTimeFormat) : '',\n finished:\n job.finished || dataUpdated.Finished\n ? zonedTimeFromUTC(dataUpdated.Finished, timeZone, dateTimeFormat)\n : '',\n hostId: dataUpdated.HostId,\n status: dataUpdated.Status,\n duration:\n job.duration ||\n (dataUpdated.Started &&\n dataUpdated.Finished &&\n calcTimeDifference(dataUpdated.Started.split('.')[0], dataUpdated.Finished.split('.')[0])),\n delay:\n job.delay ||\n (dataUpdated.Started &&\n calcTimeDifference(dataUpdated.Requested.split('.')[0], dataUpdated.Started.split('.')[0])),\n progress: dataUpdated.Progress || 0,\n }\n : job,\n );\n\n setJobsData(updatedJob);\n };\n\n const jobAdded = (job) => {\n const dataAdded = JSON.parse(job.data);\n const jobs = [...latestJobs.current];\n\n console.log({ dataAdded });\n\n const addedJob = {\n taskId: dataAdded.TaskId,\n id: dataAdded.Id,\n hostId: dataAdded.HostId,\n accountId: dataAdded.AccountId,\n ScenarioId: dataAdded.Parameters?.ScenarioId,\n priority: dataAdded.Priority,\n requestedUtc: dataAdded.Requested,\n requested: dataAdded.Requested ? zonedTimeFromUTC(dataAdded.Requested, timeZone, dateTimeFormat) : '',\n status: dataAdded.Status,\n connectionJobLog: dataAdded.ConnectionJobLog || '',\n progress: dataAdded.Progress || 0,\n };\n\n jobs.push(addedJob);\n setJobsData(jobs);\n };\n\n const connectToSignalR = async () => {\n // Open connections\n try {\n await dataSources.forEach((source) => {\n if (!source.host) {\n throw new Error('Host not provided.');\n }\n\n const connection = new HubConnectionBuilder()\n .withUrl(source.host + NOTIFICATION_HUB, {\n accessTokenFactory: () => token,\n })\n .configureLogging(LogLevel.Information)\n .withAutomaticReconnect()\n .build();\n\n connection\n .start()\n .then(() => {\n connection.on('JobUpdated', jobUpdated);\n connection.on('JobAdded', jobAdded);\n\n connection.invoke(\n 'AddJobFilter',\n source.connection,\n [{ Item: 'Priority', QueryOperator: 'GreaterThan', Value: -1 }], // ability to change condition?\n );\n })\n .catch((e) => console.log('Connection failed: ', e));\n });\n } catch (err) {\n console.log('SignalR connection failed: ', err);\n }\n };\n\n useEffect(() => {\n const handleResize = () => {\n setWindowHeight(window.innerHeight);\n };\n\n window.addEventListener('resize', handleResize);\n\n connectToSignalR();\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return (\n
\n \n {loading && }\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\nexport { JobList, JobListProps };\n","import { makeStyles, Theme } from '@material-ui/core/styles';\n\nexport const TreeViewStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n typography: {\n display: 'flex',\n padding: '6px 4px',\n textAlign: 'center',\n justifyContent: 'space-evenly',\n position: 'relative',\n alignItems: 'center',\n fontSize: '0.8rem',\n },\n checkbox: {\n padding: '6px 4px',\n },\n}));\n","import { Checkbox, CircularProgress, Typography } from '@material-ui/core';\nimport { ChevronRight, KeyboardArrowDown } from '@material-ui/icons';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport TreeView from '@material-ui/lab/TreeView';\nimport React, { useEffect, useState } from 'react';\nimport { TreeViewStyles } from './styles';\nimport { TreeViewProps } from './types';\n\nconst DHITreeView = ({ list, onExpand, onChecked }: TreeViewProps) => {\n const [selected, setSelected] = useState([]);\n const [expanded, setExpanded] = useState([]);\n const classes = TreeViewStyles();\n\n const handleExpanded = (event, nodeIds) => {\n const difference = nodeIds.filter((x) => !expanded.includes(x));\n setExpanded(nodeIds);\n\n if (difference.length > 0) {\n onExpand(difference[0]);\n }\n };\n\n const checkBoxClicked = (event, checked, id) => {\n const existing = selected.some((item) => item === id);\n\n if (existing) {\n const removeSelection = selected.filter((item) => item !== id);\n setSelected([...removeSelection]);\n } else {\n setSelected([...selected, id]);\n onExpand(event.target.id);\n }\n };\n\n const structureLevel = (treeViewList) => {\n const elements = [];\n\n treeViewList?.forEach((treeList, i) => {\n const { value, children } = treeList;\n\n if (i.length !== 0) {\n const label = (\n
\n {treeList.label === '' ? (\n \n ) : (\n <>\n {!children && (\n item === value)}\n className={classes.checkbox}\n onChange={(event, checked) => checkBoxClicked(event, checked, value)}\n />\n )}\n\n \n {treeList.label.replace('/', '')}\n \n \n )}\n
\n );\n\n elements.push(\n children && children.length > 0 ? (\n \n {structureLevel(children)}\n \n ) : (\n <>\n \n \n ),\n );\n } else if (children) {\n elements.push(structureLevel(children));\n }\n });\n\n return elements;\n };\n\n useEffect(() => {\n onChecked(selected);\n }, [selected]);\n\n return (\n }\n defaultExpandIcon={}\n expanded={expanded}\n >\n {structureLevel(list)}\n
\n );\n};\n\nexport default DHITreeView;\n","import { makeStyles, Theme } from '@material-ui/core/styles';\nimport DHITheme from '../../theme';\n\nexport const TimeseriesStyles = makeStyles((theme: Theme) => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n },\n paper: {\n display: 'flex',\n padding: '16px 0',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n justifyContent: 'space-evenly',\n position: 'relative',\n width: '100%',\n alignItems: 'center',\n },\n\n sidebar: {\n 'overflow': 'auto',\n\n '& p': {\n whiteSpace: 'nowrap',\n },\n },\n skeleton: {\n backgroundColor: DHITheme.palette.secondary.main,\n opacity: 0.2,\n },\n typography: {\n textAlign: 'center',\n },\n}));\n","import { Grid, Typography } from '@material-ui/core';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport { format } from 'date-fns';\nimport React, { useEffect, useState } from 'react';\nimport { fetchTimeseriesFullNames, fetchTimeseriesValues } from '../../api';\nimport { BaseChart } from '../../ECharts/BaseChart';\nimport DHITheme from '../../theme';\nimport { recursive } from '../../utils/Utils';\nimport TreeView from '../TreeView/TreeView';\nimport { TimeseriesStyles } from './styles';\nimport { TimeseriesProps } from './types';\nimport { DateFilter } from '../../common/DateFilter/DateFilter';\nimport { DateProps } from '../../common/types';\nimport { useWindowSize } from '@react-hook/window-size/';\n\nconst NAME_TEXT_STYLE = {\n padding: 12,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontSize: 15,\n};\n\nconst DATA_ZOOM = [\n {\n type: 'inside',\n },\n {\n type: 'slider',\n height: 40,\n bottom: 10,\n labelFormatter: (value) => format(value, 'dd MMM yyyy'),\n },\n];\n\nconst GRID = {\n bottom: 100,\n top: 80,\n};\n\nconst TEXT_STYLE = {\n width: '100%',\n color: DHITheme.palette.primary.main,\n fontWeight: 'bold',\n fontSize: window.innerHeight >= 1200 ? 24 : 18,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n};\n\nconst AXIS_LABEL = {\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontSize: 12,\n color: DHITheme.palette.primary.main,\n};\n\nconst X_AXIS = {\n name: 'Time',\n nameLocation: 'center',\n nameTextStyle: NAME_TEXT_STYLE,\n min: 'dataMin',\n axisLabel: AXIS_LABEL,\n};\n\nconst Y_AXIS = {\n name: '',\n nameLocation: 'center',\n nameTextStyle: NAME_TEXT_STYLE,\n axisLabel: AXIS_LABEL,\n};\n\nconst LEGEND_STYLE = {\n backgroundColor: 'rgba(255,255,255,1)',\n padding: 8,\n borderRadius: 5,\n shadowColor: 'rgba(0, 0, 0, 0.25)',\n shadowBlur: 5,\n shadowOffsetX: 3,\n shadowOffsetY: 3,\n};\n\nconst TimeseriesExplorer = ({\n token,\n dataSources,\n title,\n legendPosition = 'right',\n legendPositionOffset,\n startTimeUtc,\n dateTimeFormat,\n timeZone,\n}: TimeseriesProps) => {\n const initialDateState = {\n from: new Date(startTimeUtc).toISOString(),\n to: new Date().toISOString(),\n };\n\n const [width, height] = useWindowSize();\n const classes = TimeseriesStyles();\n const [date, setDate] = useState(initialDateState);\n const [list, setList] = useState([]);\n const [loading, setLoading] = useState(false);\n const [ids, setIds] = useState([]);\n\n const [options, setOptions] = useState({\n title: {\n text: title,\n left: 'center',\n textStyle: TEXT_STYLE,\n },\n grid: GRID,\n dataZoom: DATA_ZOOM,\n legend: {\n ...LEGEND_STYLE,\n top: legendPosition === 'left' ? 90 : 35,\n left: legendPosition === 'left' ? legendPositionOffset ?? 150 : undefined,\n right: legendPosition === 'right' ? legendPositionOffset ?? 60 : undefined,\n align: legendPosition,\n },\n xAxis: X_AXIS,\n yAxis: Y_AXIS,\n tooltip: {},\n series: [],\n });\n\n const clearDateFilter = () => {\n setDate(initialDateState);\n };\n\n const fetchTopLevelTreeView = (group = '') => {\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\/$/, '')).subscribe(\n (res) => {\n const data = res.map((d) => ({\n value: d,\n label: d,\n topLevel: true,\n ...(d.slice(-1) === '/' && {\n children: [\n {\n value: '',\n label: '',\n },\n ],\n }),\n }));\n\n setList(data);\n },\n (err) => console.log(err),\n );\n };\n\n const addChildren = (childrenList, group) => {\n return childrenList.map((child) => ({\n value: child,\n label: child.replace(group, ''),\n ...(child.slice(-1) === '/' && {\n children: [\n {\n value: '',\n label: '',\n },\n ],\n }),\n }));\n };\n\n const handleOnExpand = (group) => {\n setLoading(true);\n\n if (group.slice(-1) === '/' || group === '') {\n fetchTimeseriesFullNames(dataSources, token, group.replace(/\\/$/, '')).subscribe(\n (res) => {\n const children = addChildren(res, group);\n list.map((item) => recursive(item, group, children));\n\n setList(list);\n setLoading(false); // in place to forceUpdate after the recursive fn updates the object.\n },\n (error) => console.log(error),\n );\n }\n };\n\n useEffect(() => {\n dataSources[0].ids = ids;\n dataSources[0].from = date.from;\n dataSources[0].to = date.to;\n\n fetchTimeseriesValues(dataSources, token).subscribe((res) => {\n const series = res\n .map((item) => {\n if (item.data.length) {\n return {\n name: item.id,\n data: item.data.map((d) => [new Date(d[0]).getTime(), d[1]]),\n type: 'line',\n symbol: 'diamond',\n };\n } else {\n return null;\n }\n })\n .filter((item) => item);\n\n const updatedOptions = {\n ...options,\n xAxis: {\n ...options.xAxis,\n axisLabel: {\n ...options.xAxis.axisLabel,\n formatter: (value) => format(value, 'dd MMM yyyy'),\n },\n },\n yAxis: {\n ...options.yAxis,\n axisLabel: {\n ...options.yAxis.axisLabel,\n formatter: (value) => value,\n },\n },\n legend: {\n ...options.legend,\n data: series.map((item) => item.name),\n },\n series,\n };\n\n setOptions(updatedOptions);\n });\n }, [date, ids]);\n\n useEffect(() => {\n fetchTopLevelTreeView();\n }, []);\n\n return (\n
\n \n \n handleOnExpand(expand)}\n onChecked={(checked) => setIds(checked)}\n />\n \n \n {options.series.length > 0 ? (\n setDate(date)}\n onClearDateFilter={clearDateFilter}\n >\n height - 100} options={options} notMerge />\n \n ) : (\n <>\n \n No Timeseries Selected or no data available\n \n \n \n \n )}\n \n \n
\n );\n};\n\nexport { TimeseriesExplorer, TimeseriesProps };\n","import { TableFilterRow, VirtualTable } from '@devexpress/dx-react-grid-material-ui';\nimport { FormControl, InputLabel, MenuItem, Select, TableCell, Tooltip } from '@material-ui/core';\nimport { blueGrey, red, yellow } from '@material-ui/core/colors';\nimport {\n BugReportOutlined,\n ErrorOutlineOutlined,\n HelpOutline,\n InfoOutlined,\n NewReleases,\n WarningOutlined,\n} from '@material-ui/icons';\nimport React from 'react';\n\nexport const LogLevelFilterCell = ({ filter, onFilter, column }) => (\n \n \n \n Select\n \n \n onFilter(e.target.value ? { value: e.target.value, operation: 'contains', columnType: column.type } : null)\n }\n >\n All\n Debug\n Information\n Error\n Warning\n Critical\n \n \n \n);\n\nexport const FilterCellRow = (props) => {\n const { column } = props;\n\n if (column.name === 'logLevel') {\n return ;\n }\n\n return ;\n};\n\nexport const CustomCell = (props: any) => {\n const { value, row, column } = props;\n let cellIcon;\n\n if (column.name === 'logLevel') {\n switch (row.logLevel) {\n case 'Debug':\n cellIcon = ;\n break;\n case 'Information':\n cellIcon = ;\n break;\n case 'Error':\n cellIcon = ;\n break;\n case 'Warning':\n cellIcon = ;\n break;\n case 'Critical':\n cellIcon = ;\n break;\n default:\n cellIcon = ;\n break;\n }\n\n return (\n \n {cellIcon}\n \n );\n } else if (column.name === 'text') {\n return (\n \n ') }}\n />\n \n );\n } else {\n return ;\n }\n};\n","import { makeStyles, Theme } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = (theme: Theme) => ({\n table: {\n height: 350,\n },\n wrapper: {\n display: 'flex',\n position: 'relative',\n // overflow: loadingDetail ? 'hidden' : 'visible',\n },\n});\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import {\n FilteringState,\n GroupingState,\n IntegratedFiltering,\n IntegratedGrouping,\n IntegratedSorting,\n SortingState,\n} from '@devexpress/dx-react-grid';\nimport {\n ColumnChooser,\n Grid,\n TableColumnVisibility,\n TableFilterRow,\n TableHeaderRow,\n Toolbar,\n VirtualTable,\n} from '@devexpress/dx-react-grid-material-ui';\nimport { Paper } from '@material-ui/core';\nimport { format, utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { fetchLogs } from '../../api';\nimport Loading from '../../common/Loading/Loading';\nimport { DefaultColumnsTypeProvider } from '../../common/Table';\nimport { CustomCell, FilterCellRow } from './helpers';\nimport LogListProps, { LogData } from './types';\nimport useStyles from './useStyles';\n\nconst DEFAULT_COLUMNS = [\n { title: 'Time', name: 'dateTime' },\n { title: 'ID', name: 'id' },\n { title: 'Level', name: 'logLevel' },\n { title: 'Machine Name', name: 'machineName' },\n { title: 'Source', name: 'source' },\n { title: 'Tag', name: 'tag' },\n { title: 'Text', name: 'text' },\n];\n\nconst LogList = (props: LogListProps) => {\n const [columns] = useState(DEFAULT_COLUMNS);\n const classes = useStyles();\n const {\n frequency,\n dataSources,\n disabledColumns,\n token,\n startTimeUtc,\n dateTimeFormat,\n timeZone,\n translations,\n onReceived,\n } = props;\n const [startDateUtc, setStartDateUtc] = useState();\n const [logsData, setLogsData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\n const [defaultColumnsNameArray] = useState(DEFAULT_COLUMNS.map((column) => column.name));\n const [tableColumnExtensions] = useState([\n { columnName: 'dateTime', width: 200 },\n { columnName: 'logLevel', width: 100 },\n { columnName: 'source', width: 180 },\n { columnName: 'text', wordWrapEnabled: true },\n ]);\n\n const onLogsRecieved = (data: LogData[]) => {\n return data.reduce(function (obj, v) {\n obj[v.logLevel] = (obj[v.logLevel] || 0) + 1;\n\n return obj;\n }, {});\n };\n\n const data = useMemo(() => {\n setLoading(false);\n\n if (onReceived) {\n onReceived(onLogsRecieved(logsData));\n }\n\n return logsData;\n }, [logsData]);\n\n const fetchLogsList = (dateTimeValue: string) => {\n setLoading(true);\n const query = [{ Item: 'DateTime', Value: dateTimeValue, QueryOperator: 'GreaterThan' }];\n\n fetchLogs(dataSources, token, query).subscribe(\n (res) => {\n console.log(res);\n const rawLogs = res.map((s: { data: LogData }) => {\n s.data.dateTime = format(utcToZonedTime(s.data.dateTime, timeZone), dateTimeFormat);\n\n return s.data;\n });\n\n setLogsData(rawLogs.concat(logsData));\n\n const utcDate = zonedTimeToUtc(new Date(), timeZone);\n const utcDateFormated = utcDate.toISOString().split('.').shift();\n\n setStartDateUtc(utcDateFormated);\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n useEffect(() => {\n function handleResize() {\n setWindowHeight(window.innerHeight);\n }\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n });\n\n useEffect(() => {\n fetchLogsList(startTimeUtc);\n }, []);\n\n useEffect(() => {\n let interval: any;\n\n if (startDateUtc) {\n interval = setInterval(() => fetchLogsList(startDateUtc), frequency * 1000);\n }\n\n return () => {\n clearInterval(interval);\n };\n }, [startDateUtc]);\n\n return (\n
\n \n {loading && }\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\nexport { LogListProps, LogList };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n },\n});\n\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { clone } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport {\n cancelJob,\n deleteScenario,\n executeJob,\n fetchScenario,\n fetchScenarios,\n fetchScenariosByDate,\n postScenario,\n updateScenario,\n} from '../../api';\nimport { JobParameters } from '../../api/types';\nimport GeneralDialog from '../../common/GeneralDialog/GeneralDialog';\nimport GeneralDialogProps from '../../common/GeneralDialog/types';\nimport { checkConditions, getObjectProperty, setObjectProperty } from '../../utils/Utils';\nimport { ScenarioListOLD } from '../ScenarioListOLD/ScenarioList';\nimport { MenuItem, QueryDates, ScenarioOLD } from '../types';\nimport ScenariosOLDProps from './types';\nimport useStyles from './useStyles';\n\nconst ScenariosOLD = (props: ScenariosOLDProps) => {\n const {\n host,\n token,\n scenarioConnection,\n nameField,\n jobConnection,\n jobParameters,\n module,\n dataFilterbyProperty,\n taskId,\n hostGroup,\n descriptionFields,\n extraFields,\n menuItems,\n selectedScenarioId,\n showDate,\n showHour,\n showMenu,\n showStatus,\n status,\n queryDates,\n frequency = 10,\n onContextMenuClick,\n onScenarioSelected,\n onScenarioReceived,\n onScenariosReceived,\n addScenario,\n translations,\n timeZone,\n } = props;\n\n const [dialog, setDialog] = useState();\n const [scenarios, setScenarios] = useState();\n const [scenario, setScenario] = useState();\n const [loadedScenario, setLoadedScenario] = useState();\n const classes = useStyles();\n\n useEffect(() => {\n let interval: ReturnType;\n\n if (queryDates) {\n fetchScenariosByDateList(queryDates);\n\n interval = setInterval(() => fetchScenariosByDateList(queryDates), frequency * 1000);\n } else {\n fetchScenariosList();\n\n interval = setInterval(() => fetchScenariosList(), frequency * 1000);\n }\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n useEffect(() => {\n if (addScenario !== scenario) {\n let newScenario: ScenarioOLD;\n\n if (addScenario!.data) {\n newScenario = clone(addScenario) as ScenarioOLD;\n\n newScenario = {\n ...newScenario,\n data: addScenario!.data,\n };\n } else {\n newScenario = {\n data: JSON.stringify(addScenario),\n };\n }\n\n setScenario(newScenario);\n onAddScenario(newScenario);\n }\n }, [addScenario]);\n\n const fetchScenariosByDateList = (queryDates: QueryDates) => {\n fetchScenariosByDate(\n {\n host,\n connection: scenarioConnection,\n from: queryDates.from,\n to: queryDates.to,\n dataSelectors: [\n nameField,\n ...descriptionFields!.map((descriptionField) => descriptionField.field),\n ...extraFields!.map((descriptionField) => descriptionField.field),\n ],\n },\n token,\n ).subscribe(\n (res) => {\n const rawScenarios = res.map((s: { data: string }) => {\n s.data = s.data ? JSON.parse(s.data) : s.data;\n\n return s;\n });\n\n const newScenarios = rawScenarios.filter((scenario) => checkConditions(scenario, dataFilterbyProperty));\n\n setScenarios(newScenarios);\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const fetchScenariosList = () => {\n fetchScenarios(\n {\n host,\n connection: scenarioConnection,\n dataSelectors: [\n nameField,\n ...descriptionFields!.map((descriptionField) => descriptionField.field),\n ...extraFields!.map((descriptionField) => descriptionField.field),\n ],\n },\n token,\n ).subscribe(\n (res) => {\n const rawScenarios = res.map((s: { data: string }) => {\n s.data = s.data ? JSON.parse(s.data) : s.data;\n\n return s;\n });\n\n const newScenarios = rawScenarios.filter((scenario) => checkConditions(scenario, dataFilterbyProperty));\n\n setScenarios(newScenarios);\n\n if (onScenariosReceived) {\n onScenariosReceived(newScenarios);\n }\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const onAddScenario = (newScenario: ScenarioOLD) => {\n if (newScenario) {\n postScenario(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n newScenario,\n ).subscribe((res) => res && fetchScenariosList());\n }\n };\n\n const onExecuteScenario = (scenario: ScenarioOLD, menuItem: MenuItem) => {\n closeDialog();\n\n // Define Job Parameter with ScenarioId\n const parameters = {\n ScenarioId: scenario.id,\n } as JobParameters;\n\n // Append Job Parameters from Menu Item\n if (menuItem.jobParameters) {\n for (const key in menuItem.jobParameters) {\n parameters[key] = getObjectProperty(scenario, menuItem.jobParameters[key]);\n }\n }\n\n // Append Job Parameters Props\n Object.assign(parameters, jobParameters);\n\n executeJob(\n {\n host,\n connection: menuItem.connection || jobConnection,\n },\n token,\n menuItem.taskId || taskId,\n parameters,\n menuItem.hostGroup || hostGroup,\n );\n };\n\n const onTerminateScenario = (scenario: ScenarioOLD, menuItem: MenuItem) => {\n closeDialog();\n\n cancelJob(\n {\n host,\n connection: menuItem.connection || jobConnection,\n },\n token,\n scenario.lastJobId,\n ).subscribe(\n (res) =>\n res &&\n updateScenario(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n {\n id: scenario.id,\n lastJobId: res.id,\n data: JSON.stringify(scenario.data),\n },\n ).subscribe((res) => res && fetchScenariosList()),\n );\n };\n\n const onCloneScenario = (scenario: ScenarioOLD) => {\n closeDialog();\n const clonedScenario = {\n data: scenario.data,\n };\n const clonedNamed = `Clone of ${getObjectProperty(scenario.data, nameField)}`;\n setObjectProperty(clonedScenario.data, nameField, clonedNamed);\n\n clonedScenario.data = JSON.stringify(clonedScenario.data);\n\n postScenario(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n clonedScenario,\n ).subscribe((res) => res && fetchScenariosList());\n };\n\n const getScenario = (id: string, resultCallback: (data: any) => void) => {\n fetchScenario(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n id,\n ).subscribe(\n (res) => {\n res.data = res.data ? JSON.parse(res.data) : res.data;\n\n resultCallback(res);\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const executeDialog = (scenario: ScenarioOLD, menuItem: MenuItem) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n dialogId: 'execute',\n showDialog: true,\n title: `${menuItem.label} ${job}`,\n message:\n translations && translations.executeConfirmation\n ? translations.executeConfirmation.replace('%job%', job)\n : `This will start a new job in the background. The status will change after job completion. Are you sure you want to execute ${job}?`,\n cancelLabel: translations?.cancelLabel || 'Cancel',\n confirmLabel: translations?.confirmLabel || 'Confirm',\n onConfirm: () => onExecuteScenario(scenario, menuItem),\n });\n };\n\n const terminateDialog = (scenario: ScenarioOLD, menuItem: MenuItem) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n dialogId: 'terminate',\n showDialog: true,\n title: `${menuItem.label} ${job}`,\n message:\n translations && translations.terminateConfirmation\n ? translations.terminateConfirmation.replace('%job%', job)\n : `This will cancel the job currently executing. The status will change after job cancelation. Are you sure you want to terminate ${job}?`,\n cancelLabel: translations?.cancelLabel || 'Cancel',\n confirmLabel: translations?.confirmLabel || 'Confirm',\n onConfirm: () => onTerminateScenario(scenario, menuItem),\n });\n };\n\n const cloneDialog = (scenario: ScenarioOLD) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n dialogId: 'clone',\n showDialog: true,\n title: `${translations?.cloneTitle || 'Clone'} ${job}`,\n message:\n translations && translations.cloneConfirmation\n ? translations.cloneConfirmation.replace('%job%', job)\n : `This will start a new job in the background. You can delete this cloned scenario later. Are you sure you want to clone ${job}?`,\n cancelLabel: translations?.cancelLabel || 'Cancel',\n confirmLabel: translations?.confirmLabel || 'Confirm',\n onConfirm: () => onCloneScenario(scenario),\n });\n };\n\n const deleteDialog = (scenario: ScenarioOLD) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n dialogId: 'delete',\n showDialog: true,\n title: `${translations?.deleteTitle || 'Delete'} ${job}`,\n message:\n translations && translations.deleteConfirmation\n ? translations.deleteConfirmation.replace('%job%', job)\n : `This will delete the selected scenario from the list. After it is deleted you cannot retrieve the data. Are you sure you want to delete ${job}?`,\n cancelLabel: translations?.cancelLabel || 'Cancel',\n confirmLabel: translations?.confirmLabel || 'Confirm',\n onConfirm: () => onDeleteScenario(scenario),\n });\n };\n\n const onDeleteScenario = (scenario: ScenarioOLD) => {\n closeDialog();\n\n deleteScenario(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n scenario.id,\n ).subscribe((res) => res.ok && fetchScenariosList());\n };\n\n const closeDialog = () => {\n setDialog({\n ...dialog,\n showDialog: false,\n });\n };\n\n const onContextMenuClickHandler = (menuItem: MenuItem, scenario: ScenarioOLD) => {\n getScenario(scenario.id!, (res) => {\n switch (menuItem.id) {\n case 'execute':\n return executeDialog(res, menuItem);\n case 'delete':\n return deleteDialog(res);\n case 'clone':\n return cloneDialog(res);\n case 'terminate':\n return terminateDialog(res, menuItem);\n default:\n return onContextMenuClick(menuItem, res);\n }\n });\n };\n\n const onScenarioSelectedHandler = (scenario: ScenarioOLD) => {\n if (!loadedScenario || scenario.id !== loadedScenario.id) {\n getScenario(scenario.id!, (res) => {\n onScenarioReceived(res);\n setLoadedScenario(res);\n });\n\n onScenarioSelected(scenario);\n } else {\n onScenarioSelected(loadedScenario);\n onScenarioReceived(loadedScenario);\n }\n };\n\n let printedScenarios = null;\n let printedDialog = null;\n\n if (scenarios) {\n printedScenarios = (\n \n );\n }\n\n if (dialog) {\n printedDialog = (\n \n );\n }\n\n return (\n
\n {printedScenarios} {printedDialog}\n
\n );\n};\n\nexport { ScenariosOLDProps, ScenariosOLD };\n","import { tap } from 'rxjs/operators';\nimport { fetchUrl } from '../helpers';\n\n/**\n * /api/accounts/{id}\n * Gets an account with the specified identifier.\n * @param host\n * @param token\n * @param id\n */\nconst fetchAccount = (host: string, token: string, id: string) =>\n fetchUrl(`${host}/api/accounts/${id}`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n/**\n * /api/accounts\n * Gets a list of all accounts.\n * @param host\n * @param token\n */\nconst fetchAccounts = (host: string, token: string) =>\n fetchUrl(`${host}/api/accounts`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n/**\n * /api/accounts/{id}\n * Deletes the account with the specified identifier.\n * @param host\n * @param token\n * @param username\n */\nconst deleteAccount = (host: string, token: string, username: string) =>\n fetchUrl(`${host}/api/accounts/${username}`, {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('deleted account', res)));\n\n/**\n * /api/accounts\n * Updates an existing account.\n * NOTE: The password can be omitted from an update, but all other properties must be present. Otherwise, they will be set to null.\n * @param host\n * @param token\n * @param data\n */\nconst updateAccount = (host: string, token: string, data: Record) =>\n fetchUrl(`${host}/api/accounts`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).pipe(tap((json) => console.log('updated user', json)));\n\n/**\n * /api/accounts\n * Adds a new account.\n * NOTE: Adding a new account automatically activates the account.\n * @param host\n * @param token\n * @param data\n */\nconst createAccount = (host: string, token: string, data: Record) =>\n fetchUrl(`${host}/api/accounts`, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n });\n\n/**\n * /api/accounts/passwordreset\n * Generates a one-time token that allows for a password reset.\n * NOTE: Generates a one-time token that allows for a password reset for the account identified by the given email address\n or account ID. A password reset link with the generated reset token is sent to the user account in an email.\n * @param host \n * @param user \n * @param token \n */\nconst resetPassword = (host: string, mailBody: string, emailAddress: string) =>\n fetchUrl(`${host}/api/accounts/passwordreset?mailBody=${mailBody}`, {\n method: 'POST',\n body: `\"${emailAddress}\"`,\n }).pipe(tap((res) => console.log('password reset', res)));\n\n/**\n * /api/accounts/password\n * Updates the password for the user account associated with the given token.\n * NOTE: The necessary password reset token must be obtained from e.g. an email or a mobile text message.\n * @param host\n * @param token\n * @param passwordToken\n * @param newPassword\n */\nconst updatePassword = (host: string, token: string, newPassword: string) =>\n fetchUrl(`${host}/api/accounts/password?token=${token}`, {\n method: 'PUT',\n body: `\"${newPassword}\"`,\n }).pipe(tap((res) => console.log('password reset', res)));\n\n/**\n * /api/accounts/password\n * Updates the password for the user account associated with the given token.\n * @param host\n * @param token\n * @param accountToken\n */\nconst activateAccount = (host: string, token: string, accountToken: string) =>\n fetchUrl(`${host}/api/accounts/password/token=${accountToken}`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('account activiated', res)));\n\nexport {\n resetPassword,\n fetchAccounts,\n deleteAccount,\n updateAccount,\n createAccount,\n fetchAccount,\n updatePassword,\n activateAccount,\n};\n","import { tap } from 'rxjs/operators';\nimport { Token } from '../../Auth/types';\nimport { DEFAULT_OPTIONS, fetchUrl } from '../helpers';\nimport { User } from '../types';\n\n/**\n * /api/tokens\n * Creates a JWT authorization token.\n * @param host\n * @param user\n */\nconst fetchToken = (host: string, user: User) => {\n return fetchUrl(`${host}/api/tokens`, {\n method: 'POST',\n body: JSON.stringify(user),\n });\n // .pipe(\n // tap(\n // (res) => console.log('token res', res),\n // (error) => console.log(error),\n // ),\n // );\n};\n\n/**\n * /api/tokens/validation\n * Performs validation of token.\n * @param host\n * @param token\n */\nconst validateToken = (host: string, token: string) => {\n return fetch(`${host}/api/tokens/validation`, {\n ...DEFAULT_OPTIONS,\n method: 'POST',\n body: JSON.stringify(token),\n });\n};\n\nexport { fetchToken, validateToken };\n","import { forkJoin } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { DataSource, JobParameters, JobQuery } from '../../api/types';\nimport { dataObjectToArray, queryProp } from '../../utils/Utils';\nimport { fetchUrl } from '../helpers';\n\n/**\n * /api/jobs/{connectionId}/query\n * @param dataSource\n * @param token\n * @param query array of objects { item: string, queryOperator: string, value: string}\n *\n * Gets all the jobs meeting the criteria specified by the given query.\n */\nconst executeJobQuery = (dataSources: DataSource | DataSource[], token: string, query: JobParameters[]) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.map((source: DataSource) =>\n fetchUrl(`${source.host}/api/jobs/${source.connection}/query`, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(query),\n }).pipe(\n tap(\n (res) => {\n console.log('job query executed', res);\n },\n (error) => {\n console.log(error);\n },\n ),\n map((job) => {\n return dataObjectToArray(job).sort((a, b) => {\n return new Date(b.data.requested).getTime() - new Date(a.data.requested).getTime();\n });\n }),\n ),\n );\n\n return forkJoin(requests).pipe(map((job) => job.flat()));\n};\n\n/**\n * /api/jobs/{connectionId}\n * Requests a job execution.\n * @param dataSource\n * @param token\n * @param taskId\n * @param parameters\n * @param hostGroup\n */\nconst executeJob = (\n dataSource: DataSource,\n token: string,\n taskId: string,\n parameters: JobParameters,\n hostGroup?: string,\n) => {\n const body: Partial> = { taskId, parameters };\n\n if (hostGroup) {\n body.hostGroup = hostGroup;\n }\n\n return fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}`, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n }).pipe(\n tap(\n (res) => {\n console.log('job executed', res);\n },\n (error) => {\n console.log(error);\n },\n ),\n );\n};\n\n/**\n * /api/jobs/{connectionId}/{id}/cancel\n * Requests cancellation of the job with the specified job identifier.\n * @param dataSource\n * @param token\n * @param id\n */\nconst cancelJob = (dataSource: DataSource, token: string, id: any) =>\n fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}/${id}/cancel`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: '',\n }).pipe(tap((res) => console.log('job canceled', res)));\n\n/**\n * /api/jobs/{connectionId}/cancel\n * Requests cancellation of the jobs with the specified job identifiers.\n * @param dataSource\n * @param token\n * @param ids\n */\nconst cancelJobs = (dataSource: DataSource, token: string, ids: string) =>\n fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}/cancel`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: { ids },\n }).pipe(tap((res) => console.log('job canceled', res)));\n\n/**\n * /api/jobs/{connectionId}/{id}\n * Gets the job with the specified identifier.\n * @param dataSource\n * @param token\n * @param id\n */\nconst fetchJob = (dataSource: DataSource, token: string, id: string) =>\n fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}/${id}`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('job fetched executed', res)));\n\n/**\n * /api/jobs/{connectionId}\n * Gets all the jobs meeting the criteria specified by the given query string parameters.\n * @param dataSources\n * @param token\n * @param query\n */\nconst fetchJobs = (\n dataSources: DataSource | DataSource[],\n token: string,\n query: {\n account?: any;\n since: any;\n status?: any;\n task?: any;\n tag?: any;\n },\n) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.map((source: DataSource) =>\n fetchUrl(\n !query\n ? `${source.host}/api/jobs/${source.connection}`\n : `${source.host}/api/jobs/${source.connection}?account=${queryProp(query.account)}&since=${queryProp(\n query.since,\n )}&status=${queryProp(query.status)}&task=${queryProp(query.task)}&tag=${queryProp(query.tag)}`,\n {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n ).pipe(\n map((fc) => {\n fc.forEach((item) => (item.connectionJobLog = source.connectionJobLog));\n\n return dataObjectToArray(fc).sort((a, b) => {\n return new Date(b.data.requested).getTime() - new Date(a.data.requested).getTime();\n });\n }),\n ),\n );\n\n return forkJoin(requests).pipe(map((fc) => fc.flat()));\n};\n\n/**\n * /api/jobs/{connectionId}\n * Deletes all the jobs meeting the criteria specified by the given parameters.\n * NOTE: This endpoint if for system purposes only. You should never manually delete a job.\n * @param dataSource\n * @param token\n * @param id\n */\nconst deleteJob = (dataSource: DataSource, token: string, id: string) =>\n fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}/${id}`, {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('job deleted', res)));\n\n/**\n * /api/jobs/{connectionId}\n * Deletes all the jobs meeting the criteria specified by the given parameters.\n * NOTE: This endpoint if for system purposes only. You should never manually delete a job.\n * @param dataSource\n * @param token\n * @param query\n */\nconst deleteJobs = (dataSource: DataSource, token: string, query: JobQuery) =>\n fetchUrl(\n `${dataSource.host}/api/jobs/${dataSource.connection}?account=${query.account}&since=${query.since}&status=${query.status}&task=${query.task}&tag=${query.tag}`,\n {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n ).pipe(tap((res) => console.log('jobs deleted', res)));\n/**\n * /api/jobs/{connectionId}/last\n * Gets the last job meeting the criteria specified by the given parameters.\n * @param dataSource\n * @param token\n * @param query\n */\nconst fetchLastJob = (dataSource: DataSource, token: string, query: JobQuery) =>\n fetchUrl(\n `${dataSource.host}/api/jobs/${dataSource.connection}/last?account=${query.account}&since=${query.since}&status=${query.status}&task=${query.task}&tag=${query.tag}`,\n {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n ).pipe(tap((res) => console.log('last job fetched', res)));\n\n/**\n * /api/jobs/{connectionId}/count\n * Gets the total number of jobs.\n * @param dataSource\n * @param token\n */\nconst fetchJobCount = (dataSource: DataSource, token: string) =>\n fetchUrl(`${dataSource.host}/api/jobs/${dataSource.connection}/count`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('job count fetched', res)));\n\nexport {\n executeJobQuery,\n executeJob,\n cancelJob,\n cancelJobs,\n fetchJobs,\n deleteJob,\n deleteJobs,\n fetchLastJob,\n fetchJobCount,\n};\n","import { tap } from 'rxjs/operators';\nimport { DataSource } from '../../api/types';\nimport { Scenario } from '../../Scenarios/types';\nimport { fetchUrl } from '../helpers';\n\n/**\n * /api/jsondocuments/{connectionId}\n * Gets all json documents within the given time interval. If no time interval is given, all json documents are returned.\n * @param dataSource\n * @param token\n */\nconst fetchJsonDocuments = (dataSource: DataSource, token: string) => {\n const dataSelectors =\n dataSource.dataSelectors && dataSource.dataSelectors.length > 0\n ? `?dataSelectors=[${dataSource.dataSelectors\n .map((dataSelector) => dataSelector.replace('data.', ''))\n .join(',')}]`\n : '';\n\n return fetchUrl(\n `${dataSource.host}/api/jsondocuments/${dataSource.connection}?from=${dataSource.from || ''}&to=${\n dataSource.to || ''\n }&${dataSelectors}`,\n {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n ).pipe(tap((res) => console.log('List of JSON documents fetched', res)));\n};\n\n/**\n * /api/jsondocuments/{connectionId}/{fullName}\n * Gets the JSON document with the specified fullname identifier.\n * @param dataSource\n * @param token\n * @param id\n */\nconst fetchJsonDocument = (dataSource: DataSource, token: string, id: string) =>\n fetchUrl(`${dataSource.host}/api/jsondocuments/${dataSource.connection}/${id}`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log(`${id} scenario fetched`, res)));\n\n/**\n * /api/jsondocuments/{connectionId}\n * Adds a new JSON document.\n * @param dataSource\n * @param token\n * @param scenario\n */\nconst postJsonDocuments = (dataSource: DataSource, token: string, scenario: Scenario) => {\n return fetchUrl(`${dataSource.host}/api/jsondocuments/${dataSource.connection}`, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(scenario),\n }).pipe(tap((res) => console.log('Create a JSON document', res)));\n};\n\n/**\n * /api/jsondocuments/{connectionId}/{fullName}\n * Deletes the JSON document with the specified fullname identifier.\n * @param dataSource\n * @param token\n * @param fullName\n */\nconst deleteJsonDocument = (dataSource: DataSource, token: string, fullName: string) =>\n fetchUrl(`${dataSource.host}/api/jsondocuments/${dataSource.connection}/${fullName}`, {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('scenario deleted', res)));\n\n/**\n * /api/jsondocuments/{connectionId}\n * Updates an existing JSON document.\n * @param dataSource\n * @param token\n * @param scenario\n */\nconst updateJsonDocument = (dataSource: DataSource, token: string, scenario: any) =>\n fetchUrl(`${dataSource.host}/api/jsondocuments/${dataSource.connection}`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(scenario),\n }).pipe(tap((res) => console.log('scenario updated', res)));\n\nexport { fetchJsonDocuments, fetchJsonDocument, postJsonDocuments, deleteJsonDocument, updateJsonDocument };\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DataSource } from '../../api/types';\nimport { dataObjectToArray } from '../../utils/Utils';\nimport { fetchUrl } from '../helpers';\n\n/**\n * /api/logs/{connectionId}/query\n * Gets a list of log entries by query.\n * @param dataSources\n * @param token\n * @param query\n */\nconst fetchLogs = (dataSources: DataSource | DataSource[], token: string, query: any) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.map((source: DataSource) =>\n fetchUrl(`${source.host}/api/logs/${source.connection}/query`, {\n method: 'POST',\n body: JSON.stringify(query),\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(map((fc) => dataObjectToArray(fc))),\n );\n\n return forkJoin(requests).pipe(map((fc) => fc.flat()));\n};\n\nexport { fetchLogs };\n","import { tap } from 'rxjs/operators';\nimport { DataSource } from '../../api/types';\nimport { ScenarioItem } from '../../Scenarios/ScenarioItem/ScenarioItem';\nimport { fetchUrl } from '../helpers';\n\n/**\n * /api/scenarios/{connectionId}/{id}\n * Gets a scenario with the specified identifier\n * @param dataSource\n * @param token\n * @param id\n */\nconst fetchScenario = (dataSource: DataSource, token: string, id: string) =>\n fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}/${id}?scenarioId=${id}`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log(`${id} scenario fetched`, res)));\n\n/**\n * /api/scenarios/{connectionId}\n * Gets all scenarios\n * @param dataSource\n * @param token\n */\nconst fetchScenarios = (dataSource: DataSource, token: string) => {\n const dataSelectors =\n dataSource.dataSelectors && dataSource.dataSelectors.length > 0\n ? `?dataSelectors=[${dataSource.dataSelectors\n .map((dataSelector) => dataSelector.replace('data.', ''))\n .join(',')}]`\n : '';\n\n return fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}${dataSelectors}`, {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n });\n};\n\n/**\n * /api/scenarios/{connectionId}\n * Gets all scenarios within the given time span\n * @param dataSource\n * @param token\n */\nconst fetchScenariosByDate = (dataSource: DataSource, token: string) => {\n const dataSelectors =\n dataSource.dataSelectors && dataSource.dataSelectors.length > 0\n ? `&dataSelectors=[${dataSource.dataSelectors\n .map((dataSelector) => dataSelector.replace('data.', ''))\n .join(',')}]`\n : '';\n\n return fetchUrl(\n `${dataSource.host}/api/scenarios/${dataSource.connection}?from=${dataSource.from}&to=${dataSource.to}${dataSelectors}`,\n {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n );\n};\n\n/**\n * /api/scenarios/{connectionId}/{id}\n * Deletes the scenario with the specified identifier.\n * @param dataSource\n * @param token\n * @param id\n */\nconst deleteScenario = (dataSource: DataSource, token: string, scenario: any, softDelete = false) => {\n if (softDelete) {\n scenario.data.deleted = true;\n scenario.data = JSON.stringify(scenario.data);\n\n return fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(scenario),\n });\n } else {\n return fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}/${scenario}`, {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n });\n }\n};\n\n/**\n * /api/scenarios/{connectionId}\n * Adds a scenario\n * @param dataSource\n * @param token\n * @param scenario\n */\nconst postScenario = (dataSource: DataSource, token: string, scenario: any) =>\n fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}`, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(scenario),\n });\n\n/**\n * /api/scenarios/{connectionId}\n * Updates an existing scenario.\n * @param dataSource\n * @param token\n * @param scenario\n */\nconst updateScenario = (dataSource: DataSource, token: string, scenario: any) =>\n fetchUrl(`${dataSource.host}/api/scenarios/${dataSource.connection}`, {\n method: 'PUT',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(scenario),\n });\n\nexport { fetchScenario, fetchScenarios, fetchScenariosByDate, deleteScenario, postScenario, updateScenario };\n","import { forkJoin } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { dataObjectToArray } from '../../utils/Utils';\nimport { fetchUrl } from '../helpers';\nimport { DataSource } from '../types';\n\n/**\n * /api/timeseries/{connectionId}/list/values\n * Gets a list of values within the given time interval for the given list of time series.\n *\n * or\n *\n * /api/timeseries/{connectionId}/list/value/last\n * Gets the last value (corresponding to the last time step) for the given list of time series\n * @param dataSources\n * @param token\n * @param onlyLast\n */\nconst fetchTimeseriesValues = (dataSources: DataSource[], token: string, onlyLast = false) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.map((source) => {\n let url = `${source.host}/api/timeseries/${source.connection}/list/${onlyLast ? 'value/last' : 'values'}`;\n\n if (source.from && source.to) {\n url = `${url}?from=${source.from}&to=${source.to}`;\n }\n\n return fetchUrl(url, {\n method: 'POST',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(source.ids),\n }).pipe(map((timeseries) => dataObjectToArray(timeseries)));\n });\n\n return forkJoin(requests).pipe(map((timeseries) => timeseries.flat()));\n};\n\n/**\n * /api/timeseries/{connectionId}/fullnames\n * Gets a list of time series full-name identifiers.\n * @param dataSources\n * @param token\n */\nconst fetchTimeseriesByGroup = (dataSources: DataSource[], token: string) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.flatMap((source) =>\n source.ids!.map((group) =>\n fetchUrl(`${source.host}/api/timeseries/${source.connection}/fullnames?group=${group.replace(/\\//g, '|')}`, {\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }),\n ),\n );\n\n return forkJoin(requests).pipe(tap((ts) => console.log('got group names', ts)));\n};\n\n/**\n * /api/timeseries/{connectionId}/fullnames\n * Gets a list of time series full-name identifiers.\n * @param dataSources connectionId is required\n * @param token\n */\nconst fetchTimeseriesFullNames = (dataSources: DataSource[], token: string, group: any) => {\n const dataSourcesArray = !Array.isArray(dataSources) ? [dataSources] : dataSources;\n\n const requests = dataSourcesArray.flatMap((source) =>\n fetchUrl(\n `${source.host}/api/timeseries/${source.connection}/fullnames?group=${source.group || group || ''};nonrecursive`,\n {\n method: 'GET',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n },\n ).pipe(\n tap(\n (res) => {\n console.log('fetch full names: ', res);\n },\n (error) => {\n console.log(error);\n },\n ),\n ),\n );\n\n return forkJoin(requests).pipe(map((ts) => ts.flat()));\n};\n\nexport { fetchTimeseriesValues, fetchTimeseriesByGroup, fetchTimeseriesFullNames };\n","import { tap } from 'rxjs/operators';\nimport { UserGroupsData } from '../../UserGroups/types';\nimport { fetchUrl } from '../helpers';\n\n// Could be an account name or `me`.\n\n/**\n * /api/usergroups\n * Gets a list of all user groups.\n * @param host\n * @param token\n */\nconst fetchUserGroups = (host: string, token: string) =>\n fetchUrl(`${host}/api/usergroups`, {\n method: 'GET',\n additionalHeaders: { Authorization: `Bearer ${token}` },\n }).pipe(tap((res) => console.log('fetchUserGroups', res)));\n\n/**\n * /api/usergroups/user/{userId}\n * Adds a user to all groups with the specified identifiers.\n * @param host\n * @param token\n * @param data\n */\nconst updateUserGroupsForUser = (host: string, token: string, data: { userId: string; groups: string[] }) =>\n fetchUrl(`${host}/api/usergroups/user/${data.userId}`, {\n method: 'POST',\n additionalHeaders: { Authorization: `Bearer ${token}` },\n body: JSON.stringify(data.groups),\n }).pipe(tap((res) => console.log('fetchUserGroups', res)));\n\n/**\n * /api/usergroups\n * Adds a new user group.\n * @param host\n * @param token\n * @param data\n */\nconst createUserGroup = (host: string, token: string, data: UserGroupsData) =>\n fetchUrl(`${host}/api/usergroups`, {\n method: 'POST',\n additionalHeaders: { Authorization: `Bearer ${token}` },\n body: JSON.stringify(data),\n }).pipe(tap((res) => console.log('createUserGroup', res)));\n\n/**\n * /api/usergroups\n * Updates an existing user group.\n * @param host\n * @param token\n * @param data\n */\nconst updateUserGroups = (host: string, token: string, data: UserGroupsData) =>\n fetchUrl(`${host}/api/usergroups`, {\n method: 'PUT',\n additionalHeaders: { Authorization: `Bearer ${token}` },\n body: JSON.stringify({\n id: data.id,\n name: data.name,\n users: data.users,\n metadata: data.metadata,\n }),\n }).pipe(tap((res) => console.log('updateUserGroups', res)));\n\n/**\n * /api/usergroups/{id}\n * Deletes the user group with the specified identifier.\n * @param host\n * @param token\n * @param id\n */\nconst deleteUserGroup = (host: string, token: string, id: string) =>\n fetchUrl(`${host}/api/usergroups/${id}`, {\n method: 'DELETE',\n additionalHeaders: {\n Authorization: `Bearer ${token}`,\n },\n }).pipe(tap((res) => console.log('deleted account', res)));\n\nexport { fetchUserGroups, updateUserGroupsForUser, createUserGroup, updateUserGroups, deleteUserGroup };\n","import { fromFetch } from 'rxjs/fetch';\nimport { DataSource } from '../types';\n\n/**\n * /api/maps/{connectionId}\n * Returns a list of base64 encoded bitmap images.\n * @param dataSource\n * @param config\n * @param token\n */\nconst fetchMapAnimationFiles = (\n dataSource: DataSource,\n config: {\n style: any;\n item: any;\n width: any;\n height: any;\n bbox: any;\n shadingType: any;\n scale: any;\n },\n token: string,\n) => {\n const url = `${dataSource.host}/api/maps/${dataSource.connection}?&styles=${config.style}&items=${config.item}&width=${config.width}&height=${config.height}&bbox=${config.bbox}&shadingtype=${config.shadingType}&scale=${config.scale}`;\n\n return fromFetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(dataSource.ids),\n });\n};\n\nexport { fetchMapAnimationFiles };\n","export const IntensityColours = [\n '#800080',\n '#5500ab',\n '#2a00d5',\n '#0000ff',\n '#0038e1',\n '#006fc3',\n '#00a6a6',\n '#00c46e',\n '#00e237',\n '#00ff00',\n '#55ff00',\n '#aaff00',\n '#ffff00',\n '#ffaa00',\n '#ff5500',\n '#ff0000',\n];\n\nexport const InterpolateIntensityColor = (weight: number) => {\n const rgbs: number[][] = [];\n\n for (const hex of IntensityColours) {\n const bigint = parseInt(hex.replace('#', ''), 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n\n rgbs.push([r, g, b]);\n }\n\n for (let i = 0; i < IntensityColours.length; i++) {\n const percentage = (i + 1) / IntensityColours.length;\n const nextPercentage = (i + 2) / IntensityColours.length;\n\n if (weight >= percentage && weight < nextPercentage) {\n const rgb = rgbs[i];\n\n return `#${((1 << 24) + (rgb[0] << 16) + (rgb[1] << 8) + rgb[2]).toString(16).slice(1)}`;\n }\n }\n\n return '#FFFFFF';\n};\n","import { IconButton, Menu, MenuItem as MenuItemUI } from '@material-ui/core';\nimport { MoreVert as MoreVertIcon } from '@material-ui/icons';\nimport CreateOutlinedIcon from '@material-ui/icons/CreateOutlined';\nimport InsertDriveFileOutlinedIcon from '@material-ui/icons/InsertDriveFileOutlined';\nimport React, { useState } from 'react';\nimport { MenuItem, Scenario } from '../types';\nimport ScenarioMenuProps from './types';\n\nconst ScenarioMenu = ({ onContextMenuClick, scenario, menu, onClick }: ScenarioMenuProps) => {\n const [showMenu, setShowMenuState] = useState(false);\n const [showElement, setshowElementState] = useState();\n\n const setShowMenu = (isShow: boolean, elementId: any) => {\n setShowMenuState(isShow);\n onClick(scenario);\n\n if (isShow) {\n setshowElementState(elementId);\n }\n };\n\n const setContextMenu = (menuItem: MenuItem, scenario: Scenario) => {\n onContextMenuClick(menuItem, scenario);\n setShowMenuState(false);\n };\n\n const handleEdit = () => {\n const edit = menu.filter((item) => item.id === 'edit');\n\n if (edit.length > 0) {\n setContextMenu(edit[0], scenario);\n }\n };\n\n const handlePDF = () => {\n const pdf = menu.filter((item) => item.id === 'openPdf');\n\n if (pdf.length > 0) {\n setContextMenu(pdf[0], scenario);\n }\n };\n\n return (\n
\n {menu.some((item) => item.id === 'openPdf') && (\n \n \n \n )}\n {menu.some((item) => item.id === 'edit') && (\n \n \n \n )}\n setShowMenu(true, e.currentTarget)}\n style={{ color: '#0B4566' }}\n >\n \n \n setShowMenuState(false)}>\n {menu.map((menuItem) => (\n setContextMenu(menuItem, scenario)} {...menuItem}>\n {menuItem.label}\n \n ))}\n \n
\n );\n};\n\nexport { ScenarioMenuProps, ScenarioMenu };\n","import { IconButton, Menu, MenuItem as MenuItemUI } from '@material-ui/core';\nimport { MoreVert as MoreVertIcon } from '@material-ui/icons';\nimport React, { useState } from 'react';\nimport { MenuItem, Scenario } from '../types';\nimport ScenarioMenuOLDProps from './types';\n\nconst ScenarioMenuOLD = (props: ScenarioMenuOLDProps) => {\n const { onContextMenuClick, scenario, menu, onClick } = props;\n const [showMenu, setShowMenuState] = useState(false);\n const [showElement, setshowElementState] = useState();\n\n const setShowMenu = (isShow: boolean, elementId: any) => {\n setShowMenuState(isShow);\n onClick(scenario);\n\n if (isShow) {\n setshowElementState(elementId);\n }\n };\n\n const setContextMenu = (menuItem: MenuItem, scenario: Scenario) => {\n onContextMenuClick(menuItem, scenario);\n setShowMenuState(false);\n };\n\n return (\n
\n setShowMenu(true, e.currentTarget)}\n >\n \n \n setShowMenuState(false)}>\n {menu.map((menuItem) => (\n setContextMenu(menuItem, scenario)} {...menuItem}>\n {menuItem.label}\n \n ))}\n \n
\n );\n};\n\nexport { ScenarioMenuOLDProps, ScenarioMenuOLD };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n },\n labels: { 'fontSize': 14, '& label': { fontSize: 14 } },\n rememberMe: { float: 'left', marginTop: 12 },\n rememberMeLink: { marginRight: 15 },\n submit: {\n float: 'right',\n marginTop: 15,\n display: 'flex',\n alignItems: 'center',\n },\n button: {\n marginRight: 15,\n },\n shrink: {\n backgroundColor: '#FFF',\n paddingLeft: 5,\n paddingRight: 5,\n },\n});\n\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import {\n Button,\n Checkbox,\n CircularProgress,\n FormControl,\n FormControlLabel,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport Alert from '@material-ui/lab/Alert';\nimport React, { useEffect, useState } from 'react';\nimport AuthService from '../AuthService';\nimport LoginFormProps from './types';\nimport useStyles from './useStyles';\n\nconst LoginForm = (props: LoginFormProps) => {\n const {\n userNamePlaceholder = 'Username',\n passwordPlaceholder = 'Password',\n host,\n onSuccess,\n onError,\n showRememberMe,\n onResetPassword,\n showResetPassword,\n rememberMeLabelText = 'Remember me?',\n resetPasswordLabelText = 'Reset password',\n loginButtonText = 'Login',\n backButtonText = 'Back',\n textFieldVariant = 'outlined',\n otpAuthPlaceholder = 'Please enter One Time Password',\n } = props;\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [twoFA, setTwoFA] = useState(false);\n const [otpAuthenticatorIds, setOtpAuthenticatorIds] = useState([]);\n const [form, setForm] = useState({\n id: '',\n password: '',\n rememberMe: showRememberMe,\n otpAuthenticator: null,\n otp: null,\n });\n const classes = useStyles();\n const auth = new AuthService(host);\n const validate = () => form.id && form.password;\n\n const handleChange = (name: string, value: string | boolean) => {\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n setForm({ ...form, [name]: value });\n };\n\n const handleSubmit = (e: { preventDefault: () => void }) => {\n e.preventDefault();\n setError(false);\n\n if (validate()) {\n setLoading(true);\n }\n\n if (twoFA && form.otp === null) {\n setError(true);\n }\n\n auth.login(\n form,\n (otpInfo) => {\n setTwoFA(otpInfo.otpRequired);\n setOtpAuthenticatorIds(otpInfo.otpAuthenticatorIds);\n setLoading(false);\n },\n (user, token) => {\n console.log('login success');\n setLoading(false);\n\n if (onSuccess != null) {\n onSuccess(user, token);\n }\n },\n (error) => {\n console.log('login error');\n setLoading(false);\n setError(true);\n\n if (onError != null) {\n onError(error);\n }\n },\n );\n };\n\n const handleBack = () => {\n setTwoFA(false);\n setError(false);\n\n setForm({\n ...form,\n otpAuthenticator: null,\n otp: null,\n });\n };\n\n const handleDefaultAuthenticator = () => {\n setForm({\n ...form,\n otpAuthenticator: otpAuthenticatorIds[0] || null,\n });\n };\n\n useEffect(() => {\n handleDefaultAuthenticator();\n }, [otpAuthenticatorIds]);\n\n return (\n
\n {error && (\n {`Username ${\n twoFA ? 'or One Time Password is invalid' : 'and/or password is invalid'\n }`}\n )}\n\n {twoFA ? (\n <>\n {otpAuthenticatorIds.length > 1 && (\n <>\n Please select One Time Password authenticator\n \n \n Authenticator\n \n handleChange('otpAuthenticator', e.target.value as string)}\n >\n {otpAuthenticatorIds?.map((item, index) => (\n \n {item}\n \n ))}\n \n \n \n )}\n handleChange('otp', e.target.value)}\n label={otpAuthPlaceholder}\n error={error}\n variant={textFieldVariant}\n />\n \n ) : (\n <>\n handleChange('id', e.target.value)}\n label={userNamePlaceholder}\n variant={textFieldVariant}\n />\n handleChange('password', e.target.value)}\n label={passwordPlaceholder}\n variant={textFieldVariant}\n />\n \n )}\n
\n {showRememberMe && (\n handleChange('rememberMe', e.target.checked)}\n />\n }\n label={{rememberMeLabelText}}\n />\n )}\n
\n
\n {showResetPassword && (\n {\n onResetPassword(true);\n }\n : undefined\n }\n >\n {resetPasswordLabelText}\n \n )}\n {twoFA && (\n \n )}\n\n \n
\n \n );\n};\n\nexport { LoginFormProps, LoginForm };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n resetBox: {\n display: 'flex',\n marginTop: 15,\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n messages: {\n flex: 1,\n marginTop: 15,\n },\n labels: { 'fontSize': 14, '& label': { fontSize: 14 } },\n backButton: { margin: '0 15px' },\n});\n\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { Button, CircularProgress, TextField, Typography } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport React, { useState } from 'react';\nimport AuthService from '../AuthService';\nimport ResetPasswordFormProps from './types';\nimport useStyles from './useStyles';\n\nconst ResetPasswordForm = (props: ResetPasswordFormProps) => {\n const {\n host,\n mailTemplate,\n onResetPassword,\n onBackToLogin,\n userNamePlaceholder = 'Email Address',\n resetPasswordButtonText = 'Reset Password',\n errorText = 'The has been an error sending your password reset request. Please contact support if this problem continues.',\n successText = 'Your password reset request has been sent to the above email address.',\n textFieldVariant,\n } = props;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [form, setForm] = useState({\n emailAddress: '',\n });\n const classes = useStyles();\n const auth = new AuthService(host);\n const validate = () => form.emailAddress;\n const handleChange = (name: string, value: string) => setForm({ ...form, [name]: value });\n\n const handleSubmit = (e: { preventDefault: () => void }) => {\n e.preventDefault();\n\n if (validate()) {\n setLoading(true);\n\n auth.requestResetPassword(\n mailTemplate,\n form.emailAddress,\n () => {\n if (onResetPassword) onResetPassword();\n\n setError(false);\n setSuccess(true);\n setLoading(false);\n },\n (err) => {\n console.log(err);\n setLoading(false);\n setSuccess(false);\n setError(true);\n },\n );\n }\n };\n\n return (\n <>\n
\n handleChange('emailAddress', e.target.value)}\n label={userNamePlaceholder}\n variant={textFieldVariant as any}\n />\n\n
\n \n \n
\n
\n {success && {successText}}\n {error && {errorText}}\n
\n \n \n );\n};\n\nexport { ResetPasswordFormProps, ResetPasswordForm };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n resetBox: {\n display: 'flex',\n marginTop: 15,\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n messages: {\n flex: 1,\n marginTop: 15,\n },\n labels: { 'fontSize': 14, '& label': { fontSize: 14 } },\n backButton: { margin: '0 15px' },\n});\n\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { Button, CircularProgress, TextField, Typography } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport React, { useState } from 'react';\nimport AuthService from '../AuthService';\nimport UpdatePasswordFormProps from './types';\nimport useStyles from './useStyles';\n\nconst UpdatePasswordForm = (props: UpdatePasswordFormProps) => {\n const {\n host,\n token,\n onPasswordUpdated,\n onBackToLogin,\n newPasswordPlaceholder = 'New Password',\n confirmPasswordPlaceholder = 'Confirm New Password',\n updatePasswordButtonText = 'Reset Password',\n errorText = 'The has been an error resetting your password. Please contact support if this problem continues.',\n successText = 'Your password has been reset successfully.',\n textFieldVariant,\n } = props;\n const [loading, setLoading] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [form, setForm] = useState({\n password: '',\n confirmPassword: '',\n });\n const classes = useStyles();\n const auth = new AuthService(host);\n const validate = () => form.password !== '' && form.confirmPassword !== '' && form.password === form.confirmPassword;\n const handleChange = (name: string, value: string) => setForm({ ...form, [name]: value });\n\n const handleSubmit = (e: { preventDefault: () => void }) => {\n e.preventDefault();\n\n setSubmitted(true);\n\n if (validate()) {\n setLoading(true);\n\n auth.confirmResetPassword(\n token,\n form.password,\n () => {\n if (onPasswordUpdated) onPasswordUpdated();\n\n setError(false);\n setSuccess(true);\n setLoading(false);\n },\n (err) => {\n console.log(err);\n setLoading(false);\n setSuccess(false);\n setError(true);\n },\n );\n }\n };\n\n const passwordsMatch = () =>\n !submitted || (form.password !== '' && form.confirmPassword !== '' && form.password === form.confirmPassword);\n\n return (\n <>\n
\n handleChange('password', e.target.value)}\n label={newPasswordPlaceholder}\n variant={textFieldVariant as any}\n />\n handleChange('confirmPassword', e.target.value)}\n label={confirmPasswordPlaceholder}\n variant={textFieldVariant as any}\n />\n\n
\n \n \n
\n
\n {success && {successText}}\n {error && {errorText}}\n
\n \n \n );\n};\n\nexport { UpdatePasswordFormProps, UpdatePasswordForm };\n","import { ThemeProvider } from '@material-ui/styles';\nimport React, { useState } from 'react';\nimport DHITheme from '../../theme';\nimport { LoginForm } from '../LoginForm/LoginForm';\nimport { ResetPasswordForm } from '../ResetPasswordForm/ResetPasswordForm';\nimport { UpdatePasswordForm } from '../UpdatePasswordForm/UpdatePasswordForm';\nimport LoginProps from './types';\n\nconst Login = (props: LoginProps) => {\n const {\n host,\n showRememberMe,\n showResetPassword,\n showUpdatePassword,\n resetPasswordMailTemplate,\n resetPasswordToken,\n textFieldVariant,\n translations,\n onBackToLogin,\n onSuccess,\n onError,\n } = props;\n const [showingResetPassword, setShowingResetPassword] = useState(false);\n\n const togglePasswordResetForm = (value: boolean) => {\n setShowingResetPassword(value);\n };\n\n return (\n \n {showingResetPassword && (\n togglePasswordResetForm(value)}\n userNamePlaceholder={translations?.updatePasswordEmailPlaceholder}\n resetPasswordButtonText={translations?.resetPasswordButton}\n errorText={translations?.resetPasswordError}\n textFieldVariant={textFieldVariant}\n />\n )}\n {showUpdatePassword && (\n \n )}\n {!showingResetPassword && !showUpdatePassword && (\n togglePasswordResetForm(value)}\n textFieldVariant={textFieldVariant}\n userNamePlaceholder={translations?.userNamePlaceholder}\n passwordPlaceholder={translations?.passwordPlaceholder}\n loginButtonText={translations?.loginButton}\n rememberMeLabelText={translations?.rememberMeLabel}\n resetPasswordLabelText={translations?.resetPasswordLabel}\n />\n )}\n
\n
\n );\n};\n\nexport { LoginProps, Login };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n },\n});\n\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\nimport { clone } from 'lodash';\nimport React, { useEffect, useRef, useState } from 'react';\nimport {\n cancelJob,\n deleteJsonDocument,\n executeJob,\n executeJobQuery,\n fetchJsonDocument,\n fetchJsonDocuments,\n postJsonDocuments,\n} from '../../api';\nimport { JobParameters } from '../../api/types';\nimport AuthService from '../../Auth/AuthService';\nimport GeneralDialog from '../../common/GeneralDialog/GeneralDialog';\nimport GeneralDialogProps from '../../common/GeneralDialog/types';\nimport { checkConditions, getObjectProperty, uniqueId } from '../../utils/Utils';\nimport { ScenarioList } from '../ScenarioList/ScenarioList';\nimport { MenuItem, Scenario } from '../types';\nimport ScenariosProps from './types';\nimport useStyles from './useStyles';\n\nconst Scenarios = (props: ScenariosProps) => {\n const {\n host,\n token,\n scenarioConnection,\n queryBody,\n nameField,\n jobConnection,\n jobParameters,\n module,\n dataFilterbyProperty,\n signalRConnectionHubUrl,\n taskId,\n hostGroup,\n descriptionFields,\n extraFields,\n menuItems,\n actionButton,\n selectedScenarioId,\n showDate,\n showHour,\n showMenu,\n showStatus,\n status,\n highlightNameOnStatus,\n queryDates,\n onContextMenuClick,\n onScenarioSelected,\n onScenarioReceived,\n onScenariosReceived,\n addScenario,\n translations,\n timeZone,\n debug,\n } = props;\n\n const [dialog, setDialog] = useState({\n showDialog: false,\n cancelLabel: translations?.cancelLabel || 'Cancel',\n confirmLabel: translations?.confirmLabel || 'Confirm',\n dialogId: '',\n title: '',\n message: '',\n onConfirm: null,\n });\n const [scenarios, setScenarios] = useState();\n const [scenario, setScenario] = useState();\n const classes = useStyles();\n const latestScenarios = useRef(null);\n\n latestScenarios.current = scenarios;\n\n useEffect(() => {\n if (addScenario !== scenario) {\n let newScenario: Scenario;\n\n if (addScenario!.data) {\n newScenario = clone(addScenario) as Scenario;\n\n newScenario = {\n ...newScenario,\n data: addScenario!.data,\n };\n } else {\n newScenario = {\n data: JSON.stringify(addScenario),\n };\n }\n\n setScenario(newScenario);\n onAddScenario(newScenario);\n }\n }, [addScenario]);\n\n const fetchScenariosList = () => {\n let obj = {};\n\n if (queryDates) {\n obj = {\n ...obj,\n from: queryDates?.from || '',\n to: queryDates?.to || '',\n };\n } else if (descriptionFields) {\n obj = {\n ...obj,\n dataSelectors:\n [\n nameField,\n ...descriptionFields!.map((descriptionField) => descriptionField.field),\n ...extraFields!.map((descriptionField) => descriptionField.field),\n ] || [],\n };\n }\n\n fetchJsonDocuments(\n {\n ...obj,\n host,\n connection: scenarioConnection,\n },\n token,\n ).subscribe(\n (res) => {\n const rawScenarios = res.map((s: { data: string }) => {\n s.data = s.data ? JSON.parse(s.data) : s.data;\n\n return s;\n });\n const updatedScenarios = [];\n const newScenarios = rawScenarios.filter((scenario) => checkConditions(scenario, dataFilterbyProperty));\n const values = newScenarios.map((item) => item.fullName);\n\n const query = [\n {\n item: 'ScenarioId',\n queryOperator: 'Any',\n values,\n },\n ];\n const dataSources = {\n host,\n connection: jobConnection,\n };\n\n try {\n executeJobQuery(dataSources, token, query).subscribe((jobs) => {\n newScenarios.map((scenario) => {\n const latestJob = filterToLastJob(scenario, jobs);\n let sce = {};\n\n if (latestJob && latestJob.data) {\n sce = { ...scenario, lastJob: latestJob.data };\n } else {\n sce = scenario;\n }\n\n updatedScenarios.push(sce);\n });\n\n if (debug) {\n console.log({ updatedScenarios });\n }\n\n setScenarios(updatedScenarios);\n\n if (onScenariosReceived) {\n onScenariosReceived(updatedScenarios);\n }\n });\n } catch (err) {\n console.log('Error retrieving Jobs: ', err);\n }\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const filterToLastJob = (scenario, jobs) => {\n if (jobs) {\n const latestJobByScenario = jobs\n .filter((job) => job.data.parameters.ScenarioId === scenario.fullName)\n .sort((a, b) => b.requested - a.requested);\n\n return latestJobByScenario[0];\n } else {\n return null;\n }\n };\n\n const onAddScenario = (newScenario: Scenario) => {\n if (newScenario) {\n postJsonDocuments(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n newScenario,\n ).subscribe((res) => res && fetchScenariosList());\n }\n };\n\n const onExecuteScenario = (scenario: Scenario, menuItem: MenuItem) => {\n closeDialog();\n\n // Define Job Parameter with ScenarioId\n const parameters = {\n ScenarioId: scenario.fullName,\n } as JobParameters;\n\n // Append Job Parameters from Menu Item\n if (menuItem.jobParameters) {\n for (const key in menuItem.jobParameters) {\n parameters[key] = getObjectProperty(scenario, menuItem.jobParameters[key]);\n }\n }\n\n // Append Job Parameters Props\n Object.assign(parameters, jobParameters);\n\n executeJob(\n {\n host,\n connection: menuItem.connection || jobConnection,\n },\n token,\n menuItem.taskId || taskId,\n parameters,\n menuItem.hostGroup || hostGroup,\n ).subscribe((job) => {\n if (debug) {\n console.log('Execute: ', job);\n }\n\n const newScenarios = scenarios.map((sce) =>\n sce.fullName === job.parameters.ScenarioId ? { ...sce, lastJob: job } : { ...sce },\n );\n\n setScenarios(newScenarios);\n });\n };\n\n const onTerminateScenario = (scenario: Scenario, menuItem: MenuItem) => {\n closeDialog();\n\n if (debug) {\n console.log('onTerminateScenario: ', scenario);\n }\n\n cancelJob(\n {\n host,\n connection: menuItem.connection || jobConnection,\n },\n token,\n scenario.lastJob.id,\n );\n };\n\n const onCloneScenario = (scenario: Scenario) => {\n closeDialog();\n\n const clonedScenario = {\n ...scenario,\n fullName: `scenario-${uniqueId()}`,\n data: {\n ...scenario.data,\n name: `Clone of ${getObjectProperty(scenario.data, nameField)}`,\n },\n };\n\n clonedScenario.data = JSON.stringify(clonedScenario.data);\n\n postJsonDocuments(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n clonedScenario,\n ).subscribe((res) => res && fetchScenariosList());\n };\n\n const onEditScenario = (scenario: Scenario) => {\n closeDialog();\n const updatedScenario = scenarios.map((sce) => {\n if (sce.fullName === scenario.fullName) {\n if (new Date(sce.added).getTime() <= new Date().getTime()) {\n delete sce.lastJob;\n }\n }\n\n return sce;\n });\n\n setScenarios(updatedScenario);\n };\n\n const getScenario = (id: string, resultCallback: (data: any) => void) => {\n fetchJsonDocument(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n id,\n ).subscribe(\n (res) => {\n res.data = res.data ? JSON.parse(res.data) : res.data;\n resultCallback(res);\n },\n (error) => {\n console.log(error);\n },\n );\n };\n\n const modalMessage = (action, translations, job) => {\n switch (action) {\n case 'delete':\n return translations && translations.executeConfirmation\n ? translations.executeConfirmation.replace('%job%', job)\n : `This will delete the selected scenario from the list. After it is deleted you cannot retrieve the data. Are you sure you want to delete ${job}?`;\n\n case 'execute':\n return translations && translations.executeConfirmation\n ? translations.executeConfirmation.replace('%job%', job)\n : `This will start a new job in the background. The status will change after job completion. Are you sure you want to execute ${job}?`;\n\n case 'clone':\n return translations && translations.cloneConfirmation\n ? translations.cloneConfirmation.replace('%job%', job)\n : `This will start a new job in the background. You can delete this cloned scenario later. Are you sure you want to clone ${job}?`;\n\n case 'edit':\n return translations && translations.cloneConfirmation\n ? translations.cloneConfirmation.replace('%job%', job)\n : `This will Edit ${job}?`;\n\n case 'terminate':\n return translations && translations.terminateConfirmation\n ? translations.terminateConfirmation.replace('%job%', job)\n : `This will cancel the job currently executing. The status will change after job cancelation. Are you sure you want to terminate ${job}?`;\n default:\n return '';\n }\n };\n\n const executeDialog = (scenario: Scenario, menuItem: MenuItem) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n ...dialog,\n showDialog: true,\n dialogId: 'execute',\n title: `${menuItem.label} ${job}`,\n message: modalMessage('execute', translations, job),\n onConfirm: () => onExecuteScenario(scenario, menuItem),\n });\n };\n\n const terminateDialog = (scenario: Scenario, menuItem: MenuItem) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n ...dialog,\n showDialog: true,\n dialogId: 'terminate',\n title: `${menuItem.label} ${job}`,\n message: modalMessage('terminate', translations, job),\n onConfirm: () => onTerminateScenario(scenario, menuItem),\n });\n };\n\n const cloneDialog = (scenario: Scenario) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n ...dialog,\n showDialog: true,\n dialogId: 'clone',\n title: `${translations?.cloneTitle || 'Clone'} ${job}`,\n message: modalMessage('clone', translations, job),\n onConfirm: () => onCloneScenario(scenario),\n });\n };\n\n const deleteDialog = (scenario: Scenario) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n ...dialog,\n showDialog: true,\n dialogId: 'delete',\n title: `${translations?.deleteTitle || 'Delete'} ${job}`,\n message: modalMessage('delete', translations, job),\n onConfirm: () => onDeleteScenario(scenario),\n });\n };\n\n const editDialog = (scenario: Scenario) => {\n const job = getObjectProperty(scenario.data, nameField);\n\n setDialog({\n ...dialog,\n showDialog: true,\n dialogId: 'edit',\n title: `${translations?.deleteTitle || 'Edit'} ${job}`,\n message: modalMessage('edit', translations, job),\n onConfirm: () => onEditScenario(scenario),\n });\n };\n\n const onDeleteScenario = (scenario: Scenario) => {\n closeDialog();\n\n deleteJsonDocument(\n {\n host,\n connection: scenarioConnection,\n },\n token,\n scenario.fullName,\n ).subscribe((res) => res.ok && fetchScenariosList());\n };\n\n const closeDialog = () => {\n setDialog({\n ...dialog,\n showDialog: false,\n });\n };\n\n const onContextMenuClickHandler = (menuItem: MenuItem, scenario: Scenario) => {\n getScenario(scenario.fullName!, (res) => {\n switch (menuItem.id) {\n case 'execute':\n return executeDialog(res, menuItem);\n case 'delete':\n return deleteDialog(res);\n case 'clone':\n return cloneDialog(res);\n case 'edit':\n return editDialog(res);\n case 'terminate':\n return terminateDialog(\n {\n ...res,\n lastJob: scenario.lastJob,\n },\n menuItem,\n );\n default:\n return onContextMenuClick(menuItem, res);\n }\n });\n };\n\n const onScenarioSelectedHandler = (scenario: Scenario) => {\n onScenarioSelected(scenario);\n\n getScenario(scenario.fullName!, (res) => onScenarioReceived(res));\n };\n\n const JsonDocumentAddedScenario = (added) => {\n if (debug) {\n console.log({ added });\n }\n\n setScenarios([...scenarios, added]);\n };\n\n const jobUpdated = (jobAdded) => {\n const job = JSON.parse(jobAdded.data);\n\n if (debug) {\n console.log({ job });\n console.log({ latestScenarios });\n }\n\n const updateScenario = latestScenarios.current.map((scenario) =>\n scenario.fullName === job.Parameters.ScenarioId && scenario.lastJob.status !== 'Completed'\n ? {\n ...scenario,\n lastJob: {\n ...scenario.lastJob,\n status: job.Status,\n progress: job.Progress,\n },\n }\n : scenario,\n );\n\n if (debug) {\n console.log({ updateScenario });\n }\n\n setScenarios(updateScenario);\n };\n\n const connectToSignalR = async () => {\n const auth = new AuthService(process.env.ENDPOINT_URL);\n const session = auth.getSession();\n\n // Open connections\n try {\n if (!auth) {\n throw new Error('Not Authorised.');\n }\n\n const connection = new HubConnectionBuilder()\n .withUrl(signalRConnectionHubUrl, {\n accessTokenFactory: () => session.accessToken,\n })\n .configureLogging(LogLevel.Information)\n .withAutomaticReconnect()\n .build();\n\n connection\n .start()\n .then(() => {\n if (debug) {\n console.log('SignalR Connected!');\n }\n\n connection.on('JsonDocumentAdded', JsonDocumentAddedScenario);\n connection.on('JobUpdated', jobUpdated);\n\n connection.invoke('AddJobFilter', jobConnection, []);\n connection.invoke('AddJsonDocumentFilter', scenarioConnection, []);\n })\n .catch((e) => console.log('Connection failed: ', e));\n } catch (err) {\n console.log('SignalR connection failed: ', err);\n }\n };\n\n useEffect(() => {\n connectToSignalR();\n fetchScenariosList();\n }, []);\n\n return (\n
\n {scenarios && (\n \n )}\n {dialog && (\n \n )}\n
\n );\n};\n\nexport { ScenariosProps, Scenarios };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n scenario: {\n display: 'flex',\n flex: 1,\n flexDirection: 'row',\n height: '100%',\n alignItems: 'center',\n direction: 'ltr',\n justify: 'flex-start',\n },\n dayText: {\n fontWeight: 'bold',\n fontSize: 18,\n color: 'gray',\n },\n hourText: {\n fontSize: 15,\n padding: '0 15px',\n },\n scenarioHour: {\n padding: '10px',\n fontSize: 14,\n color: '#0B4566',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n scenarioTitle: {\n fontWeight: 'bold',\n fontSize: 16,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n color: '#0B4566',\n },\n scenarioProgress: {\n fontSize: 10,\n color: 'gray',\n },\n scenarioDetails: {\n padding: '10px',\n width: '100%',\n display: 'grid',\n },\n buttonLabel: {\n textTransform: 'capitalize',\n },\n textFields: {\n fontSize: 14,\n color: '#86A2B3',\n },\n actions: {\n display: 'flex',\n alignItems: 'flex-end',\n flexDirection: 'column',\n padding: '0 10px',\n justifyContent: 'space-between',\n },\n icon: {\n 'display': 'flex',\n 'flexDirection': 'column',\n 'alignItems': 'center',\n '& span': {\n fontSize: 10,\n },\n },\n verticalLine: {\n marginLeft: '8px',\n borderLeft: '1px solid #c9c9c9',\n alignSelf: 'stretch',\n height: 'auto',\n },\n scenarioStatus: {\n paddingTop: 5,\n width: 50,\n textAlign: 'center',\n display: 'grid',\n marginLeft: -15,\n },\n});\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { Button, CircularProgress, Grid, Tooltip, Typography } from '@material-ui/core';\nimport { format, parseISO } from 'date-fns';\nimport React, { useState } from 'react';\nimport { utcToTz } from '../../utils/Utils';\nimport { ScenarioMenu } from '../ScenarioMenu/ScenarioMenu';\nimport ArrowForwardOutlinedIcon from '@material-ui/icons/ArrowForwardOutlined';\nimport useStyles from './useStyles';\nimport ScenarioItemProps from './types';\n\nconst ScenarioItem = ({\n showHour,\n date,\n showStatus,\n isSelected,\n status,\n name,\n nameAccentColour,\n description,\n showMenu,\n onClick,\n onContextMenuClick,\n menu,\n scenario,\n timeZone,\n actionButton,\n}: ScenarioItemProps) => {\n const [hover, setHover] = useState(false);\n const classes = useStyles();\n\n const rowIcon = () => {\n if (status.Icon) {\n const { Icon } = status;\n\n return (\n \n \n {status.name}\n \n );\n } else {\n return null;\n }\n };\n\n const showSpinner = () => {\n return (\n \n \n
\n \n \n \n
\n \n {status.progress ? `${status.progress}%` : null}\n \n \n
\n );\n };\n\n return (\n
\n setHover(true)}\n onMouseOut={() => setHover(false)}\n onFocus={() => undefined}\n onBlur={() => undefined}\n onClick={() => onClick(scenario)}\n >\n {date && showHour && (\n \n \n {format(timeZone ? utcToTz(date, timeZone) : parseISO(date), 'HH:mm')}\n \n {status.progress ? showStatus && showSpinner() : rowIcon()}\n \n )}\n
\n \n \n {name}\n \n {description.map((item: { name: string; value: string }) => (\n \n {`${item.name}: ${item.value}`}\n \n ))}\n \n
\n
\n {showMenu && (\n onClick(scenario)}\n menu={menu}\n scenario={scenario}\n />\n )}\n\n {actionButton && (\n }\n onClick={actionButton.handleActionButton}\n >\n {actionButton.name}\n \n )}\n
\n
\n );\n};\n\nexport { ScenarioItemProps, ScenarioItem };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n scenario: {\n display: 'flex',\n flex: 1,\n flexDirection: 'row',\n height: '100%',\n alignItems: 'center',\n direction: 'ltr',\n justify: 'flex-start',\n },\n dayText: {\n fontWeight: 'bold',\n fontSize: '18px',\n color: 'gray',\n },\n hourText: {\n fontSize: '15px',\n color: 'gray',\n },\n scenarioHour: {\n padding: '10px',\n },\n scenarioTitle: {\n fontWeight: 'bold',\n fontSize: '18px',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n scenarioProgress: {\n fontSize: '10px',\n color: 'gray',\n },\n scenarioDetails: {\n padding: '10px',\n width: '100%',\n display: 'grid',\n },\n textFields: {\n padding: '3px',\n fontSize: '12px',\n color: 'gray',\n },\n status: {\n display: 'contents',\n },\n verticalLine: {\n marginLeft: '8px',\n borderLeft: '1px solid #c9c9c9',\n alignSelf: 'stretch',\n height: 'auto',\n },\n scenarioStatus: {\n paddingTop: 5,\n width: 50,\n textAlign: 'center',\n display: 'grid',\n marginLeft: -15,\n },\n});\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { CircularProgress, Grid, Tooltip, Typography } from '@material-ui/core';\nimport { format, parseISO } from 'date-fns';\nimport React, { useState } from 'react';\nimport { utcToTz } from '../../utils/Utils';\nimport { ScenarioMenuOLD } from '../ScenarioMenuOLD/ScenarioMenu';\nimport ScenarioItemOLDProps from './types';\nimport useStyles from './useStyles';\n\nconst ScenarioItemOLD = (props: ScenarioItemOLDProps) => {\n const [hover, setHover] = useState(false);\n const classes = useStyles();\n const {\n showHour,\n date,\n showStatus,\n isSelected,\n status,\n name,\n description,\n showMenu,\n onClick,\n onContextMenuClick,\n menu,\n scenario,\n timeZone,\n } = props;\n\n const scenarioHour = date && showHour && (\n \n \n {format(timeZone ? utcToTz(date, timeZone) : parseISO(date), 'HH:mm')}\n \n \n );\n\n const scenarioStatus = showStatus && (\n \n
\n \n
\n \n \n \n
\n \n {status.progress ? `${status.progress}%` : null}\n \n
\n
\n );\n\n const scenarioDetails = (\n \n \n {name}\n \n {description.map((item: { name: string; value: string }) => (\n \n {`${item.name}: ${item.value}`}\n \n ))}\n \n );\n\n return (\n
\n setHover(true)}\n onMouseOut={() => setHover(false)}\n onFocus={() => undefined}\n onBlur={() => undefined}\n onClick={() => onClick(scenario)}\n >\n {scenarioHour}\n {scenarioStatus}\n {scenarioDetails}\n
\n {showMenu && (\n onClick(scenario)}\n menu={menu}\n scenario={scenario}\n />\n )}\n \n );\n};\n\nexport { ScenarioItemOLDProps, ScenarioItemOLD };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n marginTop: '30px',\n },\n listBlock: {\n display: 'flex',\n flexDirection: 'column',\n },\n dateBlock: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n },\n dateArea: {\n 'display': 'flex',\n 'backgroundColor': '#DBE4E9',\n 'padding': '5px 10px',\n 'fontFamily': ['Source Sans Pro', 'sans-serif'],\n 'fontSize': 16,\n 'lineHeight': 1.6,\n '& span': {\n fontWeight: 'normal',\n },\n },\n textFields: {\n fontSize: '12px',\n color: 'gray',\n },\n divider: {\n marginLeft: '30px',\n },\n listItem: {\n 'display': 'flex',\n 'flex': 1,\n 'flexDirection': 'column',\n 'borderBottom': '1px solid #c3c3c3',\n '&:hover': {\n cursor: 'pointer',\n background: '#ebebeb',\n },\n },\n selectedItem: {\n background: '#e8e8e8',\n },\n});\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { Divider } from '@material-ui/core';\nimport classNames from 'classnames';\nimport { format, parseISO } from 'date-fns';\nimport { Dictionary, groupBy, sortBy } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { checkCondition, checkStatus, getDescriptions, getObjectProperty, utcToTz } from '../../utils/Utils';\nimport { ScenarioItem } from '../ScenarioItem/ScenarioItem';\nimport { Scenario } from '../types';\nimport ScenarioListProps from './types';\nimport useStyles from './useStyles';\n\nconst ScenarioList = (props: ScenarioListProps) => {\n const {\n selectedScenarioId,\n scenarios,\n showHour,\n showDate,\n menuItems,\n actionButton,\n descriptionFields,\n onContextMenuClick,\n onScenarioSelected,\n showStatus,\n status,\n highlightNameOnStatus,\n showMenu,\n nameField,\n timeZone,\n } = props;\n const [groupedScenarios, setGroupedScenarios] = useState>();\n const [selectedId, setSelectedId] = useState(selectedScenarioId);\n const classes = useStyles();\n\n useEffect(() => {\n groupScenarios(scenarios);\n }, [scenarios]);\n\n const groupScenarios = (scenarios: Scenario[]) => {\n setGroupedScenarios(\n showHour || showDate\n ? groupBy(scenarios, (scenario) => {\n return scenario.dateTime ? format(parseISO(scenario.dateTime.split('.')[0]), 'yyyy-MM-dd') : '';\n })\n : groupBy(scenarios, (scenario) => scenario.dateTime),\n );\n };\n\n const buildMenu = (scenario: Scenario) => {\n return menuItems.filter((menuItem) => {\n return !menuItem.condition || checkCondition(scenario, menuItem.condition) ? menuItem : null;\n });\n };\n\n const buildScenariosList = (scenarios: Scenario[]) => {\n return sortBy(scenarios, ['dateTime'])\n .reverse()\n .map((scenario) => {\n const itemStatus = checkStatus(scenario.lastJob, status);\n\n return (\n onScenarioClick(scenario)}\n onKeyPress={() => onScenarioClick(scenario)}\n role=\"presentation\"\n className={classNames(classes.listItem, {\n [classes.selectedItem]: selectedId === getObjectProperty(scenario, 'fullName'),\n })}\n >\n onScenarioClick(scenario)}\n actionButton={actionButton}\n />\n \n );\n });\n };\n\n const buildDateArea = (date: string) => {\n const isoDate = timeZone ? utcToTz(date, timeZone) : parseISO(date);\n const dateObject = {\n day: format(isoDate, 'dd'),\n dayName: format(isoDate, 'EEEE'),\n monthName: format(isoDate, 'MMM'),\n };\n\n return (\n
\n
\n \n {`${dateObject.day} ${dateObject.monthName}`} {` - ${dateObject.dayName}`} \n \n
\n
\n );\n };\n\n const onScenarioClick = (scenario: Scenario) => {\n if (scenario && selectedId !== getObjectProperty(scenario, 'fullName')) {\n setSelectedId(getObjectProperty(scenario, 'fullName'));\n }\n if (onScenarioSelected) {\n onScenarioSelected(scenario);\n }\n };\n\n let printedScenarios = null;\n\n if (groupedScenarios) {\n printedScenarios = Object.keys(groupedScenarios)\n .sort()\n .reverse()\n .map((key) => (\n
\n {showDate && key && buildDateArea(key)}\n
{key && buildScenariosList(groupedScenarios[key])}
\n
\n ));\n }\n\n return
{printedScenarios}
;\n};\n\nexport { ScenarioListProps, ScenarioList };\n","import { makeStyles } from '@material-ui/core/styles';\nimport { WithStylesOptions } from '@material-ui/styles/withStyles';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n height: '100%',\n marginTop: '30px',\n },\n dateBlock: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n },\n dateArea: {\n alignSelf: 'flex-start',\n flexDirection: 'column',\n marginTop: '-25px',\n marginBottom: '-37px',\n fontFamily: ['Source Sans Pro', 'sans-serif'],\n fontSize: '16px',\n lineHeight: 1.6,\n },\n dayText: {\n fontWeight: 'bold',\n fontSize: '15px',\n color: 'gray',\n },\n textFields: {\n fontSize: '12px',\n color: 'gray',\n },\n divider: {\n marginLeft: '30px',\n borderTop: '1px solid #c9c9c9',\n },\n listItem: {\n 'display': 'flex',\n 'flex': 1,\n 'flexDirection': 'column',\n 'marginLeft': '30px',\n '&:hover': {\n cursor: 'pointer',\n background: '#ebebeb',\n },\n },\n selectedItem: {\n background: '#e8e8e8',\n },\n});\nconst useStyles = makeStyles(styles as any, { withTheme: true } as WithStylesOptions<{}>);\n\nexport default useStyles;\n","import { Divider } from '@material-ui/core';\nimport classNames from 'classnames';\nimport { format, parseISO } from 'date-fns';\nimport { Dictionary, groupBy, sortBy } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { checkCondition, checkStatus, getDescriptions, getObjectProperty, utcToTz } from '../../utils/Utils';\nimport { Scenario, ScenarioOLD } from '../types';\nimport { ScenarioItemOLD } from '../ScenarioItemOLD/ScenarioItem';\nimport ScenarioListOLDProps from './types';\nimport useStyles from './useStyles';\n\nconst ScenarioListOLD = (props: ScenarioListOLDProps) => {\n const {\n selectedScenarioId,\n scenarios,\n showHour,\n showDate,\n menuItems,\n status,\n descriptionFields,\n onContextMenuClick,\n onScenarioSelected,\n showStatus,\n showMenu,\n nameField,\n timeZone,\n } = props;\n const [groupedScenarios, setGroupedScenarios] = useState>();\n const [selectedId, setSelectedId] = useState(selectedScenarioId);\n const classes = useStyles();\n\n useEffect(() => {\n groupScenarios(scenarios);\n }, [scenarios]);\n\n const groupScenarios = (scenarios: ScenarioOLD[]) => {\n setGroupedScenarios(\n showHour || showDate\n ? groupBy(scenarios, (scenario) => {\n return scenario.dateTime && timeZone\n ? format(utcToTz(scenario.dateTime, timeZone), 'yyyy-MM-dd')\n : format(parseISO(scenario.dateTime), 'yyyy-MM-dd') || '';\n })\n : groupBy(scenarios, (scenario) => scenario.dateTime),\n );\n };\n\n const buildMenu = (scenario: Scenario) => {\n return menuItems.filter((menuItem) => {\n return !menuItem.condition || checkCondition(scenario, menuItem.condition) ? menuItem : null;\n });\n };\n\n const buildScenariosList = (scenarios: ScenarioOLD[]) => {\n return sortBy(scenarios, ['dateTime'])\n .reverse()\n .map((scenario) => {\n return (\n onScenarioClick(scenario)}\n role=\"presentation\"\n className={classNames(classes.listItem, {\n [classes.selectedItem]: selectedId === getObjectProperty(scenario, 'id'),\n })}\n >\n \n \n );\n });\n };\n\n const buildDateArea = (date: string) => {\n const isoDate = parseISO(date);\n\n const dateObject = {\n day: format(isoDate, 'dd'),\n dayName: format(isoDate, 'EEE'),\n monthName: format(isoDate, 'MMM'),\n };\n const dateBlockwidth = showHour ? '97px' : '39px';\n\n return (\n
\n
\n
{dateObject.day}
\n
{dateObject.monthName}
\n
{dateObject.dayName}
\n
\n
\n );\n };\n\n const onScenarioClick = (scenario: ScenarioOLD) => {\n if (scenario && selectedId !== getObjectProperty(scenario, 'id')) {\n setSelectedId(getObjectProperty(scenario, 'id'));\n }\n\n if (onScenarioSelected) {\n onScenarioSelected(scenario);\n }\n };\n\n let printedScenarios = null;\n\n if (groupedScenarios) {\n printedScenarios = Object.keys(groupedScenarios)\n .sort()\n .reverse()\n .map((key) => (\n
\n {showDate && buildDateArea(key)}\n
\n {buildScenariosList(groupedScenarios[key])}\n \n
\n
\n ));\n }\n\n return
{printedScenarios}
;\n};\n\nexport { ScenarioListOLDProps, ScenarioListOLD };\n","import { makeStyles } from '@material-ui/core';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport React from 'react';\n\nconst useStyles = makeStyles(() => ({\n shading: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'rgba(255, 255, 255, .3)',\n },\n loading: {\n position: 'absolute',\n fontSize: 20,\n top: 'calc(45% - 10px)',\n left: 'calc(50% - 10px)',\n },\n}));\n\nconst Loading = () => {\n const classes = useStyles();\n\n return (\n
\n \n
\n );\n};\n\nexport default Loading;\n","import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\nimport React from 'react';\nimport GeneralDialogProps from './types';\n\nconst GeneralDialog = (props: GeneralDialogProps) => {\n const { dialogId, title, message, cancelLabel, confirmLabel, showDialog, onConfirm, onCancel } = props;\n\n const setCancel = () => {\n onCancel && onCancel();\n };\n\n const setConfirm = () => {\n onConfirm && onConfirm();\n };\n\n return (\n \n {title}\n \n {message}\n \n \n \n \n \n \n );\n};\n\nexport default GeneralDialog;\n","import DateFnsUtils from '@date-io/date-fns';\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport { MaterialUiPickersDate } from '@material-ui/pickers/typings/date';\nimport { format, isValid } from 'date-fns';\nimport React, { useEffect, useState } from 'react';\nimport { toISOLocal, tzToUtc, utcToTz } from '../../utils/Utils';\n\nconst DateInput = ({\n label,\n dateFormat,\n timeZone,\n dateSelected,\n defaultDate,\n}: {\n label: string;\n dateFormat: string;\n timeZone: string;\n dateSelected: (value) => void;\n defaultDate?: string;\n}) => {\n const [value, setValue] = useState();\n\n const handleInputChange = (value) => {\n const date = utcToTz(value, timeZone);\n setValue(date);\n dateSelected(toISOLocal(date));\n };\n\n useEffect(() => {\n setValue(format(new Date(defaultDate), dateFormat));\n }, []);\n\n return (\n \n {\n if (isValid(newDate)) {\n const formattedDate = format(newDate, 'yyyy-MM-dd HH:mm:ss');\n handleInputChange(tzToUtc(formattedDate, timeZone));\n }\n }}\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-start',\n }}\n />\n \n );\n};\n\nexport default DateInput;\n","import { Button, Grid } from '@material-ui/core';\nimport React, { FC } from 'react';\nimport { DateFilterProps } from '../../Jobs/JobList/types';\nimport DateInput from '../DateInput/DateInput';\n\nconst DateFilter: FC = ({\n dateTimeFormat,\n startTimeUtc,\n timeZone,\n date,\n onSetDate,\n onClearDateFilter,\n children,\n}) => {\n return (\n \n \n onSetDate({ ...date, from: value })}\n />\n \n \n onSetDate({ ...date, to: value })}\n />\n \n \n \n \n {children}\n \n );\n};\n\nexport { DateFilter, DateFilterProps };\n","import { Button, IconButton } from '@material-ui/core';\nimport ControlPointIcon from '@material-ui/icons/ControlPoint';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport EditIcon from '@material-ui/icons/Edit';\nimport React from 'react';\n\nconst AddButton = ({ onExecute }) => (\n
\n \n
\n);\n\nconst EditButton = ({ onExecute }) => (\n \n \n \n);\n\nconst DeleteButton = ({ onExecute }) => (\n \n \n \n);\n\nconst commandComponents = {\n add: AddButton,\n edit: EditButton,\n delete: DeleteButton,\n // commit: CommitButton,\n // cancel: CancelButton,\n};\n\nconst Command = ({ id, onExecute }) => {\n const CommandButton = commandComponents[id];\n\n return ;\n};\n\nexport { AddButton, EditButton, DeleteButton, Command };\n","import { DataTypeProvider, DataTypeProviderProps } from '@devexpress/dx-react-grid';\nimport { Tooltip, Typography, Zoom } from '@material-ui/core';\nimport React from 'react';\n\nexport const DefaultColumnsFormatter = ({ value }) => {\n if (!value) return null;\n\n return (\n \n \n {value}\n \n \n );\n};\n\nexport const DefaultColumnsTypeProvider: React.ComponentType = (\n props: DataTypeProviderProps,\n) => ;\n","import { Button, DialogActions } from '@material-ui/core';\nimport React from 'react';\nimport { ActionsButtonsProps } from './types';\n\nconst ActionsButtons = ({\n cancelButtonText,\n confirmButtonText,\n onCancel,\n onSubmit,\n isEditing,\n}: ActionsButtonsProps) => {\n return (\n \n \n \n {isEditing ? 'Update' : confirmButtonText}\n \n \n );\n};\n\nexport default ActionsButtons;\n","import React from 'react';\nimport { Dialog as MUDialog, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\n\nconst Dialog = (props) => {\n const { dialogId, title, message, showDialog, onConfirm, onCancel } = props;\n\n return (\n \n {title && {title}}\n {message && (\n \n {message}\n \n )}\n {props.children}\n \n );\n};\n\nexport default Dialog;\n","import React from 'react';\nimport ActionsButtons from './ActionsButtons';\nimport Dialog from './Dialog';\nimport { DeleteDialogProps } from './types';\n\nconst DeleteDialog = ({ selectedRow, showDialog, closeDialog, handleDelete }: DeleteDialogProps) => {\n return (\n \n closeDialog()}\n onSubmit={() => handleDelete(selectedRow[0])}\n />\n \n );\n};\n\nexport default DeleteDialog;\n","import { TableFilterRow } from '@devexpress/dx-react-grid-material-ui';\nimport { FormControl, Input, InputLabel, MenuItem, Select, TableCell } from '@material-ui/core';\nimport React from 'react';\n\nexport const InputFilterCell = ({ filter, onFilter, column }) => (\n \n \n onFilter(e.target.value ? { value: e.target.value, operation: 'contains', columnType: column.type } : null)\n }\n placeholder=\"search...\"\n inputProps={{\n style: { textAlign: 'right', height: 'inherit' },\n min: 1,\n max: 4,\n }}\n />\n \n);\n\nexport const BooleanFilterCell = ({ filter, onFilter, column }) => (\n \n \n \n Select\n \n \n onFilter(e.target.value ? { value: e.target.value, operation: 'contains', columnType: column.type } : null)\n }\n >\n All\n Yes\n No\n \n \n \n);\n\nexport const FilterCellRow = (props) => {\n const { column } = props;\n\n if (column.type === 'Boolean') {\n return ;\n }\n if (\n column.type === 'Text' ||\n column.type === 'SingleChoice' ||\n column.type === 'MultiChoice' ||\n column.type === 'MultiText'\n ) {\n return ;\n }\n\n return ;\n};\n\nconst metadataFilterService = [\n {\n type: 'SingleChoice',\n predicate: (value, filter, row) => {\n const { columnName } = filter;\n\n if (!row.metadata || !row.metadata[columnName]) return false;\n\n return row.metadata[columnName].toLowerCase().includes(filter.value.toLowerCase());\n },\n },\n {\n type: 'Text',\n predicate: (value, filter, row) => {\n const { columnName } = filter;\n\n if (!row.metadata || !row.metadata[columnName]) return false;\n\n return row.metadata[columnName].toLowerCase().includes(filter.value.toLowerCase());\n },\n },\n {\n type: 'MultiChoice',\n predicate: (value, filter, row) => {\n const { columnName } = filter;\n\n if (!row.metadata || !row.metadata[columnName]) return false;\n\n const regex = new RegExp(filter.value.toLowerCase(), 'g');\n const arrayToLowerCase = row.metadata[columnName].map((item) => item.toLowerCase());\n const result = regex.test(arrayToLowerCase);\n\n return result;\n },\n },\n {\n type: 'MultiText',\n predicate: (value, filter, row) => {\n const { columnName } = filter;\n\n if (!row.metadata || !row.metadata[columnName]) return false;\n\n const regex = new RegExp(filter.value.toLowerCase(), 'g');\n const arrayToLowerCase = row.metadata[columnName].map((item) => item.toLowerCase());\n const result = regex.test(arrayToLowerCase);\n\n return result;\n },\n },\n {\n type: 'Boolean',\n predicate: (value, filter, row) => {\n const { columnName } = filter;\n\n if (!row.metadata || !row.metadata[columnName]) return false;\n\n let result;\n const myBooleanValue = filter.value === 'Yes';\n\n if (filter) {\n if (filter.value) {\n result = row.metadata[columnName] === myBooleanValue;\n } else {\n result = false;\n }\n }\n\n return result;\n },\n },\n];\n\nexport const filterRules = (metadata) => {\n if (metadata) {\n return metadataFilterService.map((item) => {\n let result = {};\n\n metadata.forEach((meta) => {\n if (item.type === meta.type) {\n result = {\n ...item,\n columnName: meta.key,\n };\n }\n });\n\n return result;\n });\n } else {\n return [];\n }\n};\n","import { Column, DataTypeProvider, DataTypeProviderProps } from '@devexpress/dx-react-grid';\nimport { Box, Chip, Tooltip, Typography, Zoom } from '@material-ui/core';\nimport React from 'react';\n\ninterface MetadataFormatterProps extends Column {\n type?: string;\n}\n\nexport const MetadataFormatter = ({\n column,\n row,\n value,\n}: {\n column: MetadataFormatterProps;\n row?: any;\n value: any;\n}) => {\n const { metadata } = row;\n const { name, type } = column;\n\n if (metadata && metadata[name] !== undefined) {\n switch (type) {\n case 'SingleChoice':\n case 'Text':\n return (\n \n \n {metadata[name]}\n \n \n );\n\n case 'MultiText':\n case 'MultiChoice':\n return (\n \n \n {metadata[name].join(', ')}\n \n \n );\n\n case 'Boolean':\n return (\n \n \n \n );\n\n default:\n return null;\n }\n }\n\n return null;\n};\n\nexport const MetadataTypeProvider: React.ComponentType = (props: DataTypeProviderProps) => (\n \n);\n","import {\n Box,\n Button,\n Chip,\n FormControl,\n FormControlLabel,\n InputLabel,\n MenuItem,\n Select,\n Switch,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { Autocomplete } from '@material-ui/lab';\nimport React, { Fragment, useEffect, useRef, useState } from 'react';\nimport { MetadataEditorProps } from './types';\n\nconst MetadataEditor = ({ metadata, row, onChange, onListChange, onError }: MetadataEditorProps) => {\n const [list, setList] = useState([]);\n const [multiText, setMultiText] = useState('');\n const [error, setError] = useState({});\n const multiTextField = useRef(null);\n\n const handleMultiText = (key) => {\n setList([...list, multiText]);\n setMultiText('');\n multiTextField.current.focus();\n onListChange(key, [...list, multiText], true);\n };\n\n const handleChipDelete = (key, item) => {\n const newList = row.metadata[key].filter((value) => value !== item);\n setList(newList);\n onListChange(key, newList, true);\n };\n\n const handleChange = (e: any, regex: string) => {\n const re = new RegExp(regex);\n const { value, name } = e.target;\n\n if (re.test(value)) {\n setError({\n ...error,\n [name]: false,\n });\n } else {\n setError({\n ...error,\n [name]: true,\n });\n }\n\n onChange(e);\n };\n\n useEffect(() => {\n onError(Object.keys(error).some((v) => error[v] === true));\n }, [error]);\n\n useEffect(() => {\n metadata.map((meta) => {\n if (meta.type === 'MultiText') {\n if (!row.metadata) {\n setList((meta.default as string[]) || []);\n } else {\n setList(row.metadata[meta.key] || []);\n }\n }\n });\n }, []);\n\n return (\n <>\n {metadata &&\n metadata.map((item, i) => {\n const { type, label, key } = item;\n\n if (type === 'Text') {\n return (\n handleChange(e, item.regEx)}\n />\n );\n } else if (type === 'SingleChoice') {\n return (\n \n {label}\n \n {item.options.map((item, index) => (\n \n {item}\n \n ))}\n \n \n );\n } else if (type === 'Boolean') {\n return (\n \n }\n label={label}\n />\n );\n } else if (type === 'MultiChoice') {\n return (\n onListChange(key, values, true)}\n multiple\n renderInput={(props) => (\n \n )}\n style={{\n marginTop: 8,\n }}\n />\n );\n } else if (type === 'MultiText') {\n return (\n \n {list?.length > 0 && {label} list}\n {list?.map((item, i) => (\n \n handleChipDelete(key, item)}\n />\n \n ))}\n\n setMultiText(e.target.value)}\n error={error[key]}\n helperText={error[key] && item.regExError}\n InputProps={{\n endAdornment: (\n \n ),\n }}\n />\n \n );\n }\n\n return null;\n })}\n \n );\n};\n\nexport default MetadataEditor;\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormGroup,\n Grid,\n InputAdornment,\n TextField,\n withStyles,\n} from '@material-ui/core';\nimport { FiberManualRecord } from '@material-ui/icons';\nimport { Autocomplete } from '@material-ui/lab';\nimport React, { useEffect, useState } from 'react';\nimport { passwordStrength } from '../../utils/Utils';\nimport MetadataEditor from './MetadataEditor';\nimport { PopupProps } from './types';\n\nconst NoBorderTextField = withStyles({\n root: {\n '& .MuiOutlinedInput-root': {\n 'color': 'rgba(0, 0, 0, 0.87); !important',\n '& fieldset': {\n border: 'none',\n },\n },\n },\n})(TextField);\n\nconst Popup: React.FC = ({\n row,\n rows,\n onChange,\n onListChange,\n onMetadataChange,\n onApplyChanges,\n onCancelChanges,\n open,\n title,\n users,\n isNew,\n defaultColumns,\n metadata,\n hasPassword,\n userGroupsDefaultSelected,\n}) => {\n const [error, setError] = useState(false);\n const [passwordStrengthColor, setPasswordStrengthColor] = useState('red');\n const [passwordValid, setPasswordValid] = useState(true);\n const [duplicatedId, setDuplicatedId] = useState(false);\n\n const endAdornment = (\n \n \n \n );\n\n const updatePasswordStrengthIndicator = (password: string) => {\n let strengthColor = 'red';\n\n switch (passwordStrength(password)) {\n case 0:\n strengthColor = 'red';\n break;\n case 1:\n strengthColor = 'yellow';\n break;\n case 2:\n strengthColor = 'orange';\n break;\n case 3:\n case 4:\n strengthColor = 'green';\n break;\n default:\n strengthColor = '';\n }\n\n setPasswordStrengthColor(strengthColor);\n };\n\n useEffect(() => {\n if (row.password !== row.repeatPassword) {\n setPasswordValid(false);\n setError(true);\n } else {\n setPasswordValid(true);\n setError(false);\n }\n }, [row.password, row.repeatPassword]);\n\n useEffect(() => {\n updatePasswordStrengthIndicator(row.password as string);\n }, [row.password]);\n\n const handleOnChange = (e) => {\n const found = rows.some((item) => item.id === e.target.value);\n setDuplicatedId(found);\n setError(found);\n\n onChange(e);\n };\n\n return (\n \n {title || ''}\n \n \n \n \n {isNew ? (\n \n ) : (\n \n )}\n\n {hasPassword && (\n <>\n \n {/* Must be 'new-password' to avoid autoComplete. https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Browser_compatibility */}\n \n \n )}\n\n {defaultColumns.map((column, i) => {\n if (column.name === 'userGroups' || column.name === 'users') {\n const defaultUsersSelection = [];\n\n userGroupsDefaultSelected &&\n userGroupsDefaultSelected.forEach((userId) => {\n const found = users.filter((user) => user.id === userId);\n defaultUsersSelection.push(...found);\n });\n\n const currentValues =\n row[column.name] != null\n ? users.filter((f) => row[column.name].includes(f.id) || row[column.name].includes(f.name))\n : column.name === 'userGroups' && userGroupsDefaultSelected\n ? defaultUsersSelection\n : [];\n\n return (\n a.name - b.name) || []}\n value={currentValues}\n getOptionSelected={(option, val) => option.name === val.name}\n getOptionLabel={(option) => option.name}\n onChange={(e, values) =>\n onListChange(\n column.name,\n values.map((v: any) => v.id),\n )\n }\n multiple\n renderInput={(props) => (\n \n )}\n />\n );\n } else {\n if (column.name !== 'id') {\n return (\n \n );\n } else {\n return null;\n }\n }\n })}\n \n \n {metadata && (\n \n \n \n \n \n )}\n \n \n \n \n \n \n \n );\n};\n\nexport default Popup;\n","import { Plugin, Template, TemplateConnector, TemplatePlaceholder } from '@devexpress/dx-react-core';\nimport React from 'react';\nimport { PopupEditingProps } from './types';\n\nconst PopupEditing = React.memo(\n ({\n popupComponent: Popup,\n title,\n allUsers,\n defaultColumns,\n metadata,\n onSave,\n hasPassword,\n userGroupsDefaultSelected,\n }: PopupEditingProps) => (\n \n \n \n \n ),\n);\n\nexport default PopupEditing;\n","import { DataTypeProvider, DataTypeProviderProps } from '@devexpress/dx-react-grid';\nimport { Tooltip, Typography, Zoom } from '@material-ui/core';\nimport React from 'react';\n\nexport const UsersFormatter = ({ value }) => {\n if (!value) return null;\n\n const list = value?.join(', ');\n\n return (\n \n \n {list}\n \n \n );\n};\n\nexport const UsersTypeProvider: React.ComponentType = (props: DataTypeProviderProps) => (\n \n);\n"],"sourceRoot":""}