{"version":3,"sources":["modules/time-recording/state/initial.ts","util/collection.ts","util/index.ts","modules/stock-management/icons/scan.svg","modules/time-recording/state/index.ts","api/auth.ts","service/auth.ts","service/TokenStore.ts","api/api.ts","util/offline.ts","modules/time-recording/state/action/manual.ts","modules/time-recording/state/action/transaction.ts","util/uuid.ts","state/ui/actions.ts","state/ui/busy/index.ts","state/ui/index.ts","state/user/action.ts","state/user/index.ts","modules/stock-management/api/StockApi.ts","modules/stock-management/constants/error.ts","modules/stock-management/state/action/item/fetch.ts","modules/stock-management/state/action/item/update.ts","modules/stock-management/state/action.ts","modules/stock-management/state/reducer/inventory.ts","modules/stock-management/state/action/debug.ts","modules/stock-management/state/reducer/relocation.ts","modules/stock-management/state/reducer/label.ts","modules/stock-management/state/reducer/module.ts","modules/stock-management/state/reducer/index.ts","state/module/index.ts","state/reducers.ts","state/configureStore.ts","state/actions.ts","state/index.ts","views/Overview.tsx","modules/helper.tsx","modules/time-recording/components/EventList.tsx","modules/time-recording/views/Manuel/DateTitle.tsx","modules/time-recording/views/Manuel/AlertDialog.tsx","modules/time-recording/views/Manuel/DeleteAction.tsx","modules/time-recording/views/Manuel/AddDialog.tsx","components/RadioButtonGroup.tsx","components/RadioButton.tsx","util/date.ts","modules/time-recording/events/index.ts","modules/time-recording/views/CheckinForm.tsx","context/UsernameContext.ts","modules/time-recording/views/Manuel/CheckinDialog.tsx","modules/time-recording/views/Manuel.tsx","modules/time-recording/views/CurrentJob/AddOrder.tsx","modules/time-recording/views/CurrentJob/AddProject.tsx","modules/time-recording/views/CurrentJob/AddOther.tsx","modules/time-recording/views/CurrentJob/index.tsx","modules/time-recording/views/CheckInOut.tsx","modules/time-recording/views/Auto.tsx","modules/time-recording/views/Index.tsx","modules/time-recording/index.tsx","modules/time-recording/config.ts","components/SoftBlink.tsx","util/scanner.ts","modules/stock-management/views/inventory/Inventory.tsx","modules/stock-management/views/inventory/SelectDraft.tsx","modules/stock-management/views/inventory/Main.tsx","modules/stock-management/state/action/relocation/index.ts","modules/stock-management/views/relocation/Relocation.tsx","hooks/useFetch.ts","hooks/useAuthenticatedFetch.ts","context/ModuleContext.ts","modules/stock-management/views/label/AdditionalFields.tsx","modules/stock-management/views/label/LabelView.tsx","modules/stock-management/views/inquiry/InquiryView.tsx","modules/stock-management/views/productlabel/ProductLabel.tsx","modules/stock-management/views/Main.tsx","modules/stock-management/index.tsx","modules/stock-management/config.ts","modules/tools/views/base36/ItemList.tsx","modules/tools/views/base36/FeatureList.tsx","modules/tools/views/base36/ManuelInput.tsx","util/number.ts","modules/tools/atoms/base36.ts","modules/tools/views/base36/Index.tsx","modules/tools/views/delivery/DeliveryCard.tsx","modules/tools/views/delivery/Index.tsx","modules/tools/views/Main.tsx","modules/tools/index.tsx","modules/tools/state/index.ts","hooks/useLocation.ts","modules/tools/views/base36/Tabs.tsx","modules/tools/components/AppBarTabs.tsx","modules/tools/config.ts","modules/config.ts","components/TitleBar.tsx","components/Center.tsx","views/Login.tsx","service/UpdateNotificationService.ts","components/UpdateNotification.tsx","components/NotificationManager.tsx","util/role.ts","views/Main.tsx","components/AppDrawer.tsx","theme.ts","app.base.tsx","serviceWorker.js","index.ts"],"names":["transactionType","id","label","type","lang","next","absenceType","elementType","activityType","toMap","nodes","keySelector","reduce","result","node","assertNever","value","module","exports","toOrderedById","collection","byId","list","map","initialState","data","checkinout","x","absence","activity","element","transaction","current","checkin","manual","mergeEvents","a","b","index","v","b0","a0","deleted","push","getOrderedList","state","filter","item","undefined","getCurrentTransaction","username","getCheckinTypes","getAbsenceTypes","getElementTypes","getActivityTypes","getCheckin","getManualEntries","reducer","action","produce","draft","TRANSACTION_OPEN","event","events","TRANSACTION_CLOSE","TRANSACTION_EVENT_ADD","entry","find","transactionId","Auth","store","client_","token_","store_","callbacks_","this","ClientOAuth2","clientId","clientSecret","authorizationUri","accessTokenUri","scopes","callback","c","forEach","cb","load","token","createToken","decoded","jwt_decode","accessToken","exp","expires","Date","save","clear","password","owner","getToken","saveToken","emit","refresh","logout","Error","af","input","init","req","Request","credentials","headers","set","fetch","response","status","json","body","error","console","e","sub","role","auth","key_","client","dataToken","localStorage","setItem","JSON","stringify","Promise","resolve","getItem","parse","reject","removeItem","API_BASE_URL","replace","getAuthenticatedFetch","Api","request","url","method","Headers","createOfflineMeta","offline","effect","fetchManualTimeEntries","dispatch","ok","fetchManualTimeEntriesSuccess","statusText","FetchManualTimeEntriesFailure","deleteManuelTimeEntry","meta","addManualTimeEntry","transactionOpen","generateUuid","transactionClose","transactionEventAdd","fetchTransactions","then","log","UUID","format","drawerOpen","open","busy","isBusyAction","uiMeta","busyReducer","drawer","uiReducer","userLoginSuccess","roles","pending","failedLogin","user","defaultHeaders","mode","defaultHandler","apiCall","uri","options","handler","message","responseBody","errorMessage","TypeError","getDrafts","warehouse","barcode","getQty","location","sku","moveItem","from","to","quantity","qty","updateItem","fetchPendingItems","res","confirmLocationComplete","stockFetchItemFailure","notification","severity","source","stockFetchItemSuccess","stockUpdateItemSuccess","draftId","stockUpdateItemFailure","getErrorReason","errorCode","i18n","stockDraftsLoadSuccess","drafts","stockDismissError","stockFetchPendingItemsSuccess","items","stockFetchPendingItemsFailure","stockConfirmLocationCompleteSuccess","stockConfirmLocationCompleteFailure","fetchingItem","updatingItem","notifications","scanned","previousLocation","pendingItems","err","currentItem","printers","ui","fetchingLabels","fetchingPrinters","errorLabels","errorPrinters","errorLabelRequest","requestingLabel","toString","combineReducers","inventory","relocation","length","retarget","fn","selector","t","getInventoryCurrentWarehouse","s","getInventoryDrafts","getInventoryCurrentItem","getInventoryScannedItem","getInventoryScannedLocation","getInventoryPreviousLocation","getInventoryPendingItems","getInventoryIsLoadingItem","getInventoryIsUpdatingItem","getInventoryNotifications","getCurrentItem","getRelocationRequest","getModuleNotifications","timeRecording","stockManagement","_version","rootReducer","offlineConfig","discard","_action","_retries","logger","createLogger","collapsed","isBusy","isBusy_","getDrawerOpenState","getDrawerOpenState_","getUsername","getUsername_","isLoggedIn","isLoggedIn_","getLoginPending","getLoginPending_","getLoginFailed","getLoginFailed_","getUserRoles","getUserRoles_","stateVersion","upgradeTransform","createTransform","inState","key","outState","info","createStore","compose","applyMiddleware","thunkMiddleware","persistOptions","transforms","Overview","style","padding","variant","gutterBottom","React","createOfflineStoreEnhancer","config","keyPrefix","createModuleStore","moduleKey","version","middleware","createModule","App","props","formatEventTime","date","EventList","activityTypes","orderNo","elementTypes","absenceTypes","currentEvent","restTitle","currentTitle","getSecondaryText","getSecondaryAction","secondaryAction","dense","backgroundColor","green","getEventIcon","aria-label","primary","formatEventTitle","secondary","connect","DateTitle","onClick","fullWidth","InputProps","readOnly","fontSize","inputProps","startAdornment","position","marginTop","AlertDialog","onConfirm","onHandleClose","onClose","aria-labelledby","aria-describedby","color","red","autoFocus","DeleteAction","clickHandler","useMemo","isValidNumber","q","isNaN","fieldStyle","useOutlinedSelect","useState","labelWidth","setLabelWidth","useCallback","findDOMNode","getBoundingClientRect","width","AddOrderForm","onChange","ref","parseInt","target","elementNumber","disabled","endAdornment","AddOtherForm","AddAbsence","isEntryValid","withMobileDialog","fullScreen","day","setEntry","onCancel","onAddEntry","RadioButtonGroup","handleChange","currentTarget","title","name","required","component","children","RadioButton","control","formatDate","toISOString","checkIn","createOtherActivityEvent","createOrderActivityEvent","createProjectActivityEvent","Block","styled","div","ButtonBar","CheckInOut","onCheckinChange","setState","onAbsenceChange","onCheckinClick","onCheckin","ownProps","UsernameContext","CheckinDialog","setOpen","onCheckinCallback","useEffect","CheckinForm","Manuel","dayjs","startOf","addEvent","onDeleteClick","eventToDelete","onHandleDeleteCancel","onHandleDelete","deleteEntry","onHandleAddCancel","onHandleAdd","addEntry","formatDuration","duration","Math","floor","leftPad","rest","fetchEntries","classes","entries","minDate","subtract","toDate","maxDate","add","now","filteredEntries","isSame","isCheckedIn","findIndex","utils","DayjsUtils","className","root","picker","TextFieldComponent","fab","withStyles","theme","paddingTop","spacing","unit","paddingBottom","mixins","gutters","bottom","right","AddOrder","onOrderNumberChange","onAdd","history","goBack","marginLeft","AddOther","onElementTypeChange","selectedActivity","onActivityChange","activities","LowerRightButton","views","urlPart","view","icon","ShoppingCart","AddProject","Receipt","Flag","CurrentJob","newDialogOpen","onNewDialogClose","onNewDialogChoose","match","onAddClick","Icon","button","reverse","Switch","View","Route","path","render","renderEventList","renderNewDialog","renderViews","onCheckoutClick","absenceLabel","lastActivityDate","paragraph","renderCheckin","renderCheckout","checkedIn","MyBottomNavigation","BottomNavigation","MainView","Auto","currentView","Alarm","default","Assignment","onValueChange","_event","getPath","exact","Redirect","pathname","indexOf","renderView","getActiveView","showLabels","NavigationButton","Index","urlAuto","urlManual","Provider","renderProps","TimeRecordingModule","Timer","TimeRecording","kf","keyframes","SoftBlink","easing","Scanner","onSuccess","detectType","scanHandle","scannedSymbols","isContainer","substr","toUpperCase","onKeyup","ch","window","clearTimeout","shiftKey","setTimeout","scanTimeout","getBarcodeType","addEventListener","removeEventListener","symbols","control1","control2","ScanInput","container","alignItems","xs","Inventory","scanner","confirmChecked","scannedBardcode","showLoader","scanItem","scanLocation","handleCloseDialog","scanClear","containerIsClosed","showConfirmAlreadyCountedDialog","accept","showAlreadyCountedDialog","confirm","handleSaveQuantity","params","scannedItem","scannedLocation","overrideQuantity","previouslyCounted","dialogResult","parseFloat","showDialog","tracking","loadingItem","showDialogLoader","onQuantityChange","Number","renderLoader","left","top","marginRight","onConfirmNullClick","onCancelNullClick","revertLocation","onPropsChanged","destroy","nextProps","clearPreviousLocationAndItems","fetchItem","n","flex","onKeyDown","checked","_","fontWeight","renderAlreadyCounted","renderLocationChanged","justify","textAlign","src","scanIcon","alt","renderDialog","stockScannedItem","stockScannedLocation","qtyInStockLoc","stockFetchItem","_stockUpdateItem","warn","stockUpdateItem","_stockFetchPendingItems","stockFetchPendingItems","_stockConfirmLocationComplete","stockConfirmLocationComplete","SelectDraft","navigate","setDraft","select","size","ViewBase","StockManagement","navigateToView","relativePath","draftsLoad","nextWarehouse","prefix","stockDraftsLoad","dismissError","clearState","stockRelocationFetchItemSuccess","stockRelocationFetchItemFailure","stockRelocationCommitSuccess","stockRelocationCommitFailure","Relocation","qtyInput","clearNotificationsHandle","quantityInput","onItemScanned","step","getActiveStep","setSourceLocation","setDestLocation","onQuantityKeypress","isValidQuantityInput","test","onQuantityCommit","setQuantity","onCommit","commit","onClear","onItemFetched","clearNotifications","focus","locationDest","locationSource","activeStep","orientation","elevation","completed","toFixed","marginBottom","inputRef","catch","stockRelocationFetchItem","stockRelocationSetItem","stockRelocationSetSourceLocation","stockRelocationSetDestinationLocation","stockRelocationSetQuantity","_stockRelocationCommit","stockRelocationCommit","fetchReducer","isLoading","createUseFetch","useReducer","cancelled","useAuthenticatedFetch","ModuleContext","toast","timeout","DateFieldRender","field","setValue","onChangeCallback","utcOffset","margin","displayLabel","NumberFieldRender","defaultValue","StringFieldRender","ChoiceFieldRender","values","AdditionalFields","fields","setValues","setFieldValue","fieldName","newValues","defaultValues","f","useChangeCallback","useFormState","initialValue","useErrorToast","errorObject","LabelView","context","useContext","useRef","confirmedBarCode","setConfirmedBarcode","onBarcodeChanged","setBarcode","onQtyChanged","onLabelTypeChanged","setLabel","printer","onPrinterChanged","setPrinter","additionaValues","setAdditionalValues","labelSku","additionalFields","qtyIsValid","onSerialNumberKeypress","labelTypes","isLoadingLabelTypes","labelTypesError","configuration","isLoadingConfiguration","configurationError","defaultQty","loadingIndicator","display","justifyContent","flexGrow","onKeyPress","flexShrink","helperText","getId","performInquiry","text","InquiryItemRow","active","setActive","onMouseDown","onMouseUp","onTouchStart","onTouchEnd","selected","align","prioDate","searchTypeEnum","errorBar","palette","dark","setResult","setBusy","setErrorMessage","showDetails","setShowDetails","finally","onSubmit","preventDefault","onItemClick","itemName","locationName","lastUpdate","statusBalanceId","inputMode","stopPropagation","onKeyUp","line","ContentProps","autoHideDuration","qtySmall","onSmallQtyChanged","setQtySmall","qtyLarge","onLargeQtyChanged","setQtyLarge","qtyBoxSmall","onBoxSmallQtyChanged","setQtyBoxSmall","qtyBoxLarge","onBoxLargeQtyChanged","setQtyBoxLarge","itemNumber","onItemNumberChanged","setItemNumber","Item","searchType","setTypeOfSearch","onItemBlur","resEdition","edition","row","Manufacturing","Purchase","onBlur","defaultLoc","snackbarStyles","success","CheckCircleIcon","warning","amber","WarningIcon","ErrorIcon","CustomSnackBarContent","setCurrentWarehouse","renderSnackbar","renderNavigationButtons","buttons","route","hasRole","mnotifications","InventoryMain","Label","Inquiry","ProductLabel","stockSetWarehouse","Stock","module_","Domain","ItemList","ItemListItem","itemDescription","FeatureList","features","onFeatureCheck","onCheckboxChange","feature","i","bit","getBase2String","base36","grouping","maxSize","padStart","firstGroupLen","groups","join","formatGroupedBinary","ManualInput","base36value","binaryValue","setBinaryValue","searchStatusAtom","atom","additionalItemsCount","itemsCount","fetchFeatures","maxWidth","background","paper","code","setSearchStatus","useSetRecoilState","setbase36value","setBusyIndicatorVisible","DeliveryContext","useQuery","featuresConfiguration","featureIsLoading","lookupResult","itemsIsLoading","on","additionalItems","featureList","fc","baseUrl","DeliveryCard","delivery","deliveryNumber","weights","setWeights","setTracking","addParcel","ws","onWeightChange","es","arr","slice","update","onPrintLabelsClick","w","parcels","p","parcelNumber","name1","name2","name3","street1","zipCode","city","countryNum","weight","ParcelWeight","number","onTextFieldChange","setDelivery","query","setQuery","keyCode","queryClient","QueryClient","Main","onFeaturesClick","onDeliveryClick","Features","Delivery","blacklist","ToolsModule","useLocation","setLocation","listen","tabRoutes","isMatch","matchUrl","matchPath","useLocationTabs","urls","max","getUrl","joinUrl","Base36Tabs","useRecoilValue","activeTab","AppBarTabs","MainComponent","tabs","createElement","withRouter","TitleBar","toggleDrawer","isDrawerOpen","modules","Center","fullHeight","LoginForm","Login","passwordInput","onLoginClick","login","onUsernameChange","onPasswordChange","loginFailed","loginDisabled","loginPending","reason","callbacks","styles","yellowButton","yellow","YellowButton","other","UpdateNotification","updateAvailable","hasUpdate","setHasUpdate","UpdateNotificationService","useUpdateAvailable","anchorOrigin","vertical","horizontal","reload","variantIcon","InfoIcon","SnackbarIcon","cx","iconVariant","NotificationSnackbarContent","NotificationManagerWithStyles","opacity","messages","onDismiss","snacks","isAllowed","allowedRoles","wilcards","substring","openDrawer","closeDrawer","drawerIsOpen","contextData","onDismissNotification","m","viewProps","loggedIn","userRoles","Component","moduleRoutes","AppDrawer","onModuleClick","onLogoutClick","onCheckForUpdate","navigator","serviceWorker","getRegistration","reg","onPrinterSetup","refreshToken","predicate","process","env","guldmann_mobility_env","createMuiTheme","main","document","visibilityState","isAuthenticated","onLine","checkAuthPromise","loadToken","tokenData","jwtDecode","isLocalhost","Boolean","hostname","registerValidSW","swUrl","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","app","getElementById","URL","href","origin","contentType","get","ready","unregister","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.5c98f479.chunk.js","sourcesContent":["import { CheckInOut, Absence, JobElement, JobActivity } from \"./typings\";\n\nexport const transactionType: CheckInOut[] = [\n { id: \"A0\", label: \"Indstempling normal\", type: \"in\", lang: \"da-dk\", next: \"B0\" },\n { id: \"B0\", label: \"Udstempling normal\", type: \"out\", lang: \"da-dk\" },\n { id: \"C0\", label: \"Indstempling overtid mod betaling\", type: \"in\", lang: \"da-dk\", next: \"D0\" },\n { id: \"D0\", label: \"Udstempling overtid mod betaling\", type: \"out\", lang: \"da-dk\" },\n { id: \"E0\", label: \"Indstempling overtid mod afspadsering\", type: \"in\", lang: \"da-dk\", next: \"F0\" },\n { id: \"F0\", label: \"Udstempling overtid mod afspadsering\", type: \"out\", lang: \"da-dk\" }\n];\n\nexport const absenceType: Absence[] = [\n { \"id\": \"1\", \"lang\": \"da-dk\", \"label\": \"Ferie\" },\n { \"id\": \"2\", \"lang\": \"da-dk\", \"label\": \"Ferie/fri\" },\n { \"id\": \"3\", \"lang\": \"da-dk\", \"label\": \"Barn 1. sygedag / hospitalsophold\" },\n { \"id\": \"4\", \"lang\": \"da-dk\", \"label\": \"Sygdom (ansat > 6 mdr.)\" },\n { \"id\": \"5\", \"lang\": \"da-dk\", \"label\": \"Sygdom (ansat < 6 mdr.)\" },\n { \"id\": \"6\", \"lang\": \"da-dk\", \"label\": \"Barsel\" },\n { \"id\": \"7\", \"lang\": \"da-dk\", \"label\": \"Afspadsering\" },\n { \"id\": \"8\", \"lang\": \"da-dk\", \"label\": \"Fri uden løn\" },\n { \"id\": \"9\", \"lang\": \"da-dk\", \"label\": \"Fridag 31/12\" },\n { \"id\": \"10\", \"lang\": \"da-dk\", \"label\": \"Blodbank, begravelse\" },\n { \"id\": \"11\", \"lang\": \"da-dk\", \"label\": \"Arbejdsulykke\" },\n { \"id\": \"12\", \"lang\": \"da-dk\", \"label\": \"Plejeorlov\" },\n { \"id\": \"13\", \"lang\": \"da-dk\", \"label\": \"Flex afholdelse\" },\n { \"id\": \"14\", \"lang\": \"da-dk\", \"label\": \"Flexjob ordning\" },\n { \"id\": \"15\", \"lang\": \"da-dk\", \"label\": \"Ledighedsdage\" },\n { \"id\": \"16\", \"lang\": \"da-dk\", \"label\": \"Børneomsorgsdag\" }\n];\n\nexport const elementType: JobElement[] = [\n { \"id\": \"120\", \"lang\": \"da-dk\", \"label\": \"Timer\" },\n { \"id\": \"122\", \"lang\": \"da-dk\", \"label\": \"Køretid\" }\n];\n\nexport const activityType: JobActivity[] = [\n { \"id\": \"4\", \"lang\": \"da-dk\", \"label\": \"Møde og administration\" },\n { \"id\": \"6\", \"lang\": \"da-dk\", \"label\": \"Status og optælling\" },\n { \"id\": \"7\", \"lang\": \"da-dk\", \"label\": \"Oprydning\" },\n { \"id\": \"10\", \"lang\": \"da-dk\", \"label\": \"Uddannelse\" },\n { \"id\": \"13\", \"lang\": \"da-dk\", \"label\": \"RMA\" },\n { \"id\": \"19\", \"lang\": \"da-dk\", \"label\": \"Vedligeholdelse\" }\n];","export const toMap = (nodes: TNode[], keySelector: (node: TNode) => string | number) => \n nodes.reduce((result, node) => { \n result[keySelector(node)] = node;\n return result;\n }, {} as { [id: string]: TNode });\n\nexport const groupBy = (nodes: TNode[], keySelector: (node: TNode) => string) => \n nodes.reduce((result, node) => { \n result[keySelector(node)] = [...(result[keySelector(node)] || []), node];\n return result;\n }, {} as { [id: string]: TNode[] });\n\nexport const getObjectValues = (obj: { [id: string]: T } ): T[] =>\n Object.keys(obj).map(key => obj[key]);","export const assertNever = (value: never): void => {};\n\ntype FnAction = (...args: any[]) => void;\nexport const debounce = (timeout: number, f: T): T => \n{\n let handle: number | undefined = undefined;\n\n function wrap()\n {\n const args = Array.prototype.slice.call(arguments);\n f.apply(f, args);\n }\n\n function fn()\n {\n window.clearTimeout(handle);\n handle = window.setTimeout(wrap, timeout);\n }\n\n return (fn as T);\n}","module.exports = __webpack_public_path__ + \"static/media/scan.2109c7c0.svg\";","import { produce } from \"immer\";\nimport { toMap } from \"../../../util/collection\";\nimport { TimeRecordingState, Transaction, OrderedById, Event, ManualEntryEvent } from \"./typings\";\nimport { transactionType, absenceType, elementType, activityType } from \"./initial\";\nimport { TRANSACTION_OPEN, TransactionOpenAction, TRANSACTION_EVENT_ADD, TransactionEventAddAction, \n FetchManualTimeEntriesSuccessAction, DeleteManuelTimeEntryAction, \n AddManualTimeEntryAction } from \"./action\";\nimport { TRANSACTION_CLOSE, TransactionCloseAction } from \"./action\";\nimport { assertNever } from \"../../../util\";\n\nconst toOrderedById = (collection: T[], keySelector: (item: T) => string) => ({\n byId: toMap(collection, keySelector),\n list: collection.map(keySelector)\n});\n\nconst initialState: TimeRecordingState =\n{\n data: \n {\n checkinout: toOrderedById(transactionType, x => x.id),\n absence: toOrderedById(absenceType, x => x.id),\n activity: toOrderedById(activityType, x => x.id),\n element: toOrderedById(elementType, x => x.id)\n },\n \n transaction: {\n current: {},\n byId: {},\n list: []\n },\n\n checkin: {},\n \n manual: {},\n}\n\ntype Action = \n TransactionOpenAction | TransactionCloseAction | TransactionEventAddAction \n | FetchManualTimeEntriesSuccessAction\n | DeleteManuelTimeEntryAction\n | AddManualTimeEntryAction\n ;\n\ntype Dict = { [id: string]: T };\nconst createDict = (ts: T[], keySelector: (t: T) => string): Dict => \n ts.reduce((result: Dict, v) => { result[keySelector(v)] = v; return result; }, {});\n\nconst mergeEvents = (a: ManualEntryEvent[], b: ManualEntryEvent[]): ManualEntryEvent[] => \n{\n const index = createDict(a, x => x.id);\n for(let b0 of b)\n {\n if(b0.id in index)\n {\n const a0 = index[b0.id];\n a0.deleted = a0.deleted || b0.deleted;\n }\n else\n {\n a.push(b0);\n }\n }\n return a;\n}\n\nconst reducer = (state = initialState, action: Action): TimeRecordingState => produce(state, draft => \n{\n if(action.type === TRANSACTION_OPEN)\n {\n const { id, event, username } = action;\n draft.transaction.current[username] = id;\n draft.transaction.byId[id] = { id, events: [event], username };\n draft.transaction.list.push(id);\n return;\n }\n\n if(action.type === TRANSACTION_CLOSE)\n {\n const { id, username } = action;\n delete draft.transaction.current[username];\n draft.transaction.byId[id] = { ...draft.transaction.byId[id] };\n return;\n }\n\n if(action.type === TRANSACTION_EVENT_ADD)\n {\n const { event, transactionId } = action;\n draft.transaction.byId[transactionId].events.push(event);\n return;\n }\n\n if (action.type === \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\")\n {\n const { events, username } = action;\n draft.manual[username] = mergeEvents(draft.manual[username] || [], events);\n return;\n }\n\n if (action.type === \"ADD_MANUAL_TIME_ENTRY\")\n {\n const { username, entry } = action;\n draft.manual[username] = draft.manual[username] || [];\n draft.manual[username].push(entry);\n return;\n }\n\n if (action.type === \"DELETE_MANUEL_TIME_ENTRY\")\n {\n const { id, username } = action;\n if(username in draft.manual)\n {\n const entry = draft.manual[username].find(v => v.id === id)\n if(entry !== undefined)\n {\n entry.deleted = true;\n }\n }\n return;\n }\n \n assertNever(action);\n});\n\nconst getOrderedList = (state: OrderedById) =>\n state.list.map(id => state.byId[id]).filter(item => item !== undefined);\n\nexport const getTransactions = (state: TimeRecordingState): Transaction[] =>\n state.transaction.list.map(id => state.transaction.byId[id]);\n\nexport const getTransaction = (state: TimeRecordingState, transactionId: string) =>\n state.transaction.byId[transactionId];\n\nexport const getCurrentTransaction = (username: string, state: TimeRecordingState): Transaction | undefined => \n{\n const { current, byId } = state.transaction;\n return current[username] ? byId[current[username]] : undefined;\n}\n\nexport const getEvents = (state: TimeRecordingState, transactionId: string): Event[] =>\n{\n const transaction = getTransaction(state, transactionId);\n return (transaction === undefined) ? [] : transaction.events;\n}\n\nexport const getCheckinTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.checkinout);\n\nexport const getAbsenceTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.absence);\n\nexport const getElementTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.element);\n\nexport const getActivityTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.activity);\n\nexport const getCheckin = (state: TimeRecordingState) => \n state.checkin.type;\n\nexport const getManualEntries = (state: TimeRecordingState, username: string) => \n state.manual[username];\n\nexport * from \"./typings\";\nexport default reducer;","import ClientOAuth2 from \"client-oauth2\";\nimport { Token } from \"client-oauth2\";\nimport { TokenStore } from \"../service/TokenStore\";\nimport jwt_decode from \"jwt-decode\";\n\ninterface JwtToken\n{\n sub: string;\n role?: string[] | string;\n}\n\nclass Auth\n{\n private client_: ClientOAuth2;\n private token_?: Token;\n private store_?: TokenStore;\n private callbacks_: { [key: string]: Function[] } = {};\n\n constructor(store?: TokenStore) \n {\n this.client_ = new ClientOAuth2({\n clientId: \"mobility.app\",\n clientSecret: \"Motedulghot9\",\n authorizationUri: \"https://identity.guldmann.com/connect/authorize\",\n accessTokenUri: \"https://identity.guldmann.com/connect/token\",\n scopes: [\"mobility\", \"offline_access\"]\n });\n this.store_ = store;\n }\n\n // addEventListener(type: \"logout\", callback: () => void);\n addEventListener(type: string, callback: () => void)\n {\n (this.callbacks_[type] = this.callbacks_[type] || []).push(callback);\n }\n\n removeEventListener(type: string, callback: () => void)\n {\n if(this.callbacks_[type])\n {\n this.callbacks_[type] = this.callbacks_[type].filter(c => c !== callback);\n }\n }\n\n private emit(type: string) \n {\n if(this.callbacks_[type])\n {\n this.callbacks_[type].forEach(cb => cb());\n }\n }\n\n async loadToken()\n {\n if(this.store_ !== undefined)\n {\n const token = await this.store_.load();\n if(token !== null)\n {\n this.token_ = this.client_.createToken(token.data);\n\n const decoded: any = jwt_decode(token.accessToken);\n if(decoded && typeof decoded.exp === \"number\")\n {\n // XXX token.expires\n (this.token_ as any).expires = new Date(decoded.exp * 1000);\n }\n else \n {\n // XXX token.expires\n (this.token_ as any).expires = new Date(0);\n }\n }\n }\n }\n\n private async saveToken()\n {\n if(this.store_ !== undefined)\n {\n if(this.token !== undefined)\n {\n await this.store_.save(this.token);\n }\n else\n {\n this.store_.clear();\n }\n }\n }\n\n async login(username: string, password: string): Promise\n {\n const token = await this.client_.owner.getToken(username, password);\n this.token_ = token;\n await this.saveToken();\n this.emit(\"login\");\n }\n\n async logout(): Promise\n {\n this.token_ = undefined;\n await this.saveToken();\n this.emit(\"logout\");\n }\n\n get token(): Token | undefined\n {\n return this.token_;\n }\n\n async isAuthenticated() : Promise\n {\n if(this.token_ === undefined)\n {\n return false;\n }\n\n // XXX token.expireds\n if((this.token_ as any).expires < new Date())\n {\n try \n {\n await this.refresh();\n }\n catch (e)\n {\n this.logout();\n await this.logout();\n return false;\n }\n }\n return true;\n }\n\n async refresh()\n {\n if(this.token_ === undefined)\n {\n throw Error(\"You must call login before using fetch with authentication\");\n }\n this.token_ = await this.token_.refresh();\n await this.saveToken();\n }\n\n get username(): string | undefined {\n if(this.token_)\n {\n try \n {\n const token = jwt_decode(this.token_.accessToken) as JwtToken;\n return token.sub;\n }\n catch(e)\n {\n console.error(e);\n }\n }\n return undefined;\n }\n\n get roles() : string[]\n {\n if(this.token_)\n {\n try \n {\n const token = jwt_decode(this.token_.accessToken) as JwtToken;\n if(typeof token.role === \"string\")\n {\n return [token.role];\n }\n return token.role || [];\n }\n catch(e)\n {\n console.error(e);\n }\n }\n return [];\n }\n\n getAuthenticatedFetch() \n {\n const af = async (input: Request | string, init?: RequestInit): Promise =>\n {\n if(this.token_ === undefined)\n {\n throw Error(\"You must call login before using fetch with authentication\");\n }\n\n const req: Request = new Request(input, { ...(init || {}), credentials: \"include\", });\n req.headers.set(\"Authorization\", `Bearer ${this.token_.accessToken}`);\n try \n {\n const response = await fetch(req);\n if(response.status === 401) // access-token expired\n {\n await this.refresh();\n return await af(input, init);\n }\n if(response.status === 400)\n {\n const body = await response.json();\n await this.logout();\n throw body.error; // invalid_grant, etc...\n }\n return response;\n }\n catch(e)\n {\n console.error({e});\n throw e;\n }\n }\n return af;\n }\n}\n\nexport default Auth;","import Auth from \"../api/auth\";\nimport { LocalStorageTokenStore } from \"./TokenStore\";\n\nconst auth = new Auth(new LocalStorageTokenStore());\n\nexport default auth;\n","import { Token } from \"client-oauth2\";\n\nexport interface TokenStore\n{\n save(token: Token): Promise;\n load(): Promise;\n clear(): Promise;\n}\n\nexport class LocalStorageTokenStore implements TokenStore\n{\n private key_: string = \"___TOKEN\";\n\n save(token: Token): Promise \n {\n const { client, ...dataToken } = token;\n localStorage.setItem(this.key_, JSON.stringify(dataToken));\n return Promise.resolve();\n } \n \n load(): Promise \n {\n const json = localStorage.getItem(this.key_);\n if(json === null)\n {\n return Promise.resolve(null);\n }\n try\n {\n const token = JSON.parse(json) as Token;\n return Promise.resolve(token);\n }\n catch(e)\n {\n return Promise.reject(e);\n }\n }\n\n clear(): Promise\n {\n localStorage.removeItem(this.key_);\n return Promise.resolve();\n }\n}\n","import auth from \"../service/auth\";\n\n// it is possible to set the localStorage \"guldmann_mobility:base_url\" key to an url to use\n// or it will default to https://mobility.guldmann.com\nexport const API_BASE_URL = (localStorage.getItem(\"guldmann_mobility:base_url\") || \"/api\").replace(/\\/+$/, \"\");\n\nconst fetch = auth.getAuthenticatedFetch(); //(typeof UNAUTHENTICATED_FETCH !== \"undefined\" && UNAUTHENTICATED_FETCH) ? window.fetch : auth.getAuthenticatedFetch();\n\nclass Api\n{\n static request = (url: string, method = \"GET\", body?: any) =>\n {\n const init: RequestInit = { method };\n if(body !== undefined)\n {\n init.body = JSON.stringify(body);\n init.headers = new Headers({\n \"Content-Type\": \"application/json\"\n });\n }\n return fetch(`${API_BASE_URL}/${url}`, init);\n }\n}\n\nexport default Api;","import { OfflineAction } from \"../types\";\n\nexport const createOfflineMeta = (username: string, url: string, method = \"GET\", body?: any): OfflineAction[\"meta\"] => ({\n offline: { \n effect: { username, url, method, body }\n }\n});\n","import { ManualEntryEvent } from \"..\";\nimport Api from \"../../../../api/api\";\nimport { createOfflineMeta } from \"../../../../util/offline\";\nimport { OfflineAction } from \"../../../../types\";\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES\n//\nexport const FETCH_MANUAL_TIME_ENTRIES = \"FETCH_MANUAL_TIME_ENTRIES\";\nexport interface FetchManualTimeEntriesAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES\";\n}\n\nexport const fetchManualTimeEntries = (username: string) => (dispatch: any) => (async () => \n{\n const initAction: FetchManualTimeEntriesAction = { type: \"FETCH_MANUAL_TIME_ENTRIES\" };\n dispatch(initAction);\n try\n {\n const response = await Api.request(\"time-tracking/manual\");\n if (response.ok)\n {\n const events: ManualEntryEvent[] = await response.json();\n dispatch(fetchManualTimeEntriesSuccess(username, events));\n }\n else\n {\n throw response.statusText;\n }\n }\n catch(e)\n {\n dispatch(FetchManualTimeEntriesFailure(e));\n }\n})();\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES_SUCCESS\n//\nexport const FETCH_MANUAL_TIME_ENTRIES_SUCCESS = \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\";\nexport interface FetchManualTimeEntriesSuccessAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\";\n username: string;\n events: ManualEntryEvent[];\n}\nexport const fetchManualTimeEntriesSuccess = (username: string, events: ManualEntryEvent[]): FetchManualTimeEntriesSuccessAction => ({\n type: FETCH_MANUAL_TIME_ENTRIES_SUCCESS,\n username,\n events\n});\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES_FAILURE\n//\nexport const FETCH_MANUAL_TIME_ENTRIES_FAILURE = \"FETCH_MANUAL_TIME_ENTRIES_FAILURE\";\nexport interface FetchManualTimeEntriesFailureAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES_FAILURE\";\n error: any;\n}\nexport const FetchManualTimeEntriesFailure = (error: any): FetchManualTimeEntriesFailureAction => ({\n type: FETCH_MANUAL_TIME_ENTRIES_FAILURE,\n error\n});\n\n//\n// Action: DELETE_MANUEL_TIME_ENTRY\n//\nexport const DELETE_MANUEL_TIME_ENTRY = \"DELETE_MANUEL_TIME_ENTRY\";\nexport interface DeleteManuelTimeEntryAction extends OfflineAction\n{\n type: \"DELETE_MANUEL_TIME_ENTRY\";\n id: string;\n username: string;\n}\nexport const deleteManuelTimeEntry = (username: string, id: string): DeleteManuelTimeEntryAction => ({\n type: DELETE_MANUEL_TIME_ENTRY,\n id,\n username,\n meta: createOfflineMeta(username, `time-tracking/manual/${id}`, \"DELETE\")\n});\n\n//\n// Action: ADD_MANUAL_TIME_ENTRY\n//\nexport const ADD_MANUAL_TIME_ENTRY = \"ADD_MANUAL_TIME_ENTRY\";\nexport interface AddManualTimeEntryAction extends OfflineAction\n{\n type: \"ADD_MANUAL_TIME_ENTRY\";\n entry: ManualEntryEvent;\n username: string;\n}\nexport const addManualTimeEntry = (username: string, entry: ManualEntryEvent): AddManualTimeEntryAction => ({\n type: ADD_MANUAL_TIME_ENTRY,\n entry, username,\n meta: createOfflineMeta(username, \"time-tracking/manual\", \"PUT\", entry)\n});","import { Dispatch } from \"redux\";\nimport { Event, CheckinEvent } from \"../typings\";\nimport { generateUuid } from \"../../../../util/uuid\";\nimport { OfflineAction } from \"../../../../types\";\nimport Api from \"../../../../api/api\";\nimport { createOfflineMeta } from \"../../../../util/offline\";\n\n//\n// Action: TRANSACTION_ADD\n//\nexport const TRANSACTION_OPEN = \"TRANSACTION_OPEN\";\nexport interface TransactionOpenAction extends OfflineAction\n{\n type: \"TRANSACTION_OPEN\";\n id: string;\n username: string;\n event: CheckinEvent;\n}\nexport const transactionOpen = (username: string, event: CheckinEvent, id = generateUuid()): TransactionOpenAction => ({\n type: TRANSACTION_OPEN,\n id,\n username,\n event: { ...event, transactionId: id },\n meta: createOfflineMeta(username, \"time-tracking/entry\", \"PUT\", { ...event, transactionId: id })\n});\n\n//\n// Action: TRANSACTION_CLOSE\n//\nexport const TRANSACTION_CLOSE = \"TRANSACTION_CLOSE\";\nexport interface TransactionCloseAction\n{\n type: \"TRANSACTION_CLOSE\";\n id: string;\n username: string;\n}\nexport const transactionClose = (username: string, id: string): TransactionCloseAction => ({\n type: TRANSACTION_CLOSE,\n id,\n username\n});\n\n//\n// Action: EVENT_ADD\n//\nexport const TRANSACTION_EVENT_ADD = \"TRANSACTION_EVENT_ADD\";\nexport interface TransactionEventAddAction extends OfflineAction\n{\n type: \"TRANSACTION_EVENT_ADD\";\n transactionId: string;\n event: Event;\n}\nexport const transactionEventAdd = (event: Event): TransactionEventAddAction => ({\n type: TRANSACTION_EVENT_ADD,\n transactionId: event.transactionId,\n event,\n meta: createOfflineMeta(event.username, \"time-tracking/entry\", \"PUT\", event)\n});\n\n//\n// Action: TRANSACTION_CHECKIN\n//\nexport const TRANSACTION_CHECKIN = \"TRANSACTION_CHECKIN\";\nexport interface TransactionCheckinAction\n{\n type: \"TRANSACTION_CHECKIN\";\n checkin: string;\n absence?: string;\n}\n/**\n * Adds a check-in event to the given transaction\n * @param checkin \n * @param absence \n */\nexport const transactionCheckin = (checkin: string, absence?: string): TransactionCheckinAction => ({\n type: TRANSACTION_CHECKIN,\n checkin,\n absence\n});\n\nexport const fetchTransactions = () => (dispatch: Dispatch) => \n{\n Api.request(\"time-tracking/entry\").then(result => console.log(result));\n};","import UUID from \"pure-uuid\";\n\nexport const generateUuid = () => \n new UUID(4).format();\n\n ","import { Action } from \"redux\";\n\nexport const DRAWER_OPEN = \"DRAWER_OPEN\";\nexport interface DrawerOpenAction extends Action\n{\n type: \"DRAWER_OPEN\",\n open: boolean;\n}\nexport const drawerOpen = (open = true): DrawerOpenAction => ({\n type: DRAWER_OPEN,\n open\n});\n\nexport const BUSY = \"BUSY\";\nexport interface Busy\n{\n type: \"BUSY\";\n busy: boolean;\n}\n\nexport const busy = (busy: boolean): Busy => ({ type: BUSY, busy });\n","import { AnyAction } from \"redux\";\n\nexport interface BusyAction\n{\n uiMeta: { busy: boolean };\n}\n\nconst isBusyAction = (action: any): action is BusyAction => \n typeof action.uiMeta === \"object\" \n && typeof action.uiMeta.busy === \"boolean\"\n ;\n\nconst busyReducer = (state = false, action: AnyAction): boolean =>\n isBusyAction(action) ? action.uiMeta.busy : state;\n\nexport default busyReducer;","import { \n Busy,\n DrawerOpenAction, \n BUSY,\n DRAWER_OPEN \n} from \"./actions\";\nimport busyReducer from \"./busy\";\n\nexport interface UiState\n{\n drawer: { open: boolean },\n busy: boolean;\n}\n\ntype UIAction = DrawerOpenAction | Busy;\n\nconst initialState: UiState = \n{\n drawer: \n {\n open: false\n },\n busy: false\n};\n\nconst uiReducer = (state = initialState, action: UIAction): UiState =>\n{\n state.busy = busyReducer(state.busy, action);\n\n if(action.type === DRAWER_OPEN)\n {\n const { open } = action;\n return {\n ...state,\n drawer: {\n ...state.drawer,\n open\n }\n }\n }\n\n if(action.type === BUSY)\n {\n const { busy } = action\n return {\n ...state,\n busy\n };\n }\n\n return state;\n};\n\nexport const getDrawerOpenState = (state: UiState) => state.drawer.open;\n\nexport const isBusy = (state: UiState) => state.busy;\n\nexport default uiReducer;","import { Action } from \"redux\";\nimport { busy } from \"../ui/actions\";\nimport auth from \"../../service/auth\";\n\nexport const USER_LOGIN_SUCCESS = \"USER_LOGIN_SUCCESS\";\nexport interface UserLoginSuccess extends Action\n{\n type: \"USER_LOGIN_SUCCESS\";\n username: string;\n roles: string[];\n}\nexport const userLoginSuccess = (username: string, roles: string[]): UserLoginSuccess => ({\n type: USER_LOGIN_SUCCESS,\n username, roles\n});\n\nexport const USER_LOGOUT = \"USER_LOGOUT\"\nexport interface UserLogout extends Action\n{\n type: \"USER_LOGOUT\";\n}\nexport const userLoggedOut = (): UserLogout => ({\n type: USER_LOGOUT\n});\n\nexport const USER_LOGIN_PENDING = \"USER_LOGIN_PENDING\";\nexport interface UserLoginPending extends Action\n{\n type: \"USER_LOGIN_PENDING\";\n}\nexport const userLoginPending = (): UserLoginPending => ({ type: USER_LOGIN_PENDING });\n\nexport const USER_LOGIN_FAILED = \"USER_LOGIN_FAILED\";\nexport interface UserLoginFailed extends Action\n{\n type: \"USER_LOGIN_FAILED\";\n reason: any;\n}\nexport const userLoginFailed = (reason: any): UserLoginFailed => ({ type: USER_LOGIN_FAILED, reason });\n\nexport interface UserUpdateRoles\n{\n type: \"USER_UPDATE_ROLES\";\n roles: string[];\n}\nexport const userUpdateRoles = (roles: string[]): UserUpdateRoles => ({ type: \"USER_UPDATE_ROLES\", roles });\n\nexport interface UserClearRoles\n{\n type: \"USER_CLEAR_ROLES\";\n}\n\nexport const userClearRoles = (): UserClearRoles => ({ type: \"USER_CLEAR_ROLES\" });\n\nexport const login = (username: string, password: string) => async (dispatch: any) =>\n{\n // TODO - perform authentication\n dispatch(userLoginPending());\n dispatch(busy(true));\n\n try \n {\n await auth.login(username, password);\n dispatch(userLoginSuccess(username, auth.roles));\n }\n catch(reason)\n {\n dispatch(userLoginFailed(reason));\n dispatch(userClearRoles());\n }\n\n dispatch(busy(false));\n};\n\nexport const logout = () => async (dispatch: any) =>\n{\n await auth.logout();\n dispatch(userLoggedOut());\n dispatch(userClearRoles());\n}","import { \n USER_LOGIN_PENDING,\n USER_LOGIN_SUCCESS,\n USER_LOGOUT,\n UserLoginSuccess,\n UserLogout,\n UserLoginPending,\n USER_LOGIN_FAILED,\n UserLoginFailed,\n UserClearRoles,\n UserUpdateRoles\n} from \"./action\";\n\ntype UserActions = UserLoginSuccess | UserLogout | UserLoginPending | UserLoginFailed | UserUpdateRoles | UserClearRoles;\n\nexport interface UserState\n{\n username?: string;\n pending: boolean;\n failedLogin: boolean;\n roles: string[];\n}\n\nconst initialState: UserState =\n{\n // username: a\n pending: false,\n failedLogin: false,\n roles: []\n}\n\nconst user = (state = initialState, action: UserActions) =>\n{\n if(action.type === USER_LOGIN_SUCCESS)\n {\n const { username, roles } = action;\n return {\n ...state,\n username,\n roles,\n pending: false,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGOUT)\n {\n return {\n ...state,\n username: undefined,\n pending: false,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGIN_PENDING)\n {\n return {\n ...state,\n pending: true,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGIN_FAILED)\n {\n return {\n ...state,\n pending: false,\n username: undefined,\n failedLogin: true\n }\n }\n\n if (action.type === \"USER_CLEAR_ROLES\") \n {\n return {\n ...state,\n roles: []\n };\n }\n\n if (action.type === \"USER_UPDATE_ROLES\") \n {\n const { roles } = action;\n return {\n ...state,\n roles\n };\n }\n\n return state;\n}\n\nexport const getUsername = (state: UserState) => state.username;\nexport const isLoggedIn = (state: UserState) => state.username !== undefined;\nexport const getLoginPending = (state: UserState) => state.pending;\nexport const getLoginFailed = (state: UserState) => state.failedLogin;\nexport const getUserRoles = (state: UserState) => state.roles;\n\nexport default user;","import { ERROR_SERVER_NOT_AVAILABLE, ERROR_INTERNAL_SERVER_FAILURE, ERROR_CLIENT_ERROR } from \"../constants/error\";\nimport auth from \"../../../service/auth\";\nimport { Printer, LabelTypes } from \"../state/types\";\nimport { API_BASE_URL } from \"../../../api/api\";\n\nconst defaultHeaders: RequestInit = {\n mode: \"cors\", \n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n};\n\nexport interface Draft\n{\n id: string;\n name: string;\n}\n\nexport const TRACKING_BATCH = 0;\nexport const TRACKING_SERIAL = 1;\nexport const TRACKING_ORDINARY = 2;\n\ntype TrackingType = 0 | 1 | 2;\n\nexport interface Item\n{\n ean: string;\n sku: string;\n unit: string;\n name: string;\n tracking: TrackingType;\n barcode: string;\n lotNumber: string;\n quantity: string;\n}\n\n// for development\n// const API_BASE_URI = \"http://localhost:52184/stock-management/inventory\";\n\nconst defaultHandler: ResponseHandler = (response: Response) => response.json();\n\ntype ResponseHandler = (response: Response) => T;\n\nexport interface RelocationRequest\n{\n from: string;\n to: string;\n item: Item;\n qty: number;\n warehouse: string;\n}\n\nexport interface LabelRequest\n{\n printer: string;\n quantity: number;\n barcode: string;\n labelSku: string;\n additionalFields: { [key: string]: string };\n}\n\nexport const apiCall = async (uri: string, options: RequestInit = { credentials: \"include\", mode: \"cors\" }, handler: ResponseHandler = defaultHandler): Promise => \n{\n try\n {\n const fetch = auth.getAuthenticatedFetch();\n const response = await fetch(`${API_BASE_URL}/${uri}`, options);\n \n if(response.ok)\n {\n return handler(response);\n }\n\n if(response.status === 500)\n {\n let message = null;\n try \n {\n const responseBody = await response.json();\n message = responseBody.errorMessage;\n } catch(e) {}\n throw { error: ERROR_INTERNAL_SERVER_FAILURE, message };\n }\n\n if(response.status === 404)\n {\n throw { error: ERROR_CLIENT_ERROR };\n }\n\n if(response.status === 409)\n {\n throw await response.json();\n }\n\n } catch (e)\n {\n if (e instanceof TypeError)\n {\n throw { error: ERROR_SERVER_NOT_AVAILABLE }\n }\n throw e;\n }\n return null as any;\n};\n\nexport const getDrafts = async (warehouse: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/drafts`);\n\nexport const getItem = async (barcode: string): Promise => \n apiCall(`lookup/barcode/${barcode}`).then(item => ({ ...item, barcode }));\n\nexport const getQty = async (warehouse: string, location: string, sku: string) =>\n apiCall(`lookup/${warehouse}/location/${location}/item/${sku}`);\n\nexport const moveItem = async ({ from, to, item: { barcode: item }, warehouse, qty: quantity }: RelocationRequest) =>\n apiCall(`stock-management/relocate`, {\n ...defaultHeaders,\n method: \"POST\",\n body: JSON.stringify({ from, to, item, warehouse, quantity }),\n }, response => response.ok);\n\nexport const updateItem = async (draft: string, warehouse: string, barcode: string, location: string, quantity: number): Promise => \n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/item/${barcode}`, { \n ...defaultHeaders,\n method: \"PUT\",\n body: JSON.stringify({ quantity, location })\n }, response => response.ok);\n\nexport const fetchPrinters = async (): Promise =>\n apiCall(`stock-management/label/printers`);\n\nexport const fetchLabelTypes = async (barcode: string, languageId = \"en-US\"): Promise =>\n apiCall(`lookup/barcode/${barcode}/labels/${languageId}`);\n\nexport const requestLabel = async (labelRequest: LabelRequest): Promise => \n apiCall(`stock-management/label/print`, {\n ...defaultHeaders,\n method: \"POST\",\n body: JSON.stringify(labelRequest)\n }, response => response.ok);\n\nexport const fetchPendingItems = async (warehouse: string, draft: string, location: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/pending/${location}`, undefined, res => \n (res.ok) ? (\n res.status === 204 ? [] : res.json()\n ) : defaultHandler(res));\n\nexport const confirmLocationComplete = async (warehouse: string, draft: string, location: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/pending/${location}/complete`, {\n ...defaultHeaders,\n method: \"POST\"\n }, res => res.ok ? Promise.resolve() : defaultHandler(res));\n// export const requestLabelConfig = async (itemId: string): Promise< => \n","export const ERROR_SERVER_NOT_AVAILABLE = 0;\nexport const ERROR_INTERNAL_SERVER_FAILURE = 1;\nexport const ERROR_CLIENT_ERROR = 2;\n","import { Dispatch } from \"redux\";\nimport { ActionFailure, getErrorReason } from \"../../action\";\nimport { getItem, Item } from \"../../../api/StockApi\";\nimport { getQty } from \"../../../api/StockApi\";\nimport { generateUuid } from \"../../../../../util/uuid\";\n\n//\n// Action: STOCK_FETCH_ITEM\n//\nexport const STOCK_FETCH_ITEM = \"STOCK_FETCH_ITEM\";\nexport interface StockFetchItemAction\n{\n type: \"STOCK_FETCH_ITEM\";\n}\nexport const _stockFetchItem = (): StockFetchItemAction => ({\n type: \"STOCK_FETCH_ITEM\"\n});\n\nexport const stockFetchItem = (draft: string, barcode: string, location: string, warehouse:string) => (dispatch: Dispatch) => \n{\n dispatch(_stockFetchItem());\n (async () => {\n try\n {\n const item = await getItem(barcode);\n\n // Added to validate Qty 10-8-2021\n const qtyInStockLoc = await getQty(warehouse, location, item.sku);\n item.quantity = qtyInStockLoc;\n\n dispatch(stockFetchItemSuccess(item, location));\n\n }\n catch(e)\n {\n let errorMessage = (e.message) \n ? e.message\n : `${getErrorReason(e.error)}Could not fetch item`;\n dispatch(stockFetchItemFailure(generateUuid(), errorMessage));\n }\n })();\n}\n\n//\n// Action: STOCK_FETCH_ITEM_FAILURE\n//\nexport const STOCK_FETCH_ITEM_FAILURE = \"STOCK_FETCH_ITEM_FAILURE\";\nexport interface StockFetchItemFailureAction extends ActionFailure\n{\n type: \"STOCK_FETCH_ITEM_FAILURE\";\n}\nexport const stockFetchItemFailure = (id: string, message: string): StockFetchItemFailureAction => ({\n type: STOCK_FETCH_ITEM_FAILURE,\n notification: {\n id, message,\n severity: \"error\",\n source: \"server\"\n }\n});\n\n//\n// Action: STOCK_FETCH_ITEM_SUCCESS\n//\nexport const STOCK_FETCH_ITEM_SUCCESS = \"STOCK_FETCH_ITEM_SUCCESS\";\nexport interface StockFetchItemSuccessAction\n{\n type: \"STOCK_FETCH_ITEM_SUCCESS\";\n item: Item;\n location: string;\n}\nexport const stockFetchItemSuccess = (item: Item, location: string): StockFetchItemSuccessAction => ({\n type: STOCK_FETCH_ITEM_SUCCESS,\n item,\n location\n});","import { Dispatch } from \"redux\";\nimport { updateItem } from \"../../../api/StockApi\";\nimport { generateUuid } from \"../../../../../util/uuid\";\nimport { Notification } from \"../../types\";\nimport { ActionFailure } from \"../../action\";\nimport i18n from \"es2015-i18n-tag\";\n\nexport const STOCK_UPDATE_ITEM = \"STOCK_UPDATE_ITEM\";\nexport interface StockUpdateItemAction\n{\n \n type: \"STOCK_UPDATE_ITEM\";\n draftId: string;\n barcode: string;\n location: string;\n quantity: number;\n warehouse: string;\n sku: string;\n}\nexport const _stockUpdateItem = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string): StockUpdateItemAction => ({\n type: STOCK_UPDATE_ITEM,\n draftId, barcode, location, quantity, warehouse, sku\n});\n\nexport const stockUpdateItem = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockUpdateItem(draftId, warehouse, barcode, location, quantity, sku));\n let errorMessage = i18n`Could not update inventory draft.`;\n (async () => {\n try\n {\n const result = await updateItem(draftId, warehouse, barcode, location, quantity);\n if(result)\n {\n const message = `Updated ${sku} quantity to ${quantity} at ${location}`;\n const notification: Notification = {\n id: generateUuid(),\n message,\n severity: \"success\",\n source: \"client\"\n }\n dispatch(stockUpdateItemSuccess(draftId, warehouse, barcode, location, quantity, notification));\n return;\n }\n }\n catch(e)\n {\n if(e.message)\n {\n errorMessage = e.message;\n }\n console.warn(e);\n }\n\n dispatch(stockUpdateItemFailure(generateUuid(), errorMessage)); \n })();\n}\n\nexport const STOCK_UPDATE_ITEM_SUCCESS = \"STOCK_UPDATE_ITEM_SUCCESS\";\nexport interface StockUpdateItemSuccessAction\n{\n type: \"STOCK_UPDATE_ITEM_SUCCESS\";\n draftId: string;\n barcode: string;\n location: string;\n quantity: number;\n warehouse: string;\n notification?: Notification;\n}\nexport const stockUpdateItemSuccess = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, notification?: Notification): StockUpdateItemSuccessAction => ({\n type: STOCK_UPDATE_ITEM_SUCCESS,\n draftId, barcode, location, quantity, warehouse, notification\n});\n\nexport const STOCK_UPDATE_ITEM_FAILURE = \"STOCK_UPDATE_ITEM_FAILURE\";\nexport interface StockUpdateItemFailureAction extends ActionFailure\n{\n type: \"STOCK_UPDATE_ITEM_FAILURE\";\n}\nexport const stockUpdateItemFailure = (id: string, message: string): StockUpdateItemFailureAction => ({\n type: STOCK_UPDATE_ITEM_FAILURE,\n notification: {\n id, message,\n source: \"server\",\n severity: \"error\"\n }\n});\n","import { StockItem, Notification } from \"./types\";\nimport { Dispatch } from \"redux\";\nimport { Draft, getDrafts, Item, fetchPendingItems, confirmLocationComplete } from \"../api/StockApi\";\nimport { generateUuid } from \"../../../util/uuid\";\n\nimport { StockFetchItemFailureAction, StockFetchItemSuccessAction, StockFetchItemAction } from \"./action/item/fetch\";\nimport { StockUpdateItemAction, StockUpdateItemSuccessAction, StockUpdateItemFailureAction } from \"./action/item/update\";\nimport { StockDebugClearStateAction } from \"./action/debug\";\nimport i18n from \"es2015-i18n-tag\";\nimport { ERROR_SERVER_NOT_AVAILABLE, ERROR_INTERNAL_SERVER_FAILURE } from \"../constants/error\";\n\nexport * from \"./action/item/fetch\";\nexport * from \"./action/item/update\";\nexport * from \"./action/debug\";\n\nexport const getErrorReason = (errorCode: number): string => \n (errorCode === ERROR_SERVER_NOT_AVAILABLE)\n ? i18n`Server not reachable: `\n : (errorCode === ERROR_INTERNAL_SERVER_FAILURE)\n ? i18n`Request failed: `\n : \"\";\n\n\nexport interface ActionFailure\n{\n notification: Notification;\n}\n\n//\n// Action: STOCK_INIT\n//\nexport const STOCK_INIT = \"STOCK_INIT\";\nexport interface StockInitAction\n{\n type: \"STOCK_INIT\";\n}\nexport const stockInit = (): StockInitAction => ({\n type: STOCK_INIT\n});\n\n\n\n//\n// Action: STOCK_UPDATE_CURRENT\n//\nexport const STOCK_UPDATE_CURRENT = \"STOCK_UPDATE_CURRENT\";\nexport interface StockUpdateCurrentAction\n{\n type: \"STOCK_UPDATE_CURRENT\";\n item: Partial;\n}\nexport const stockUpdateCurrent = (item: Partial): StockUpdateCurrentAction => ({\n type: STOCK_UPDATE_CURRENT, item\n});\n\n//\n// Action: STOCK_RESET_CURRENT\n//\nexport const STOCK_RESET_CURRENT = \"STOCK_RESET_CURRENT\";\nexport interface StockResetCurrentAction\n{\n type: \"STOCK_RESET_CURRENT\";\n}\nexport const stockResetCurrent = (): StockResetCurrentAction => ({\n type: STOCK_RESET_CURRENT\n});\n\n//\n// Action: STOCK_SET_WAREHOUSE\n//\nexport const STOCK_SET_WAREHOUSE = \"STOCK_SET_WAREHOUSE\";\nexport interface StockSetWarehouseAction\n{\n type: \"STOCK_SET_WAREHOUSE\";\n warehouse: string;\n}\nexport const stockSetWarehouse = (warehouse: string): StockSetWarehouseAction => ({\n type: STOCK_SET_WAREHOUSE,\n warehouse\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD\n//\nexport const STOCK_DRAFTS_LOAD = \"STOCK_DRAFTS_LOAD\";\nexport interface StockDraftsLoadAction\n{\n type: \"STOCK_DRAFTS_LOAD\";\n}\nconst _stockDraftsLoad = (): StockDraftsLoadAction => ({\n type: STOCK_DRAFTS_LOAD\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD_SUCCESS\n//\nexport const STOCK_DRAFTS_LOAD_SUCCESS = \"STOCK_DRAFTS_LOAD_SUCCESS\";\nexport interface StockDraftsLoadSuccessAction\n{\n type: \"STOCK_DRAFTS_LOAD_SUCCESS\";\n drafts: Draft[];\n warehouse: string;\n}\nexport const stockDraftsLoadSuccess = (warehouse: string, drafts: Draft[]): StockDraftsLoadSuccessAction => ({\n type: STOCK_DRAFTS_LOAD_SUCCESS,\n warehouse,\n drafts\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD_FAILURE\n//\nexport const STOCK_DRAFTS_LOAD_FAILURE = \"STOCK_DRAFTS_LOAD_FAILURE\";\nexport interface StockDraftsLoadFailureAction extends ActionFailure\n{\n type: \"STOCK_DRAFTS_LOAD_FAILURE\";\n}\nexport const stockDraftsLoadFailure = (id: string, message: string): StockDraftsLoadFailureAction => ({\n type: STOCK_DRAFTS_LOAD_FAILURE,\n notification: {\n id, message,\n severity: \"error\",\n source: \"server\"\n }\n});\n\nexport const stockDraftsLoad = (warehouse: string) => (dispatch: Dispatch) => \n{\n (async () => \n {\n dispatch(_stockDraftsLoad());\n try\n {\n const drafts = await getDrafts(warehouse);\n dispatch(stockDraftsLoadSuccess(warehouse, drafts));\n } \n catch(e)\n {\n const prefix = getErrorReason(e.error);\n dispatch(stockDraftsLoadFailure(generateUuid(), `${prefix}Could not load drafts for ${warehouse}`)); /* TODO i18n for error messages */\n }\n })();\n};\n\n//\n// Action: STOCK_SCANNED_LOCATION\n//\nexport const STOCK_SCANNED_LOCATION = \"STOCK_SCANNED_LOCATION\";\nexport interface StockScannedLocationAction\n{\n type: \"STOCK_SCANNED_LOCATION\";\n location: string;\n}\nexport const stockScannedLocation = (location: string): StockScannedLocationAction => ({\n type: STOCK_SCANNED_LOCATION,\n location\n});\n\n//\n// Action: STOCK_SCANNED_ITEM\n//\nexport const STOCK_SCANNED_ITEM = \"STOCK_SCANNED_ITEM\";\nexport interface StockScannedItemAction\n{\n type: \"STOCK_SCANNED_ITEM\";\n item: string;\n}\nexport const stockScannedItem = (item: string): StockScannedItemAction => ({\n type: STOCK_SCANNED_ITEM,\n item\n});\n\n//\n// Action: STOCK_SCANNED_CLEAR\n//\nexport const STOCK_SCANNED_CLEAR = \"STOCK_SCANNED_CLEAR\";\nexport interface StockScannedClearAction\n{\n type: \"STOCK_SCANNED_CLEAR\";\n}\nexport const stockScannedClear = (): StockScannedClearAction => ({\n type: STOCK_SCANNED_CLEAR\n});\n\n//\n// Action: STOCK_DISMISS_ERROR\n//\nexport const STOCK_DISMISS_ERROR = \"STOCK_DISMISS_ERROR\";\nexport interface StockDismissErrorAction\n{\n type: \"STOCK_DISMISS_ERROR\";\n id: string;\n}\nexport const stockDismissError = (id: string): StockDismissErrorAction => ({\n type: STOCK_DISMISS_ERROR,\n id\n});\n\n//\n// Action: STOCK_REVERT_LOCATION\n//\nexport interface StockRevertLocationAction\n{\n type: \"STOCK_REVERT_LOCATION\";\n}\nexport const stockRevertLocation = (): StockRevertLocationAction => ({\n type: \"STOCK_REVERT_LOCATION\"\n});\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS\n//\nexport interface StockFetchPendingItemsAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS\";\n warehouse: string;\n draft: string;\n location: string;\n}\nexport const _stockFetchPendingItems = (warehouse: string, draft: string, location: string): StockFetchPendingItemsAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS\",\n warehouse, draft, location\n});\n\nexport const stockFetchPendingItems = (warehouse: string, draft: string, location: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockFetchPendingItems(warehouse, draft, location));\n (async () => {\n try \n { \n const items = await fetchPendingItems(warehouse, draft, location);\n dispatch(stockFetchPendingItemsSuccess(items));\n }\n catch(e)\n {\n dispatch(stockFetchPendingItemsFailure(e.message));\n }\n })();\n\n};\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS_SUCCESS\n//\nexport interface StockFetchPendingItemsSuccessAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\";\n items: Item[];\n}\nexport const stockFetchPendingItemsSuccess = (items: Item[]): StockFetchPendingItemsSuccessAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\",\n items\n});\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS_FAILURE\n//\nexport interface StockFetchPendingItemsFailureAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS_FAILURE\";\n message: string;\n}\nexport const stockFetchPendingItemsFailure = (message: string): StockFetchPendingItemsFailureAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS_FAILURE\",\n message\n});\n\n//\n// Action: STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\n//\nexport interface StockClearPreviousLocationAndItemsAction\n{\n type: \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\";\n}\nexport const stockClearPreviousLocationAndItems = (): StockClearPreviousLocationAndItemsAction => ({\n type: \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\"\n});\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE\n//\nexport interface StockConfirmLocationCompleteAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE\";\n warehouse: string;\n location: string;\n draft: string;\n}\nexport const _stockConfirmLocationComplete = (warehouse: string, draft: string, location: string): StockConfirmLocationCompleteAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE\",\n warehouse, draft, location\n});\n\nexport const stockConfirmLocationComplete = (warehouse: string, draft: string, location: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockConfirmLocationComplete(warehouse, draft, location));\n (async () => {\n try \n {\n await confirmLocationComplete(warehouse, draft, location);\n dispatch(stockConfirmLocationCompleteSuccess());\n }\n catch(e)\n {\n dispatch(stockConfirmLocationCompleteFailure(e.message));\n }\n })();\n}\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\n//\nexport interface StockConfirmLocationCompleteSuccessAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\";\n}\nexport const stockConfirmLocationCompleteSuccess = (): StockConfirmLocationCompleteSuccessAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\"\n});\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\n//\nexport interface StockConfirmLocationCompleteFailureAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\";\n message: string;\n}\nexport const stockConfirmLocationCompleteFailure = (message: string): StockConfirmLocationCompleteFailureAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\",\n message\n});\n\nexport type StockAction = StockFetchItemAction\n| StockFetchItemFailureAction\n| StockFetchItemSuccessAction\n| StockUpdateCurrentAction\n| StockResetCurrentAction\n| StockSetWarehouseAction\n| StockDraftsLoadAction\n| StockDraftsLoadSuccessAction\n| StockDraftsLoadFailureAction\n| StockScannedLocationAction\n| StockScannedItemAction\n| StockScannedClearAction\n| StockInitAction\n| StockUpdateItemAction\n| StockUpdateItemSuccessAction\n| StockUpdateItemFailureAction\n| StockDismissErrorAction\n| StockDebugClearStateAction\n| StockFetchPendingItemsAction\n| StockFetchPendingItemsSuccessAction\n| StockFetchPendingItemsFailureAction\n| StockClearPreviousLocationAndItemsAction\n| StockRevertLocationAction\n| StockConfirmLocationCompleteAction\n| StockConfirmLocationCompleteSuccessAction\n| StockConfirmLocationCompleteFailureAction\n;\n","import { InventoryState } from \"../types\";\nimport { StockAction } from \"../action\";\nimport {\n STOCK_FETCH_ITEM,\n STOCK_FETCH_ITEM_FAILURE,\n STOCK_FETCH_ITEM_SUCCESS,\n STOCK_UPDATE_CURRENT,\n STOCK_RESET_CURRENT,\n STOCK_SET_WAREHOUSE,\n STOCK_DRAFTS_LOAD_SUCCESS,\n STOCK_SCANNED_ITEM, \n STOCK_SCANNED_LOCATION,\n STOCK_SCANNED_CLEAR,\n STOCK_INIT, \n STOCK_UPDATE_ITEM, \n STOCK_UPDATE_ITEM_SUCCESS, \n STOCK_UPDATE_ITEM_FAILURE, \n STOCK_DRAFTS_LOAD_FAILURE,\n STOCK_DISMISS_ERROR\n} from \"../action\";\nimport { Draft } from \"../../api/StockApi\";\nimport { STOCK_DEBUG_CLEAR_STATE } from \"../action/debug\";\n\nconst initialState: InventoryState =\n{\n fetchingItem: false,\n updatingItem: false,\n notifications: [],\n scanned: { }\n};\n\nconst reducer = (state = initialState, action: StockAction): InventoryState =>\n{\n if(action.type === STOCK_INIT)\n {\n return {\n ...state,\n fetchingItem: false,\n current: undefined,\n \n updatingItem: false,\n scanned: {}\n }\n }\n\n if(action.type === STOCK_RESET_CURRENT) \n {\n return {\n ...state,\n current: undefined\n };\n }\n\n if(action.type === STOCK_UPDATE_CURRENT)\n {\n const { item } = action;\n return {\n ...state,\n current: {\n ...state.current,\n ...item\n } as any // TODO FIX\n };\n }\n\n if(action.type === STOCK_FETCH_ITEM)\n {\n return {\n ...state, \n fetchingItem: true\n };\n }\n\n if(action.type === STOCK_FETCH_ITEM_SUCCESS)\n {\n const { item, location } = action;\n return {\n ...state, \n fetchingItem: false,\n current: { ...item, location }\n }\n }\n\n if(action.type === STOCK_FETCH_ITEM_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n fetchingItem: false,\n scanned: {},\n notifications: [...state.notifications, notification]\n }\n }\n\n if(action.type === STOCK_SET_WAREHOUSE)\n {\n const { warehouse } = action;\n return {\n ...state,\n drafts: undefined,\n warehouse\n }\n }\n\n if(action.type === STOCK_DRAFTS_LOAD_SUCCESS)\n {\n const { drafts } = action;\n return {\n ...state,\n drafts\n };\n }\n\n if(action.type === STOCK_DRAFTS_LOAD_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n notifications: [...state.notifications, notification]\n }\n }\n\n if(action.type === STOCK_SCANNED_ITEM)\n {\n const { item } = action;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n item\n }\n }\n }\n\n if(action.type === STOCK_SCANNED_LOCATION)\n {\n const { location } = action;\n const { location: previousLocation } = state.scanned;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n location, previousLocation,\n pendingItems: undefined\n }\n }\n }\n\n if(action.type === \"STOCK_REVERT_LOCATION\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n location: state.scanned.previousLocation,\n previousLocation: undefined\n }\n };\n }\n\n if(action.type === \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n previousLocation: undefined,\n pendingItems: undefined\n }\n };\n }\n\n if(action.type === \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\")\n {\n const { items: pendingItems } = action;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n pendingItems\n }\n }\n }\n\n if(action.type === \"STOCK_FETCH_PENDING_ITEMS_FAILURE\")\n {\n // TODO: Handle this\n }\n\n if(action.type === \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n pendingItems: undefined,\n previousLocation: undefined\n }\n };\n }\n\n if(action.type === STOCK_SCANNED_CLEAR)\n {\n return {\n ...state, \n updatingItem: false,\n fetchingItem: false,\n current: undefined,\n scanned: {\n location: state.scanned.location\n }\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM)\n {\n return {\n ...state,\n updatingItem: true\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM_SUCCESS)\n {\n const { notification = undefined } = action;\n const notifications = (notification === undefined) \n ? state.notifications\n : [...state.notifications, notification];\n\n return {\n ...state,\n updatingItem: false,\n current: undefined,\n scanned: {\n location: state.scanned.location\n },\n notifications\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n updatingItem: false,\n current: undefined,\n scanned: {},\n notifications: [...(state.notifications || []), notification]\n }\n }\n\n if(action.type === STOCK_DISMISS_ERROR)\n {\n const { id } = action;\n return {\n ...state,\n notifications: state.notifications.filter(err => err.id !== id)\n }\n }\n\n if(action.type === STOCK_DEBUG_CLEAR_STATE)\n {\n return initialState;\n }\n\n return state;\n};\n\nexport const getCurrentWarehouse = (state: InventoryState) => state.warehouse;\n\nexport const getDrafts = (state: InventoryState): Draft[] => state.drafts || [];\n\nexport const getCurrentItem = (state: InventoryState) => state.current;\n\nexport const getScannedItem = (state: InventoryState) => state.scanned.item;\n\nexport const getScannedLocation = (state: InventoryState) => state.scanned.location;\n\nexport const getPreviousLocaiton = (state: InventoryState) => state.scanned.previousLocation;\n\nexport const getPendingItems = (state: InventoryState) => state.scanned.pendingItems;\n\nexport const getIsLoadingItem = (state: InventoryState) => state.fetchingItem;\n\nexport const getIsUpdatingItem = (state: InventoryState) => state.updatingItem;\n\nexport const getNotifications = (state: InventoryState) => state.notifications || [];\n\nexport default reducer;","//\n// Action: STOCK_DEBUG_CLEAR_STATE\n//\nexport const STOCK_DEBUG_CLEAR_STATE = \"STOCK_DEBUG_CLEAR_STATE\";\nexport interface StockDebugClearStateAction\n{\n type: \"STOCK_DEBUG_CLEAR_STATE\";\n}\nexport const stockDebugClearState = (): StockDebugClearStateAction => ({\n type: STOCK_DEBUG_CLEAR_STATE\n});","import { Item, RelocationRequest } from \"../../api/StockApi\";\nimport { StockRelocationAction } from \"../action/relocation\";\nimport produce from \"immer\";\n\nexport interface State \n{\n request: Partial;\n currentItem?: Item;\n}\n\nconst initialState: State = { request: { } };\n\nconst reducer = (state = initialState, action: StockRelocationAction): State => produce(state, state => \n{\n if(action.type === \"STOCK_RELOCATION_FETCH_ITEM\")\n {\n state.currentItem = undefined;\n }\n\n else if(action.type === \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\")\n {\n state.currentItem = action.item;\n }\n\n else if(action.type === \"STOCK_RELOCATION_CLEAR\" || action.type === \"STOCK_RELOCATION_COMMIT_SUCCESS\")\n {\n state.request = {};\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_SOURCE_LOCATION\")\n {\n state.request.from = action.location;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\")\n {\n state.request.to = action.location;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_QUANTITY\")\n {\n state.request.qty = action.qty;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_ITEM\")\n {\n state.request.item = action.item;\n }\n\n});\n\nexport const getCurrentItem = (state: State) => state.currentItem;\nexport const getRelocationRequest = (state: State) => state.request;\n\nexport default reducer;","import produce from \"immer\";\nimport { LabelActions } from \"../action/label\";\nimport { Printer } from \"../types\";\n\ninterface State\n{\n // labels: LabelTypes[];\n printers: Printer[];\n\n ui: {\n fetchingLabels: boolean;\n fetchingPrinters: boolean;\n errorLabels: null | string;\n errorPrinters: null | string;\n requestingLabel: boolean;\n errorLabelRequest: null | string;\n }\n}\n\nconst initialState: State = \n{\n // labels: [],\n printers: [],\n ui: {\n fetchingLabels: false,\n fetchingPrinters: false,\n errorLabels: null,\n errorPrinters: null,\n errorLabelRequest: null,\n requestingLabel: false,\n }\n};\n\nconst reducer = (state = initialState, action: LabelActions): State => produce(state, () => \n{\n if(action.type === \"FETCH_PRINTER_LIST\")\n {\n state.ui.fetchingPrinters = true;\n state.ui.errorPrinters = null;\n return;\n }\n\n if(action.type === \"FETCH_PRINTER_LIST_SUCCESS\")\n {\n state.ui.fetchingPrinters = false;\n state.printers = action.printers;\n return;\n }\n\n if(action.type === \"FETCH_PRINTER_LIST_FAILURE\")\n {\n state.ui.fetchingPrinters = false;\n state.ui.errorPrinters = action.error.toString();\n return;\n }\n\n if(action.type === \"FETCH_LABEL_TYPES\")\n {\n state.ui.fetchingLabels = true;\n state.ui.errorLabels = null;\n return;\n }\n\n // if(action.type === \"FETCH_LABEL_TYPES_SUCCESS\")\n // {\n // state.ui.fetchingLabels = false;\n // state.labels = action.labels;\n // return;\n // }\n\n // if(action.type === \"FETCH_LABEL_TYPES_FAILURE\")\n // {\n // state.ui.fetchingLabels = false;\n // state.ui.errorLabels = action.error.toString();\n // return;\n // }\n\n if(action.type === \"REQUEST_LABEL_PRINT\")\n {\n state.ui.requestingLabel = true;\n state.ui.errorLabelRequest = null;\n return;\n }\n\n if(action.type === \"REQUEST_LABEL_PRINT_SUCCESS\")\n {\n state.ui.requestingLabel = false;\n return;\n }\n\n if(action.type === \"REQUEST_LABEL_PRINT_FAILURE\")\n {\n state.ui.requestingLabel = false;\n state.ui.errorLabelRequest = action.error.toString();\n return;\n }\n\n if(action.type === \"INIT_LABEL_STATE\")\n {\n state.ui = { ...initialState.ui };\n return;\n }\n\n});\n\n// export const getLabelPrinters = (state: State) => state.printers;\n// export const getLabelTypes = (state: State) => state.labels;\n// export const getLabelPrintersLoading = (state: State) => state.ui.fetchingPrinters;\n// export const getLabelTypesLoading = (state: State) => state.ui.fetchingLabels;\n// export const getLabelTypesError = (state: State) => state.ui.errorLabels;\n// export const getLabelPrintersError = (state: State) => state.ui.errorPrinters;\n// export const getLabelRequestActive = (state: State) => state.ui.requestingLabel;\n// export const getLabelRequestError = (state: State) => state.ui.errorLabelRequest;\n\nexport default reducer;","import { StockRelocationCommitSuccessAction, StockRelocationCommitFailureAction } from \"../action/relocation\";\nimport {produce } from \"immer\";\nimport i18n from \"es2015-i18n-tag\";\n\nexport interface Notification\n{\n id: string;\n message: string;\n source: \"server\" | \"client\";\n severity: \"warning\" | \"error\" | \"success\";\n}\n\nexport interface State\n{\n notifications: Notification[];\n}\n\nconst initialState: State = { notifications: [] };\n\ntype Actions = \n | StockRelocationCommitSuccessAction\n | StockRelocationCommitFailureAction\n | { type: \"NOTIFICATIONS_CLEAR\" }\n ;\n\n\nexport default (state = initialState, action: Actions ): State => produce(state, draft => {\n\n if (action.type === \"STOCK_RELOCATION_COMMIT_SUCCESS\")\n {\n draft.notifications.push({\n id: \"relocation_success\",\n message: i18n`Item was successfully moved`,\n severity: \"success\",\n source: \"server\"\n });\n }\n\n if (action.type === \"STOCK_RELOCATION_COMMIT_FAILURE\")\n {\n draft.notifications.push({\n id: \"relocation_failed\",\n message: action.message,\n severity: \"error\",\n source: \"server\"\n });\n }\n\n if (action.type === \"NOTIFICATIONS_CLEAR\")\n {\n if (draft.notifications.length > 0)\n {\n draft.notifications = [];\n }\n }\n});\n\nexport const getModuleNotifications = (state: State) => state.notifications;\n","import inventory from \"./inventory\";\nimport relocation from \"./relocation\";\nimport label from \"./label\";\nimport module from \"./module\";\nimport { combineReducers } from \"redux\";\n\nimport {\n getCurrentWarehouse as getInventoryCurrentWarehouse_,\n getDrafts as getInventoryDrafts_,\n getCurrentItem as getInventoryCurrentItem_,\n getScannedItem as getInventoryScannedItem_,\n getScannedLocation as getInventoryScannedLocation_,\n getPreviousLocaiton as getInventoryPreviousLocation_,\n getPendingItems as getInventoryPendingItems_,\n getIsLoadingItem as getInventoryIsLoadingItem_,\n getIsUpdatingItem as getInventoryIsUpdatingItem_,\n getNotifications as getInventoryNotifications_\n} from \"./inventory\";\n\nimport {\n getCurrentItem as getCurrentItem_,\n getRelocationRequest as getRelocationRequest_\n} from \"./relocation\";\n\nimport {\n getModuleNotifications as getModuleNotifications_\n} from \"./module\"\nimport { StockAction } from \"../action\";\n\nconst busy = (state: boolean = false, action: StockAction) =>\n{\n if(\"uiMeta\" in action && \"busy\" in action[\"uiMeta\"])\n {\n return !! action[\"uiMeta\"][\"busy\"];\n }\n\n switch(action.type)\n {\n case \"STOCK_FETCH_ITEM\":\n case \"STOCK_DRAFTS_LOAD\":\n case \"STOCK_UPDATE_ITEM\":\n case \"STOCK_FETCH_PENDING_ITEMS\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE\":\n return true;\n\n case \"STOCK_UPDATE_ITEM_FAILURE\":\n case \"STOCK_UPDATE_ITEM_SUCCESS\":\n case \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\":\n case \"STOCK_FETCH_ITEM_FAILURE\":\n case \"STOCK_FETCH_ITEM_SUCCESS\":\n case \"STOCK_DRAFTS_LOAD_FAILURE\":\n case \"STOCK_DRAFTS_LOAD_SUCCESS\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\":\n return false;\n\n default:\n return state;\n }\n}\n\nconst reducer = combineReducers({\n busy,\n inventory, \n relocation,\n label,\n module\n});\n\nexport type StockState = ReturnType;\n\n\nconst retarget = (fn: (s: TTarget) => TChild, selector: (s: TChild) => TResult) => \n (t: TTarget) => selector(fn(t));\n\nexport const getInventoryCurrentWarehouse = retarget((s: StockState) => s.inventory, getInventoryCurrentWarehouse_);\nexport const getInventoryDrafts = retarget((s: StockState) => s.inventory, getInventoryDrafts_);\nexport const getInventoryCurrentItem = retarget((s: StockState) => s.inventory, getInventoryCurrentItem_);\nexport const getInventoryScannedItem = retarget((s: StockState) => s.inventory, getInventoryScannedItem_);\nexport const getInventoryScannedLocation = retarget((s: StockState) => s.inventory, getInventoryScannedLocation_);\nexport const getInventoryPreviousLocation = retarget((s: StockState) => s.inventory, getInventoryPreviousLocation_);\nexport const getInventoryPendingItems = retarget((s: StockState) => s.inventory, getInventoryPendingItems_);\nexport const getInventoryIsLoadingItem = retarget((s: StockState) => s.inventory, getInventoryIsLoadingItem_);\nexport const getInventoryIsUpdatingItem = retarget((s: StockState) => s.inventory, getInventoryIsUpdatingItem_);\nexport const getInventoryNotifications = retarget((s: StockState) => s.inventory, getInventoryNotifications_);\n\nexport const getCurrentItem = retarget((s: StockState) => s.relocation, getCurrentItem_);\nexport const getRelocationRequest = retarget((s: StockState) => s.relocation, getRelocationRequest_);\n\nexport const getModuleNotifications = retarget((s: StockState) => s.module, getModuleNotifications_);\n\nexport const getIsBusy = ((s: StockState) => !!s.busy);\n\n// export const getLabelPrinters = retarget((s: StockState) => s.label, labelSelector.getLabelPrinters);\n// export const getLabelTypes = retarget((s: StockState) => s.label, labelSelector.getLabelTypes);\n// export const getLabelPrintersLoading = retarget((s: StockState) => s.label, labelSelector.getLabelPrintersLoading);\n// export const getLabelTypesLoading = retarget((s: StockState) => s.label, labelSelector.getLabelTypesLoading);\n// export const getLabelTypesError = retarget((s: StockState) => s.label, labelSelector.getLabelTypesError);\n// export const getLabelPrintersError = retarget((s: StockState) => s.label, labelSelector.getLabelPrintersError);\n// export const getLabelRequestActive = retarget((s: StockState) => s.label, labelSelector.getLabelRequestActive);\n// export const getLabelRequestError = retarget((s: StockState) => s.label, labelSelector.getLabelRequestError);\n\n\n\nexport default reducer;","import timeRecording, {\n getCheckinTypes as _getCheckinData\n} from \"../../modules/time-recording/state\";\nimport stockManagement from \"../../modules/stock-management/state\";\nimport { combineReducers } from \"redux\";\n\nconst reducer = combineReducers(\n{ \n timeRecording, stockManagement,\n _version: (state = 0) => state\n});\ntype CombinedState = ReturnType;\n\nexport type Module = keyof CombinedState;\n\nexport const getCheckinData = (state: CombinedState) => _getCheckinData(state.timeRecording);\n\nexport default reducer;\n","import { combineReducers } from \"redux\";\nimport ui from \"./ui\";\nimport user from \"./user\";\nimport module from \"./module\";\n\nconst rootReducer = combineReducers({\n ui,\n user,\n module\n});\n\nexport type RootState = ReturnType;\n\nexport default rootReducer;","import { offline } from \"@redux-offline/redux-offline\";\nimport offlineConfig from \"@redux-offline/redux-offline/lib/defaults\";\nimport { OfflineAction } from \"@redux-offline/redux-offline/lib/types\";\n\nimport { createStore, applyMiddleware, compose } from \"redux\";\nimport { createTransform } from \"redux-persist\";\nimport thunkMiddleware from \"redux-thunk\";\nimport { createLogger } from \"redux-logger\";\n// import { persistReducer, PersistConfig, persistStore, Storage } from \"redux-persist\";\n// import _storage from \"redux-persist/lib/storage\";\n\nimport rootReducer from \"./reducers\";\nimport auth from \"../service/auth\";\nimport Api from \"../api/api\";\n\nexport interface Effect\n{\n username: string;\n url: string;\n method?: string;\n body?: any\n}\n\ninterface DiscardError\n{\n username?: string;\n status?: number;\n}\n\nofflineConfig.discard = (error: DiscardError, _action: OfflineAction, _retries: number) =>\n{\n if(error.username !== undefined)\n {\n return false;\n }\n if(error.status !== undefined)\n {\n return (400 <= error.status) && (error.status < 500); // discard on client errors\n }\n return true;\n};\n\nofflineConfig.effect = ({username, url, method = \"GET\", body}: Effect) =>\n auth.username === username \n ? Api.request(url, method, body).then(res => res.ok ? Promise.resolve() : Promise.reject({ status: res.status }))\n : Promise.reject({ username });\n\n\nconst logger = createLogger({ collapsed: true });\nexport default (stateVersion: number) => \n{\n const upgradeTransform = createTransform(\n (inState: object, key) => { \n if(key === \"module\")\n {\n return { ...inState, _version: stateVersion };\n }\n return inState;\n },\n (outState: any, key) => \n { \n if(key === \"module\" && (outState._version === undefined || outState._version < stateVersion))\n {\n console.info(\"Module state cleared for upgrade\");\n return undefined;\n }\n return outState;\n }\n );\n\n const store = createStore(rootReducer,\n compose(\n applyMiddleware(\n thunkMiddleware,\n logger\n ),\n offline({ ...offlineConfig, persistOptions: { transforms: [upgradeTransform] }})\n )\n );\n\n return { store }\n}","import { RootState } from \".\";\n\nimport {\n isLoggedIn as isLoggedIn_,\n getUsername as getUsername_,\n getLoginPending as getLoginPending_,\n getLoginFailed as getLoginFailed_,\n getUserRoles as getUserRoles_\n} from \"./user\"\n\nimport { \n getDrawerOpenState as getDrawerOpenState_,\n isBusy as isBusy_\n} from \"./ui\";\n\n\n\n// ui\nexport const isBusy = (state: RootState) => isBusy_(state.ui);\nexport const getDrawerOpenState = (state: RootState) => getDrawerOpenState_(state.ui);\n\n// user\nexport const getUsername = (state: RootState) => getUsername_(state.user);\nexport const isLoggedIn = (state: RootState) => isLoggedIn_(state.user);\nexport const getLoginPending = (state: RootState) => getLoginPending_(state.user);\nexport const getLoginFailed = (state: RootState) => getLoginFailed_(state.user);\nexport const getUserRoles = (state: RootState) => getUserRoles_(state.user);\n\n// module\nexport const getModuleState = (state: RootState) => state.module;\n","import createStore from \"./configureStore\";\n\n// increment this constant when the state tree is reorganized/refactorered\n// this will clear the state on upgrades (module-state only)\nconst STATE_VERSION = 2;\n\nconst { store } = createStore(STATE_VERSION);\n\nexport { store };\nexport * from \"./reducers\";\nexport * from \"./actions\";\n","import * as React from \"react\"\nimport Typography from \"@material-ui/core/Typography\";\n\nexport interface Props\n{\n}\n\n\nclass Overview extends React.Component\n{\n render()\n {\n return (\n
\n \n Welcome to Guldmann Mobility\n \n \n Open the menu in the upper left corner to \n start using the app.\n \n
\n );\n }\n}\n\nexport default Overview;","import * as React from \"react\";\nimport { Reducer, createStore, compose, applyMiddleware, Store } from \"redux\";\nimport thunkMiddleware from \"redux-thunk\";\nimport { createLogger } from \"redux-logger\";\n\nimport { offline } from \"@redux-offline/redux-offline\";\nimport offlineConfig from \"@redux-offline/redux-offline/lib/defaults\";\nimport { OfflineAction } from \"@redux-offline/redux-offline/lib/types\";\nimport { createTransform } from \"redux-persist\";\n\nimport auth from \"../service/auth\";\nimport Api from \"../api/api\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ModuleProps } from \"./config\";\nimport { Provider } from \"react-redux\";\n\nexport interface Effect\n{\n username: string;\n url: string;\n method?: string;\n body?: any\n}\n\ninterface DiscardError\n{\n username?: string;\n status?: number;\n}\n\nconst createOfflineStoreEnhancer = (key: string, stateVersion: number, options: PersistConfig) =>\n{\n const config = \n {\n ...offlineConfig,\n discard: (error: DiscardError, _action: OfflineAction, _retries: number) =>\n {\n if(error.username !== undefined)\n {\n return false;\n }\n if(error.status !== undefined)\n {\n return (400 <= error.status) && (error.status < 500); // discard on client errors\n }\n return true;\n },\n\n effect: ({username, url, method = \"GET\", body}: Effect, action: OfflineAction) =>\n auth.username === username \n ? Api.request(url, method, body).then(res => res.ok ? Promise.resolve() : Promise.reject({ status: res.status }))\n : Promise.reject({ username })\n };\n\n const upgradeTransform = createTransform(\n (inState: object, key) => { \n if(key === \"module\")\n {\n return { ...inState, _version: stateVersion };\n }\n return inState;\n },\n (outState: any, key) => \n { \n if(key === \"module\" && (outState._version === undefined || outState._version < stateVersion))\n {\n console.info(\"Module state cleared for upgrade\");\n return undefined;\n }\n return outState;\n }\n );\n return offline({ ...config, persistOptions: { \n keyPrefix: `reduxPersist_${key}`,\n transforms: [upgradeTransform],\n ...options\n }});\n}\n\ninterface PersistConfig\n{\n whitelist?: string[];\n blacklist?: string[];\n}\n\nexport const createModuleStore = (reducer: Reducer, moduleKey: string, version: number, options: PersistConfig = {}) =>\n{\n const middleware = applyMiddleware(\n thunkMiddleware,\n createLogger({ collapsed: true })\n );\n\n return createStore(reducer, compose(\n middleware,\n createOfflineStoreEnhancer(moduleKey, version, options)\n ));\n}\n\nexport const createModule = & ModuleProps>(store: Store, App: React.ComponentType

) => \n (props: P) => (\n \n \n \n );\n \n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { Event, TimeRecordingState, getActivityTypes, getElementTypes, ManualEntryEvent, getAbsenceTypes } from \"../state\";\n\nimport green from \"@material-ui/core/colors/green\";\n\nimport List from \"@material-ui/core/List\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport IconButton from \"@material-ui/core/IconButton\";\n\nimport ShoppingCart from \"@material-ui/icons/ShoppingCart\";\nimport Receipt from \"@material-ui/icons/Receipt\";\nimport Flag from \"@material-ui/icons/Flag\";\nimport MoreHoriz from \"@material-ui/icons/MoreHoriz\";\n\ninterface Props\n{\n currentEvent?: Event;\n events: Event[];\n currentTitle?: string;\n restTitle?: string;\n getSecondaryText?: (event: Event) => string;\n secondaryAction?: (event: Event) => typeof ListItemSecondaryAction;\n // itemContextMenu?: (event: Event) => Menu\n}\n\nconst mapStateToProps = (state: TimeRecordingState) => ({\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state),\n absenceTypes: getAbsenceTypes(state)\n});\n\nexport const formatEventTime = (event: Event) => i18n`${new Date(new Date(event.date))}:t(t)`;\n\nclass EventList extends React.Component>\n{\n private getEventIcon(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_ORDER\":\n return ;\n case \"ACTIVITY_OTHER\":\n return ;\n case \"ACTIVITY_PROJECT\":\n return ;\n default:\n return \"C\";\n }\n }\n\n private formatEventTitle(event: Event | ManualEntryEvent)\n {\n switch(event.type)\n {\n case \"ACTIVITY_OTHER\":\n const activity = this.props.activityTypes.find(a => a.id === event.activityType);\n return activity ? activity.label : event.activityType;\n case \"ACTIVITY_ORDER\":\n return `Order ${event.orderNo}`;\n case \"ACTIVITY_PROJECT\":\n const elementType = this.props.elementTypes.find(e => e.id === event.elementType);\n return elementType ? elementType.label : event.elementType;\n case \"ABSENCE\":\n const absenceType = this.props.absenceTypes.find(e => e.id === event.absence);\n return absenceType ? absenceType.label : i18n`Absence`;\n default:\n return \"[TODO:TITLE]\";\n }\n }\n\n render()\n {\n const { \n currentEvent: current, events, restTitle, currentTitle,\n getSecondaryText = formatEventTime,\n secondaryAction: getSecondaryAction\n } = this.props;\n return (\n \n {\n currentTitle ? {currentTitle} : null\n }\n {\n (current !== undefined) ? (\n \n \n {this.getEventIcon(current)}\n \n \n \n \n \n \n \n \n ) : null\n }\n {\n (events.filter(e => e !== current).length > 0) ? (\n <>\n {\n restTitle ? {restTitle} : null\n }\n {\n events.map(event => (\n \n {this.getEventIcon(event)}\n { getSecondaryAction ? getSecondaryAction(event) : null }\n \n \n ))\n }\n \n ) : null\n }\n \n )\n }\n}\n\nexport default connect(mapStateToProps)(EventList);","import * as React from \"react\";\nimport TextField, { TextFieldProps } from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport CalendarIcon from \"mdi-material-ui/Calendar\";\n\nfunction DateTitle(props: TextFieldProps)\n{\n return (\n \n \n )\n }}> {props.value}\n );\n}\n\nexport default DateTitle;","import * as React from \"react\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Button from \"@material-ui/core/Button\";\n\nimport red from \"@material-ui/core/colors/red\";\n\ninterface AlertDialogProps\n{\n open?: boolean;\n onConfirm?: React.ReactEventHandler;\n onHandleClose?: React.ReactEventHandler;\n}\n\nfunction AlertDialog(props: AlertDialogProps)\n{\n const { open, onConfirm, onHandleClose } = props;\n return (\n \n {\"Delete event?\"}\n \n \n Are you sure you want to delete the event? It is not possible to undo.\n \n \n \n \n \n \n \n )\n}\n\nexport type Props = AlertDialogProps;\nexport default AlertDialog;","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport DeleteIcon from \"@material-ui/icons/Delete\"\n\nimport { ManualEntryEvent } from \"../../state\";\n\nexport function DeleteAction(props: { event: ManualEntryEvent, onClick?: (event: ManualEntryEvent) => void })\n{\n const { event, onClick } = props;\n\n const clickHandler = useMemo(() =>\n onClick ? () => onClick(event) : undefined\n , [event, onClick]);\n\n return (\n \n \n \n \n \n );\n}\n","import * as React from \"react\";\nimport { findDOMNode } from \"react-dom\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { ManualEntryEvent, JobActivity, JobElement, Absence } from \"../../state\";\nimport { generateUuid } from \"../../../../util/uuid\";\n\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport TextField from \"@material-ui/core/TextField\";\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport withMobileDialog, { InjectedProps } from '@material-ui/core/withMobileDialog';\n\nexport interface Props\n{\n date: string;\n username: string;\n elementTypes: JobElement[];\n activityTypes: JobActivity[];\n absenceTypes: Absence[];\n onAddEntry: (entry: ManualEntryEvent) => void;\n onCancel: () => void;\n}\n\ninterface AddFormProps\n{\n entry: ManualEntryEvent;\n onChange: (entry: ManualEntryEvent) => void;\n}\n\nconst isValidNumber = (q: number | undefined): q is number => q !== undefined && !isNaN(q);\n\nconst fieldStyle: React.CSSProperties = { marginTop: 16 };\n\nfunction useOutlinedSelect(): [(input: InputLabel) => void, JSX.Element]\n{\n const [labelWidth, setLabelWidth] = useState(0);\n const ref = useCallback((label: InputLabel) => {\n const node = findDOMNode(label) as HTMLLabelElement;\n if(node !== null)\n {\n setLabelWidth(node.getBoundingClientRect().width);\n }\n }, []);\n \n const input = useMemo(() => , [labelWidth]);\n return [ref, input];\n}\n\ninterface OrderFormProps extends AddFormProps\n{\n elementTypes: JobElement[];\n}\n\nfunction AddOrderForm(props: OrderFormProps)\n{\n const { entry, onChange, elementTypes } = props;\n const [ref, input] = useOutlinedSelect();\n\n const onOrderNumberChange = (e: React.ChangeEvent) => onChange({ ...entry, orderNo: parseInt(e.target.value) });\n const onElementNumberChange = (e: React.ChangeEvent) => onChange({ ...entry, elementNumber: parseInt(e.target.value) });\n const onTypeFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, elementType: e.target.value, quantity: 0 });\n\n return (\n <>\n \n \n \n {i18n`Type`}\n \n \n onChange({...entry, quantity: parseInt(e.target.value)})} \n InputProps={{\n endAdornment: {\n (entry.elementType === \"122\") ? \"km\" : \n (entry.elementType === \"120\") ? \"min\" : \"\"\n },\n }}\n />\n \n );\n}\n\nfunction AddOtherForm(props: AddFormProps & { activityTypes: JobActivity[] })\n{\n const { entry, onChange, activityTypes } = props;\n const [ref, input] = useOutlinedSelect();\n const onSelectFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, activityType: e.target.value });\n const onDurationFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, quantity: parseInt(e.target.value) })\n\n return (\n <>\n \n {i18n`Type`}\n \n \n min,\n }}\n />\n \n );\n}\n\ninterface AddAbsenceProps extends AddFormProps\n{\n absenceTypes: Absence[];\n}\n\nfunction AddAbsence(props: AddAbsenceProps)\n{\n const { entry, onChange, absenceTypes } = props;\n const [ref, input] = useOutlinedSelect();\n \n const onSelectFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, absence: e.target.value });\n const onQuantityFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, quantity: parseInt(e.target.value) });\n\n return (\n <>\n \n {i18n`Activity`}\n \n \n Kg,\n // }}\n />\n );\n}\n\nconst isEntryValid = (entry: ManualEntryEvent) => \n (isValidNumber(entry.quantity) && entry.quantity > 0)\n && ((entry.type === \"ACTIVITY_ORDER\" && entry.orderNo !== undefined && entry.orderNo !== undefined && !isNaN(entry.orderNo))\n || (entry.type === \"ACTIVITY_OTHER\" && entry.activityType !== undefined)\n || (entry.type === \"ABSENCE\" && entry.absence !== undefined && isValidNumber(entry.quantity))\n );\n //|| (entry.type === \"ACTIVITY_PROJECT\" && entry.elementType !== undefined));\n\nexport function AddDialog(props: Props & InjectedProps)\n{\n const { elementTypes, activityTypes, fullScreen, absenceTypes } = props;\n const [ref, input] = useOutlinedSelect();\n const [entry, setEntry] = useState({\n id: generateUuid(),\n type: \"ACTIVITY_ORDER\",\n day: props.date,\n deleted: false,\n username: props.username\n });\n\n return (\n

\n {i18n`Add Entry`}\n \n \n {i18n`Type`}\n \n \n {\n (entry.type === \"ACTIVITY_ORDER\") ? (\n \n ) : (entry.type === \"ACTIVITY_OTHER\") ? (\n \n ) : (entry.type === \"ABSENCE\") ? (\n \n ) : null\n }\n\n \n \n \n \n \n \n );\n}\n\nexport default withMobileDialog()(AddDialog);","import * as React from \"react\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport { ChangeEvent } from \"react\";\n\nexport interface Props \n{\n title?: string;\n name?: string;\n required?: boolean;\n\n value?: string;\n onChange?: (value: string) => void;\n}\n\ninterface State\n{\n value: string;\n}\n\nclass RadioButtonGroup extends React.Component\n{\n\n private handleChange = (event: ChangeEvent) => \n {\n if(this.props.onChange)\n {\n this.props.onChange(event.currentTarget.value);\n }\n };\n\n render() {\n const c1: any = \"fieldset\";\n const c2: any = \"legend\";\n const { title, name, value, required = false } = this.props;\n return (\n \n {title}\n \n {this.props.children}\n \n \n )\n }\n}\n\nexport default RadioButtonGroup;","import * as React from \"react\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Radio from \"@material-ui/core/Radio\";\n\nexport interface Props\n{\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nclass RadioButton extends React.Component\n{\n render()\n {\n return (\n } />\n )\n }\n}\n\nexport default RadioButton;","\nexport const formatDate = (date: Date = new Date()) =>\n date.toISOString();","import { CheckinEvent, OtherActivityEvent, OrderActivityEvent, ProjectActivityEvent } from \"../state\";\nimport { formatDate } from \"../../../util/date\";\nimport { generateUuid } from \"../../../util/uuid\";\n\nexport const EVENT_TYPE_CHECK_IN = \"CHECK_IN\";\n\nexport const checkIn = (username: string, absence?: string, id = generateUuid(), date = formatDate()): CheckinEvent => ({\n type: EVENT_TYPE_CHECK_IN,\n id,\n date, \n username,\n transactionId: \"\",\n absence\n});\n\nexport const createOtherActivityEvent = (username: string, transactionId: string, activityType: string, id = generateUuid(), date = new Date().toISOString()): OtherActivityEvent => ({\n type: \"ACTIVITY_OTHER\",\n id,\n date,\n username,\n transactionId,\n activityType\n});\n\nexport const createOrderActivityEvent = (username: string, transactionId: string, orderNo: string, id = generateUuid(), date = new Date().toISOString()): OrderActivityEvent => ({\n type: \"ACTIVITY_ORDER\",\n id,\n date,\n username,\n transactionId,\n orderNo\n});\n\nexport const createProjectActivityEvent = (username: string, transactionId: string, elementType: string, id = generateUuid(), date = new Date().toISOString()): ProjectActivityEvent => ({\n type: \"ACTIVITY_PROJECT\",\n id,\n date,\n username,\n transactionId,\n elementType\n});\n","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\"\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport styled from \"styled-components\";\nimport RadioButtonGroup from \"../../../components/RadioButtonGroup\";\nimport RadioButton from \"../../../components/RadioButton\";\nimport { getCheckinTypes, getAbsenceTypes, CheckinEvent, getCurrentTransaction, TimeRecordingState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { checkIn } from \"../events\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends ReturnType, RouteComponentProps\n{\n username: string;\n onCheckin?: (username: string, event: CheckinEvent) => void;\n}\n\nconst Block = styled.div`\n padding: 16px;\n margin-top: 16px;\n`;\n\nconst ButtonBar = styled.div`\n margin-top: 32px;\n`;\n\ninterface State\n{\n checkin?: string;\n absence?: string;\n}\n\nclass CheckInOut extends React.Component\n{\n state: State = \n {\n absence: \"__NONE__\"\n }\n \n private onCheckinChange = (checkin: string) =>\n {\n this.setState({ checkin });\n }\n\n private onAbsenceChange = (e: React.ChangeEvent) =>\n {\n this.setState({ absence: e.target.value });\n }\n\n private onCheckinClick = () =>\n {\n if(this.state.checkin !== undefined)\n {\n const { absence } = this.state;\n const { username } = this.props;\n const event = checkIn(username, absence === \"__NONE__\" ? undefined : absence);\n if(this.props.onCheckin !== undefined)\n {\n this.props.onCheckin(username, event);\n }\n }\n }\n\n render()\n {\n const { transactionType, absenceType } = this.props;\n const { checkin } = this.state;\n const c2: any = \"fieldset\";\n return (\n \n \n {\n transactionType.filter(t => t.type === \"in\").map(t => (\n \n ))\n }\n \n \n {i18n`Absence`}\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: {username: string}) => {\n return ({\n transactionType: getCheckinTypes(state),\n absenceType: getAbsenceTypes(state),\n transaction: getCurrentTransaction(ownProps.username, state)\n });\n};\n\nexport default connect(mapStateToProps)(CheckInOut);","import * as React from \"react\";\n\nconst UsernameContext = React.createContext(undefined);\nexport default UsernameContext;\n","import * as React from \"react\" ;\nimport { useState, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { useCallback } from \"react\";\nimport { Dialog, Toolbar, IconButton, Typography } from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { CheckinEvent } from \"../../state\";\nimport CheckinForm from \"../CheckinForm\";\nimport UsernameContext from \"../../../../context/UsernameContext\";\n\nexport interface Props \n{\n onClose?: () => void;\n onCheckin?: (info: CheckinEvent) => void;\n}\n\nfunction CheckinDialog(props: Props)\n{\n const { onClose, onCheckin } = props;\n const [open, setOpen]= useState(true);\n const username = React.useContext(UsernameContext);\n const onCheckinCallback = useCallback((username: string, event: CheckinEvent) => {\n if(onCheckin !== undefined)\n {\n onCheckin(event);\n }\n }, [onCheckin]);\n\n useEffect(() => () => setOpen(false), []);\n\n console.log(\"checkinDialog: render\");\n\n return (\n \n \n \n \n \n \n {i18n`Check In`}\n \n \n \n \n )\n}\n\nexport default CheckinDialog;","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport dayjs from \"dayjs\";\nimport DayjsUtils from \"@date-io/dayjs\";\nimport leftPad from \"left-pad\";\nimport { withStyles } from '@material-ui/core/styles';\nimport Fab from \"@material-ui/core/Fab\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport AlarmIcon from \"@material-ui/icons/Alarm\";\n\nimport { DatePicker, MuiPickersUtilsProvider } from \"material-ui-pickers\";\nimport { getManualEntries, TimeRecordingState, ManualEntryEvent, getActivityTypes, getElementTypes, getAbsenceTypes, CheckinEvent } from \"../state\";\n\nimport EventList from \"../components/EventList\";\n\nimport DateTitle from \"./Manuel/DateTitle\";\nimport AlertDialog from \"./Manuel/AlertDialog\";\nimport { DeleteAction } from \"./Manuel/DeleteAction\";\nimport { ModuleProps } from \"../../config\";\nimport { addManualTimeEntry, deleteManuelTimeEntry, fetchManualTimeEntries } from \"../state/action\";\nimport AddDialog from \"./Manuel/AddDialog\";\nimport i18n from \"es2015-i18n-tag\";\nimport CheckinDialog from \"./Manuel/CheckinDialog\";\n\nconst styles = (theme: any) => ({\n root: {\n // ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n } as any,\n picker: {\n ...theme.mixins.gutters()\n },\n fab: {\n position: 'absolute',\n bottom: theme.spacing.unit * 2,\n right: theme.spacing.unit * 2,\n } as any\n});\n\ninterface Props extends ModuleProps\n{\n classes: ReturnType\n}\n\ninterface State\n{\n date: dayjs.Dayjs;\n eventToDelete?: ManualEntryEvent;\n addEvent: boolean;\n checkin: boolean;\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => ({\n entries: ownProps.username ? getManualEntries(state, ownProps.username) : undefined,\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state),\n absenceTypes: getAbsenceTypes(state)\n});\n\nconst mapDispatchToProps = (dispatch: any, { username }: Props) => ({\n addEntry: (entry: ManualEntryEvent) => username ? dispatch(addManualTimeEntry(username, entry)) : false,\n deleteEntry: (entry: ManualEntryEvent) => username ? dispatch(deleteManuelTimeEntry(username, entry.id)) : false,\n fetchEntries: () => username ? dispatch(fetchManualTimeEntries(username)) : false\n});\n\ntype StateProps = ReturnType & ReturnType;\n\nclass Manuel extends React.Component\n{\n state: State = { date: dayjs().startOf(\"day\"), addEvent: false , checkin: false };\n\n componentWillMount()\n {\n this.props.fetchEntries();\n }\n\n private onDeleteClick = (event: ManualEntryEvent) => \n {\n this.setState({ eventToDelete: event });\n }\n\n private onHandleDeleteCancel = () => this.setState({ eventToDelete: undefined });\n\n private onHandleDelete = () => \n {\n const e = this.state.eventToDelete;\n if (e !== undefined)\n {\n this.props.deleteEntry(e);\n }\n this.setState({ eventToDelete: undefined });\n }\n\n private onHandleAddCancel = () => this.setState({ addEvent: false });\n\n private onHandleAdd = (entry: ManualEntryEvent) => \n {\n this.props.addEntry(entry);\n this.setState({ addEvent: false });\n };\n\n private formatDuration = (duration: number) => \n `${Math.floor(duration / 60)}:${leftPad(duration % 60, 2, \"0\")}`;\n\n private getSecondaryText = (entry: ManualEntryEvent) =>\n (entry.type === \"ABSENCE\" && entry.quantity !== undefined) ? i18n`Quantity: ` + entry.quantity :\n (entry.quantity !== undefined) ? this.formatDuration(entry.quantity) : \"\";\n\n private onCheckin = (info: CheckinEvent) =>\n {\n const { transactionId, date, ...rest } = info;\n const entry: ManualEntryEvent = {\n ...rest,\n day: dayjs(this.state.date).format() ,\n deleted: false\n };\n this.props.addEntry(entry);\n }\n\n render()\n {\n const { eventToDelete, date, addEvent, checkin } = this.state;\n const { classes, entries = [], activityTypes, elementTypes, absenceTypes, username = \"\" } = this.props;\n const minDate = dayjs().subtract(30, \"day\").toDate();\n const maxDate = dayjs().add(5, \"day\").toDate();\n\n const now = dayjs(date).startOf(\"day\");\n const filteredEntries = entries.filter(entry => !entry.deleted && dayjs(entry.day).isSame(now));\n const isCheckedIn = filteredEntries.findIndex(e => e.type === \"CHECK_IN\") > -1;\n\n return (\n <>\n \n {\n (addEvent) ? (\n \n ) : null\n }\n {\n (!isCheckedIn && checkin) ? (\n \n ) : null\n }\n\n \n
\n
\n this.setState({ date })} TextFieldComponent={DateTitle} minDate={minDate} maxDate={maxDate} />\n
\n e.type !== \"CHECK_IN\")}\n getSecondaryText={(entry: ManualEntryEvent) => this.getSecondaryText(entry) }\n secondaryAction={(e: ManualEntryEvent) => } />\n { \n isCheckedIn ? (\n this.setState({ addEvent: true })}>\n \n \n ) : (\n this.setState({ checkin: true })}>\n \n \n )\n }\n
\n
\n \n );\n }\n}\n\nexport default withStyles(styles)(connect(mapStateToProps, mapDispatchToProps)(Manuel));\n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport { createOrderActivityEvent } from \"../../events\";\nimport { Event, getCurrentTransaction, TimeRecordingState } from \"../../state\";\nimport { transactionEventAdd } from \"../../state/action\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string;\n}\n\ninterface State\n{\n orderNo: string;\n}\n\nclass AddOrder extends React.Component\n{\n state: State = { orderNo: \"\" };\n\n private onOrderNumberChange = (e: React.ChangeEvent) => \n {\n this.setState({ orderNo: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { orderNo } = this.state;\n if(transaction !== undefined)\n {\n const event = createOrderActivityEvent(username, transaction.id, orderNo);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { orderNo } = this.state;\n\n return (\n
\n {i18n`Add Order Activity`}\n \n\n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n transaction: getCurrentTransaction(username, state)\n });\n};\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOrder);","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { Event, getCurrentTransaction, getElementTypes, TimeRecordingState } from \"../../state\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { transactionEventAdd } from \"../../state/action\";\nimport { createProjectActivityEvent } from \"../../events\";\nimport { RouteComponentProps } from \"react-router\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string; \n}\n\ninterface State\n{\n elementType: string;\n}\n\nclass AddOther extends React.Component\n{\n state: State = { elementType: \"\" };\n\n private onElementTypeChange = (e: React.ChangeEvent) => \n {\n this.setState({ elementType: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { elementType } = this.state;\n if(transaction !== undefined)\n {\n const event = createProjectActivityEvent(username, transaction.id, elementType);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { elementTypes } = this.props;\n const { elementType } = this.state;\n\n return (\n
\n {i18n`Add Project Activity`}\n \n {i18n`Choose Activity`}\n \n \n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n transaction: getCurrentTransaction(username, state),\n elementTypes: getElementTypes(state)\n });\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOther);","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { getActivityTypes, Event, getCurrentTransaction, TimeRecordingState } from \"../../state\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { transactionEventAdd } from \"../../state/action\";\nimport { createOtherActivityEvent } from \"../../events\";\nimport { RouteComponentProps } from \"react-router\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string;\n}\n\ninterface State\n{\n selectedActivity: string;\n}\n\nclass AddOther extends React.Component\n{\n state: State = { selectedActivity: \"\" };\n\n private onActivityChange = (e: React.ChangeEvent) => \n {\n this.setState({ selectedActivity: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { selectedActivity: activityType } = this.state;\n if(transaction !== undefined)\n {\n const event = createOtherActivityEvent(username, transaction.id, activityType);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { activities } = this.props;\n const { selectedActivity } = this.state;\n\n return (\n
\n {i18n`Add Activity`}\n \n {i18n`Choose Activity`}\n \n \n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n activities: getActivityTypes(state),\n transaction: getCurrentTransaction(username, state),\n });\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOther);","import * as React from \"react\"\nimport { connect } from \"react-redux\";\nimport i18n from \"es2015-i18n-tag\"\nimport styled from \"styled-components\";\nimport { Switch, RouteComponentProps, Route } from \"react-router\";\n\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport ShoppingCart from \"@material-ui/icons/ShoppingCart\";\nimport Receipt from \"@material-ui/icons/Receipt\";\nimport Flag from \"@material-ui/icons/Flag\";\nimport MoreHoriz from \"@material-ui/icons/MoreHoriz\";\nimport green from \"@material-ui/core/colors/green\";\n\nimport AddOrder from \"./AddOrder\";\nimport AddProject from \"./AddProject\";\nimport AddOther from \"./AddOther\";\nimport { getCurrentTransaction, Event, getActivityTypes, getElementTypes, TimeRecordingState } from \"../../state\";\n\nexport interface Props extends RouteComponentProps\n{\n username: string;\n}\n\ninterface State\n{\n newDialogOpen: boolean;\n}\n\nconst Block = styled.div`\n padding: 16px;\n min-height: 100vh;\n`;\n\nconst LowerRightButton = styled.div`\n position: fixed;\n bottom: ${56 + 16}px;\n right: 16px;\n`;\n\ntype ViewProps = { username: string } & RouteComponentProps;\n\ninterface View \n{\n urlPart: \"add-order\" | \"add-project\" | \"add-other\";\n view: React.ComponentType;\n icon: React.ComponentType;\n label: string;\n}\n\nconst views: View[] = [\n { urlPart: \"add-order\", label: i18n`Order`, view: AddOrder, icon: ShoppingCart },\n { urlPart: \"add-project\", label: i18n`Project`, view: AddProject, icon: Receipt },\n { urlPart: \"add-other\", label: i18n`Other`, view: AddOther, icon: Flag },\n]\n\nclass CurrentJob extends React.Component\n{\n state: State =\n {\n newDialogOpen: false\n }\n\n private onNewDialogClose = () =>\n {\n this.setState({ newDialogOpen: false });\n }\n\n private onNewDialogChoose = (type: string) => () =>\n {\n this.props.history.push(this.props.match.url + \"/\" + type);\n this.setState({ newDialogOpen: false });\n }\n\n private onAddClick = () =>\n {\n this.setState({ newDialogOpen: true });\n }\n\n private renderNewDialog()\n {\n return (\n \n {/* {i18n`Select Type`} */}\n
\n \n {\n views.map(({urlPart, icon: Icon, label}) => (\n \n \n \n \n {label}\n \n ))\n }\n \n
\n
\n );\n }\n\n private getEventIcon(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_ORDER\":\n return ;\n case \"ACTIVITY_OTHER\":\n return ;\n case \"ACTIVITY_PROJECT\":\n return ;\n default:\n return \"C\";\n }\n }\n\n private formatEventTitle(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_OTHER\":\n const activity = this.props.activityTypes.find(a => a.id === event.activityType);\n return activity ? activity.label : event.activityType;\n case \"ACTIVITY_ORDER\":\n return `Order ${event.orderNo}`;\n case \"ACTIVITY_PROJECT\":\n const elementType = this.props.elementTypes.find(e => e.id === event.elementType);\n return elementType ? elementType.label : event.elementType;\n default:\n return \"[TODO:TITLE]\";\n }\n }\n\n private formatEventTime(event: Event)\n {\n return i18n`${new Date(new Date(event.date))}:t(t)`;\n }\n\n private renderEventList()\n {\n const { transaction } = this.props;\n if(transaction !== undefined)\n {\n // pick out the events in reverse order\n // and filter out the CHECK_IN/CHECK_OUT events\n const [current, ...rest] = [...transaction.events]\n .filter(e => (e.type !== \"CHECK_IN\") && (e.type !== \"CHECK_OUT\"))\n .reverse();\n\n return (\n \n {i18n`Current activity`}\n {\n (current !== undefined) ? (\n \n \n {this.getEventIcon(current)}\n \n \n \n \n \n \n \n \n ) : (\n null\n )\n }\n {\n (rest.length > 0) ? (\n <>\n {i18n`Former activities`}\n {\n rest.map(event => (\n \n {this.getEventIcon(event)}\n \n \n ))\n }\n \n ) : (\n null\n )\n }\n \n );\n }\n\n }\n\n private renderViews()\n {\n const { match: { url } } = this.props;\n return (\n \n {\n views.map(({urlPart, view: View}) => (\n \n \n } />\n ))\n }\n \n <>\n {this.renderEventList()}\n \n \n \n \n \n \n \n \n )\n }\n\n render()\n {\n return (\n <>\n {this.renderNewDialog()}\n {this.renderViews()}\n \n );\n }\n}\n\ntype StateProps = ReturnType;\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => {\n const { username } = ownProps;\n return ({\n transaction: getCurrentTransaction(username, state),\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state)\n });\n}\n\nexport default connect(mapStateToProps)(CurrentJob);","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\"\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport styled from \"styled-components\";\nimport RadioButtonGroup from \"../../../components/RadioButtonGroup\";\nimport RadioButton from \"../../../components/RadioButton\";\nimport { getCheckinTypes, getAbsenceTypes, getCheckin, CheckinEvent, getCurrentTransaction, TimeRecordingState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { transactionOpen, transactionClose } from \"../state/action\";\nimport { checkIn, EVENT_TYPE_CHECK_IN } from \"../events\";\nimport { Event } from \"../state\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends ReturnType, ReturnType, RouteComponentProps\n{\n username: string;\n}\n\nconst Block = styled.div`\n padding: 16px;\n margin-top: 16px;\n`;\n\nconst ButtonBar = styled.div`\n margin-top: 32px;\n`;\n\ninterface State\n{\n checkin?: string;\n absence?: string;\n}\n\nclass CheckInOut extends React.Component\n{\n state: State = \n {\n absence: \"__NONE__\"\n }\n \n private onCheckinChange = (checkin: string) =>\n {\n this.setState({ checkin });\n }\n\n private onAbsenceChange = (e: React.ChangeEvent) =>\n {\n this.setState({ absence: e.target.value });\n }\n\n private onCheckinClick = () =>\n {\n if(this.state.checkin !== undefined)\n {\n const { absence } = this.state;\n const { username } = this.props;\n const event = checkIn(username, absence === \"__NONE__\" ? undefined : absence);\n this.props.transactionOpen(username, event);\n }\n }\n\n private onCheckoutClick = () =>\n {\n const { transactionClose, transaction, username } = this.props;\n if(transaction)\n {\n transactionClose(username, transaction.id);\n }\n }\n\n private getCheckin(): CheckinEvent | undefined\n {\n const { transaction } = this.props;\n if(transaction)\n {\n return transaction.events.find(t => t.type === EVENT_TYPE_CHECK_IN) as CheckinEvent\n }\n }\n\n private renderCheckin()\n {\n const { transactionType, absenceType } = this.props;\n const { checkin } = this.state;\n const c2: any = \"fieldset\";\n return (\n \n \n {\n transactionType.filter(t => t.type === \"in\").map(t => (\n \n ))\n }\n \n \n {i18n`Absence`}\n \n \n \n \n\n \n \n \n \n );\n }\n\n private renderCheckout(checkin: CheckinEvent, events: Event[])\n {\n const { absenceType } = this.props;\n const absence = absenceType.find(a => a.id === checkin.absence);\n const absenceLabel = absence ? absence.label : i18n`None`;\n\n const lastActivityDate = (events.length > 0) \n ? new Date(events[events.length - 1].date)\n : new Date(checkin.date);\n\n return (\n \n \n {i18n`You are checked in`}\n \n\n {i18n`Check-in Time`}\n {i18n`${new Date(checkin.date)}`}\n\n {i18n`Absence`}\n {absenceLabel}\n\n {i18n`Last Activity`}\n {i18n`${lastActivityDate}`}\n\n\n \n \n \n \n );\n }\n\n render()\n {\n const { transaction} = this.props;\n const checkin = this.getCheckin();\n const view = (checkin === undefined) ? (\n this.renderCheckin()\n ) : (\n this.renderCheckout(checkin, transaction ? transaction.events : [])\n );\n\n\n return (\n <>\n {view}\n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: {username: string}) => {\n return ({\n transactionType: getCheckinTypes(state),\n absenceType: getAbsenceTypes(state),\n checkedIn: getCheckin(state),\n transaction: getCurrentTransaction(ownProps.username, state)\n });\n};\n\nconst mapDispatchToProps = (dispatch: any) => ({\n // checkinSetType: (type: string) => dispatch(checkinSetType(type)),\n transactionOpen: (username: string, event: CheckinEvent) => dispatch(transactionOpen(username, event)),\n transactionClose: (username: string, id: string) => dispatch(transactionClose(username, id))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckInOut);","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport styled from \"styled-components\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps, Route, Switch, Redirect } from \"react-router\";\n\nimport BottomNavigation from \"@material-ui/core/BottomNavigation\";\nimport BottomNavigationAction, { BottomNavigationActionProps} from \"@material-ui/core/BottomNavigationAction\";\nimport Alarm from \"@material-ui/icons/Alarm\";\nimport Assignment from \"@material-ui/icons/Assignment\";\n\nimport { getCurrentTransaction, TimeRecordingState } from \"../state\";\n\nimport CurrentJob from \"./CurrentJob\";\nimport CheckInOut from \"./CheckInOut\";\n\nimport { fetchTransactions } from \"../state/action\";\nimport { ModuleProps } from \"../../config\";\n\nconst MyBottomNavigation = styled(BottomNavigation)`\n bottom: 0;\n position: fixed;\n width: 100vw;\n` as any;\n\nconst MainView = styled.div`\n margin-bottom: 56px;\n min-height: calc(100vh - 112px);\n` ;\n\nexport interface Props extends ModuleProps\n{\n}\n\ntype StateProps = ReturnType & ReturnType;\n\ntype ViewType = \"activity\" | \"log\" | \"check-in-out\";\n\ntype ViewProps = { username: string } & RouteComponentProps;\n\ninterface View \n{\n urlPart: ViewType;\n view: React.ComponentType;\n icon: React.ComponentType;\n label: string;\n default?: boolean;\n props?: (props: Props & StateProps) => Partial;\n}\n\ninterface State\n{\n}\n\nclass Auto extends React.Component\n{\n componentWillMount()\n {\n this.props.fetchTransactions();\n }\n\n state: State =\n {\n currentView: \"check-in-out\"\n }\n\n private views: View[] = [\n { urlPart: \"check-in-out\", view: CheckInOut, icon: Alarm, label: i18n`Check In / Out`, default: true },\n { urlPart: \"activity\", view: CurrentJob, label: i18n`Activity`, icon: Assignment, props: ({transaction}) => ({ disabled: !transaction}) }\n // { urlPart: \"log\", view: Log, label: i18n`Log`, icon: PlaylistAddCheck, props: ({transaction}) => ({ disabled: !transaction}) }\n\n ];\n\n private onValueChange = (_event: React.ChangeEvent, value: ViewType) =>\n {\n this.props.history.replace(this.getPath(value));\n }\n\n private getPath(path: string)\n {\n return this.props.match.url + \"/\" + path;\n }\n\n private renderView() : React.ReactNode\n {\n const { username } = this.props;\n if(username === undefined)\n {\n return;\n }\n\n return (\n \n {\n this.views.map(({ urlPart, view: View }) => (\n } />\n ))\n }\n \n v.default)[0].urlPart)} />\n \n \n );\n }\n\n private getActiveView(): ViewType\n {\n const { location } = this.props;\n return this.views.map(view => view.urlPart)\n .find(urlPart => location.pathname.indexOf(this.getPath(urlPart)) === 0)\n || this.views[0].urlPart;\n }\n\n render()\n {\n return (\n <>\n \n {this.renderView()}\n \n \n {\n this.views.map(({label, icon: Icon, urlPart, props}) => (\n } value={urlPart} {...(props ? props(this.props) : {})} />\n ))\n }\n \n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => ({\n transaction: ownProps.username ? getCurrentTransaction(ownProps.username, state) : undefined\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n fetchTransactions: () => dispatch(fetchTransactions() as any)\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Auto); ","import * as React from \"react\";\nimport { ModuleProps } from \"../../config\";\nimport { Route, Switch, RouteComponentProps } from \"react-router\";\nimport { Button } from \"@material-ui/core\";\nimport i18n from \"es2015-i18n-tag\";\nimport Manuel from \"./Manuel\";\nimport Auto from \"./Auto\";\nimport UsernameContext from \"../../../context/UsernameContext\";\n\nexport interface Props extends ModuleProps\n{\n\n}\n\ntype NavigationButtonProps = { path: string, children: React.ReactChildren, style?: React.CSSProperties } & Pick, \"history\">;\n\nconst NavigationButton = ({ path, children, history, style }: NavigationButtonProps) => (\n \n);\n\nfunction Index(props: Props)\n{\n const urlAuto = `${props.match.url}/auto`;\n const urlManual = `${props.match.url}/manual`;\n return (\n \n \n (\n \n )}/>\n (\n \n )} />\n \n
\n {i18n`Standard`}\n {i18n`Manual Entry`}\n
\n
\n
\n
\n );\n}\n\nexport default Index;\n","import { createModuleStore, createModule } from \"../helper\";\n\nimport App from \"./views/Index\";\nimport reducer from \"./state\";\n\nconst store = createModuleStore(reducer, \"time_recording\", 1);\nconst TimeRecordingModule = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default TimeRecordingModule;\n","import i18n from \"es2015-i18n-tag\";\nimport Timer from \"@material-ui/icons/Timer\";\nimport TimeRecording from \".\";\nimport { Module } from \"../config\";\n\nconst config: Module =\n{\n title: i18n`Time Recording`, \n icon: Timer, \n component: TimeRecording, \n url: \"/time-recording\",\n roles: [\"mobility.time\"]\n}\n\nexport default config;\n","import styled, { keyframes }from \"styled-components\";\n\nconst kf = keyframes`\n 0% { opacity:1; }\n 50% { opacity:0; }\n 100% { opacity:1; }\n`;\n\ninterface Props\n{\n duration?: number;\n easing?: string;\n}\n\nconst SoftBlink = styled.div`\n animation: ${kf} ${props => (props.duration || 3) + \"s\"} infinite ${props => props.easing || \"ease-in-out\"};\n`;\n\nexport default SoftBlink;\n\n\n","\nexport type BarcodeType = \"container\" | \"item\" | \"location\" | \"unknown\";\n\nexport class Scanner\n{\n private scanHandle: number = -1;\n private scannedSymbols: string = \"\";\n private onSuccess: (barcode: string, type: BarcodeType) => void;\n private detectType: boolean;\n\n constructor(onSuccess: (barcode: string) => void);\n constructor(onSuccess: (barcode: string, type: BarcodeType) => void, detectType: true);\n constructor(onSuccess: (barcode: string, type: BarcodeType) => void, detectType = false)\n {\n this.onSuccess = onSuccess;\n this.detectType = detectType;\n window.addEventListener(\"keyup\", this.onKeyup);\n }\n\n destroy()\n {\n window.removeEventListener(\"keyup\", this.onKeyup);\n }\n\n private isContainer = (barcode: string | undefined) => (barcode !== undefined) && (barcode.length === 10) && (barcode.substr(0, 1).toUpperCase() === \"C\");\n\n private getBarcodeType(symbols: string): BarcodeType\n {\n if(this.isContainer(symbols))\n {\n return \"container\";\n }\n\n if((symbols.length === 28))\n {\n const control1 = symbols.substr(0, 2);\n const control2 = symbols.substr(16, 2);\n\n if(control1 === \"01\" && (control2 === \"10\" || control2 === \"21\"))\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 16)\n {\n const control1 = symbols.substr(0, 2);\n if(control1 === \"01\")\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 13)\n {\n const control1 = symbols.substr(0, 2);\n if(control1 === \"57\")\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 6) // sku\n {\n return \"item\";\n }\n\n if(symbols.length === 9)\n {\n return \"location\";\n }\n \n return \"unknown\";\n }\n\n private onKeyup = (e: KeyboardEvent) => \n {\n const ch = e.key;\n window.clearTimeout(this.scanHandle);\n if(ch !== undefined && ch.length === 1)\n {\n this.scannedSymbols += e.shiftKey ? ch.toUpperCase() : ch;\n }\n this.scanHandle = window.setTimeout(this.scanTimeout, 200);\n }\n\n private scanTimeout = () =>\n {\n this.onSuccess(this.scannedSymbols, this.getBarcodeType(this.scannedSymbols));\n this.scannedSymbols = \"\";\n }\n}\n\n","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport { getInventoryScannedItem, getInventoryScannedLocation, getInventoryIsLoadingItem, getInventoryCurrentItem, getInventoryIsUpdatingItem } from \"../../state\";\n\nimport scanIcon from \"../../icons/scan.svg\";\nimport SoftBlink from \"../../../../components/SoftBlink\";\nimport { stockScannedItem, stockScannedLocation, stockScannedClear, stockFetchItem, stockUpdateItem, stockFetchPendingItems, stockClearPreviousLocationAndItems, stockRevertLocation, stockConfirmLocationComplete } from \"../../state/action\";\nimport { Scanner } from \"../../../../util/scanner\";\nimport { TRACKING_SERIAL, TRACKING_BATCH, TRACKING_ORDINARY, apiCall } from \"../../api/StockApi\";\nimport RadioButtonGroup from \"../../../../components/RadioButtonGroup\";\nimport { StockState, getInventoryPreviousLocation, getInventoryPendingItems } from \"../../state/reducer\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Input from \"@material-ui/core/Input\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Radio from \"@material-ui/core/Radio\";\nimport Check from \"@material-ui/icons/Check\";\nimport Close from \"@material-ui/icons/Close\";\nimport List from \"@material-ui/core/List\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { RadioGroup, Table, TableHead, TableRow, TableCell, TableBody } from \"@material-ui/core\";\n\ninterface RouteParams {\n warehouse: string;\n draft: string;\n}\n\nexport interface Props extends RouteComponentProps {\n\n}\n\ninterface State {\n quantity: string;\n containerIsClosed?: string;\n confirmChecked: boolean;\n showAlreadyCountedDialog?: {\n result: ValidateResult;\n confirm: (action: \"cancel\" | \"add\" | \"overwrite\") => void;\n };\n action: string;\n}\n\ninterface ValidateResult {\n previouslyCounted: boolean;\n qty: number;\n date: string;\n addAllowed: boolean;\n draft: string;\n}\n\n\nconst mapStateToProps = (state: StockState) => ({\n scannedItem: getInventoryScannedItem(state),\n scannedLocation: getInventoryScannedLocation(state),\n previousLocation: getInventoryPreviousLocation(state),\n pendingItems: getInventoryPendingItems(state),\n loadingItem: getInventoryIsLoadingItem(state),\n updatingItem: getInventoryIsUpdatingItem(state),\n currentItem: getInventoryCurrentItem(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n scanItem: (item: string) => dispatch(stockScannedItem(item)),\n scanLocation: (location: string) => dispatch(stockScannedLocation(location)),\n scanClear: () => dispatch(stockScannedClear()),\n fetchItem: (draft: string, barcode: string, location: string, warehouse: string) => dispatch(stockFetchItem(draft, barcode, location, warehouse) as any),\n updateItem: (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string) =>\n dispatch(stockUpdateItem(draftId, warehouse, barcode, location, quantity, sku) as any),\n fetchPendingItems: (warehouse: string, draft: string, location: string) =>\n dispatch(stockFetchPendingItems(warehouse, draft, location)),\n clearPreviousLocationAndItems: () => dispatch(stockClearPreviousLocationAndItems()),\n revertLocation: () => dispatch(stockRevertLocation()),\n confirmLocationComplete: (warehouse: string, draft: string, location: string) =>\n dispatch(stockConfirmLocationComplete(warehouse, draft, location))\n});\n\ntype StateProps = ReturnType & ReturnType;\n\nconst getTrackingTypeLabel = (n: number) =>\n (n === TRACKING_BATCH) ? i18n`Batch` :\n (n === TRACKING_SERIAL) ? i18n`Serial` :\n (n === TRACKING_ORDINARY) ? i18n`Ordinary`\n : i18n`Unknown`\n\ninterface ScanInputProps {\n label: string;\n value?: string;\n}\nconst ScanInput = ({ label, value = undefined }: ScanInputProps) => (\n \n \n \n {label}\n {\n value ? (\n {value}\n ) : (\n \n _\n \n )\n }\n \n \n {\n value ? : null\n }\n \n \n \n);\n\nclass Inventory extends React.Component\n{\n private scanner: Scanner | null = null;\n\n state: State = { quantity: \"\", confirmChecked: false, action: \"cancel\" };\n\n componentWillMount() {\n this.scanner = new Scanner(this.scannedBardcode);\n this.onPropsChanged(this.props);\n }\n\n componentWillUnmount() {\n if (this.scanner !== null) {\n this.scanner.destroy();\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps) {\n this.onPropsChanged(nextProps);\n }\n\n private onPropsChanged(props: Props & StateProps) {\n const { scannedItem, scannedLocation, currentItem, loadingItem, pendingItems, previousLocation, fetchPendingItems } = props;\n const { draft, warehouse } = props.match.params;\n\n if (previousLocation !== undefined) {\n if (pendingItems === undefined) {\n fetchPendingItems(warehouse, draft, previousLocation);\n }\n else if (pendingItems.length === 0) {\n this.props.clearPreviousLocationAndItems();\n }\n }\n\n if (scannedItem && scannedLocation) {\n if (!currentItem && !loadingItem) {\n this.props.fetchItem(draft, scannedItem, scannedLocation, warehouse);\n }\n else if (currentItem && currentItem !== this.props.currentItem && currentItem.tracking === TRACKING_SERIAL && !this.isContainer(scannedItem)) {\n this.props.updateItem(draft, warehouse, scannedItem, scannedLocation, 1, currentItem.sku);\n }\n }\n else {\n this.setState({ quantity: \"\" });\n }\n }\n\n private isContainer = (barcode: string | undefined) => (barcode !== undefined) && (barcode.length === 10) && (barcode.substr(0, 1).toUpperCase() === \"C\");\n\n private scannedBardcode = (symbols: string) => {\n if (this.showLoader()) {\n return;\n }\n\n if (this.isContainer(symbols)) {\n this.props.scanItem(symbols.toUpperCase());\n }\n\n if ((symbols.length === 28)) {\n const control1 = symbols.substr(0, 2);\n const control2 = symbols.substr(16, 2);\n\n if (control1 === \"01\" && (control2 === \"10\" || control2 === \"21\")) {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 16) {\n const control1 = symbols.substr(0, 2);\n if (control1 === \"01\") {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 13) {\n const control1 = symbols.substr(0, 2);\n if (control1 === \"57\") {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 6) // sku\n {\n this.props.scanItem(symbols);\n }\n\n if (symbols.length === 9) {\n this.props.scanLocation(symbols);\n }\n }\n\n private handleCloseDialog = () => {\n this.props.scanClear();\n this.setState({ quantity: \"\", containerIsClosed: undefined });\n }\n\n\n private showConfirmAlreadyCountedDialog = async (result: ValidateResult) => {\n return new Promise<\"add\" | \"overwrite\" | \"cancel\">((accept, reject) => {\n\n this.setState({\n showAlreadyCountedDialog: {\n confirm: (v) => accept(v),\n result\n },\n action: \"cancel\"\n });\n\n });\n }\n\n private handleSaveQuantity = async () => {\n const {\n match: { params: { draft, warehouse } },\n scannedItem, scannedLocation, currentItem\n } = this.props;\n\n let overrideQuantity: number | undefined = undefined;\n\n // TODO - skip for container\n\n const result: ValidateResult = await apiCall(`stock-management/inventory/${warehouse}/report/${scannedLocation}/item/${scannedItem}`);\n if (result.previouslyCounted || (result.draft !== null && draft !== result.draft)) {\n const dialogResult = await this.showConfirmAlreadyCountedDialog(result);\n if (dialogResult === \"add\") {\n overrideQuantity = parseFloat(this.state.quantity) + result.qty;\n }\n else if (dialogResult === \"overwrite\") {\n overrideQuantity = parseFloat(this.state.quantity);\n }\n\n this.setState({ showAlreadyCountedDialog: undefined });\n this.props.scanClear();\n\n if (dialogResult === \"cancel\") {\n return;\n }\n }\n\n\n if (scannedItem !== undefined && scannedLocation !== undefined && currentItem !== undefined) {\n const quantity = this.isContainer(scannedItem) ? 0 : (overrideQuantity ?? parseFloat(this.state.quantity));\n this.props.updateItem(draft, warehouse, scannedItem, scannedLocation, quantity, currentItem.sku);\n }\n }\n\n private showDialog = () => this.props.currentItem !== undefined\n && (this.props.currentItem.tracking !== TRACKING_SERIAL || this.isContainer(this.props.scannedItem));\n\n private showLoader = () => this.props.loadingItem;\n\n private showDialogLoader = () => this.props.updatingItem;\n\n private onQuantityChange = (e: React.ChangeEvent) => {\n const quantity = e.target.value;\n\n if (this.props.currentItem?.quantity !== undefined) {\n if ((Number(quantity)) >= Number(this.props.currentItem?.quantity)*1.1)\n e.target.style.color = \"red\";\n else\n e.target.style.color = \"inherit\";\n }\n\n this.setState({ quantity });\n }\n\n private renderDialog() {\n const { scannedLocation: location, currentItem: item, scannedItem: barcode } = this.props;\n const { quantity, containerIsClosed = undefined } = this.state;\n if (item === undefined) {\n return;\n }\n\n const onKeyPressEnterHandler = (e: React.KeyboardEvent): void => {\n if (e.key === \"Enter\" && e.currentTarget.value.length > 0) {\n this.handleSaveQuantity();\n }\n }\n\n const save = () => {\n if ((this.isContainer(barcode) && containerIsClosed === \"0\")) {\n this.handleCloseDialog();\n }\n else {\n this.handleSaveQuantity();\n }\n }\n\n return (\n this.props.scanClear()}>\n \n \n \n \n \n \n {i18n`Quantity`}\n \n \n \n \n
\n {this.showDialogLoader() ? this.renderLoader() : null}\n \n \n {i18n`Name`}\n {item.name}\n \n \n {i18n`Location`}\n {location}\n \n \n {i18n`SKU`}\n {item.sku}\n \n \n {i18n`Tracking Type`}\n {getTrackingTypeLabel(item.tracking)}\n \n {/**/}\n {/* {i18n`Expected Qty`}*/}\n {/* {item.quantity}*/}\n {/**/}\n \n {\n (this.isContainer(barcode)) ? (\n
\n \n {i18n`You have scanned a container. Is the container closed and sealed?`}\n this.setState({ containerIsClosed: v })}>\n } label=\"Yes, the container is closed\" />\n } label=\"No, the container is open\" />\n \n \n \n {\n (containerIsClosed === \"1\") ? i18n`Please keep the container closed and proceed to the next item.` :\n (containerIsClosed === \"0\") ? i18n`Please scan and count the contents of the container individually.` :\n null\n }\n \n
\n ) : (\n \n {i18n`Quantity`}\n {item.unit}}\n value={quantity}\n onChange={this.onQuantityChange}\n inputProps={{ onKeyDown: onKeyPressEnterHandler }}\n\n />\n \n )\n }\n
\n
\n
\n
\n )\n }\n\n private renderLoader = (left = 16, top = 16, right = 16) => (\n \n );\n\n private onConfirmNullClick = () => {\n const { previousLocation = \"\" } = this.props;\n const { draft, warehouse } = this.props.match.params;\n const { confirmLocationComplete } = this.props;\n this.setState({ confirmChecked: false });\n confirmLocationComplete(warehouse, draft, previousLocation);\n }\n\n private onCancelNullClick = () => {\n const { revertLocation } = this.props;\n this.setState({ confirmChecked: false });\n revertLocation();\n }\n\n private renderLocationChanged() {\n const { pendingItems, previousLocation: location } = this.props;\n\n if (location === undefined) {\n // TODO: we should never be here, fix up state and go back home\n return;\n }\n\n if (pendingItems === undefined || pendingItems.length === 0) {\n return (\n
Hold on a second
\n );\n }\n\n return (\n
\n \n {i18n`The following items are all registered at location ${location} but have not had quantities reported. Please check if all of these have no items present at the location before continuing.`}\n \n \n {\n pendingItems.map(item => (\n \n \n \n ))\n }\n \n \n \n this.setState({ confirmChecked })}\n control={}\n label={i18n`I confirm that none of the listed items above are present at location ${location}`}\n />\n \n \n \n  \n \n \n \n \n \n
\n );\n }\n\n renderAlreadyCounted() {\n const { showAlreadyCountedDialog, action } = this.state;\n const { draft } = this.props.match.params;\n\n const onDialogClose = () => {\n this.setState({ showAlreadyCountedDialog: undefined });\n this.props.scanClear();\n }\n\n return (\n \n \n \n \n \n \n \n {i18n`WARNING`}\n \n \n \n \n {\n (showAlreadyCountedDialog?.result.draft !== null && showAlreadyCountedDialog?.result.draft !== draft) ? (\n
\n \n This item was already counted on a different draft. Please contact the\n supervisor for help.\n \n
\n ) : (\n
\n \n This item has already been counted at this location\n \n \n \n \n Date\n Quantity\n \n \n \n \n {showAlreadyCountedDialog?.result.date}\n {showAlreadyCountedDialog?.result.qty}\n \n \n
\n this.setState({ action: (event.target as HTMLInputElement).value })} value={this.state.action} style={{ marginTop: 16 }}>\n } label={\n <>Overwrite the current count.Qty = {parseFloat(this.state.quantity)}\n } />\n } label={\n <>Add to the current count. Qty = {showAlreadyCountedDialog!.result.qty + parseFloat(this.state.quantity)}.\n } />\n } label={\n <>Do nothing. Qty = {showAlreadyCountedDialog!.result.qty}\n } />\n \n
\n )\n }\n
\n );\n }\n\n render() {\n const { warehouse, draft } = this.props.match.params;\n const { scannedItem = undefined, scannedLocation = undefined, previousLocation } = this.props;\n const { showAlreadyCountedDialog } = this.state;\n\n if (showAlreadyCountedDialog !== undefined) {\n return this.renderAlreadyCounted();\n }\n\n if (previousLocation !== undefined) {\n return this.renderLocationChanged();\n }\n\n return (\n
\n { this.showLoader() ? this.renderLoader() : null}\n \n \n \"Barcode\n \n \n \n \n \n {i18n`Warehouse`}\n {warehouse}\n \n \n {i18n`Draft`}\n {draft}\n \n \n \n \n \n {this.showDialog() ? this.renderDialog() : null}\n
\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Inventory);","import * as React from \"react\";\nimport { useState } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, TextField, MenuItem, Button } from \"@material-ui/core\";\nimport { Draft } from \"../../api/StockApi\";\n\nexport interface Props\n{\n warehouse: string;\n drafts: Draft[];\n navigate: (relativePath: string) => void;\n}\n\nfunction SelectDraft(props: Props)\n{\n const { warehouse = \"\", drafts, navigate } = props;\n const [draft, setDraft] = useState(\"\");\n \n return (\n <>\n \n \n setDraft(e.target.value)}\n label={i18n`Draft`}>\n \n {\n drafts.map(draft => (\n {draft.name}\n ))\n }\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default SelectDraft;","import * as React from \"react\"\nimport { RouteComponentProps, Switch, Route } from \"react-router\";\nimport styled from \"styled-components\";\nimport Inventory from \"./Inventory\";\nimport { getInventoryDrafts } from \"../../state\";\nimport { connect } from \"react-redux\";\nimport { stockDraftsLoad, stockInit, stockDismissError, stockDebugClearState } from \"../../state/action\";\nimport { StockState } from \"../../state/reducer\";\nimport SelectDraft from \"./SelectDraft\";\n\ninterface RouteProps\n{\n warehouse: string;\n}\n\nexport interface Props extends RouteComponentProps\n{\n}\n\nconst ViewBase = styled.div`\n padding: 16px;\n`;\n\nconst mapStateToProps = (state: StockState) => ({\n drafts: getInventoryDrafts(state),\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n draftsLoad: (warehouse: string) => dispatch(stockDraftsLoad(warehouse)),\n dismissError: (id: string) => dispatch(stockDismissError(id)),\n clearState: () => dispatch(stockDebugClearState()),\n init: () => dispatch(stockInit())\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface State\n{\n draft?: string;\n}\n\n\nclass StockManagement extends React.Component\n{\n state: State = {}\n\n private navigateToView = (relativePath: string) => \n this.props.history.push(`${this.props.match.url}/${relativePath}`);\n\n componentWillMount()\n {\n this.props.init();\n if(this.props.match.params.warehouse)\n {\n this.props.draftsLoad(this.props.match.params.warehouse);\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n const { warehouse: nextWarehouse = undefined } = nextProps.match.params;\n const { warehouse: currentWarehouse = undefined } = this.props.match.params;\n if(nextWarehouse !== currentWarehouse && nextWarehouse)\n {\n this.props.draftsLoad(nextWarehouse);\n }\n }\n\n render()\n {\n const { match, drafts } = this.props;\n\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StockManagement);","import { Dispatch } from \"redux\";\nimport { Item, getItem, RelocationRequest, moveItem } from \"../../../api/StockApi\";\nimport { getErrorReason } from \"../../action\";\nimport { generateUuid } from \"../../../../../util/uuid\";\nimport { BusyAction } from \"../../../../../state/ui/busy\";\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM\n//\nexport interface StockRelocationFetchItemAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM\";\n}\nexport const _stockRelocationFetchItem = (barcode: string): StockRelocationFetchItemAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM\", uiMeta: { busy: true }\n});\nexport const stockRelocationFetchItem = (barcode: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockRelocationFetchItem(barcode));\n getItem(barcode)\n .then(item => { dispatch(stockRelocationFetchItemSuccess(item)) })\n .catch(e => {\n let errorMessage = (e.message) \n ? e.message\n : `${getErrorReason(e.error)}Could not fetch item`;\n dispatch(stockRelocationFetchItemFailure(generateUuid(), errorMessage));\n });\n}\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM_SUCCESS\n//\nexport interface StockRelocationFetchItemSuccessAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\";\n item: Item;\n}\nexport const stockRelocationFetchItemSuccess = (item: Item): StockRelocationFetchItemSuccessAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\",\n item,\n uiMeta: { busy: false }\n});\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM_FAILED\n//\nexport interface StockRelocationFetchItemFailureAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM_FAILURE\";\n id: string;\n message: string;\n}\nexport const stockRelocationFetchItemFailure = (id: string, message: string): StockRelocationFetchItemFailureAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM_FAILURE\",\n id, message,\n uiMeta: { busy: false }\n});\n\n//\n// Action: STOCK_RELOCATION_COMMIT\n//\nexport interface StockRelocationCommitAction\n{\n type: \"STOCK_RELOCATION_COMMIT\";\n request: RelocationRequest;\n}\nexport const _stockRelocationCommit = (request: RelocationRequest): StockRelocationCommitAction => ({\n type: \"STOCK_RELOCATION_COMMIT\",\n request\n});\n\nexport const stockRelocationCommit = (request: RelocationRequest) => (dispatch: Dispatch) =>\n{\n dispatch(_stockRelocationCommit(request));\n moveItem(request).then(\n () => dispatch(stockRelocationCommitSuccess(request)),\n e => dispatch(stockRelocationCommitFailure(request, generateUuid(), e?.message || \"Could not move item\"))\n );\n};\n\n//\n// Action: STOCK_RELOCATION_COMMIT_SUCCESS\n//\nexport interface StockRelocationCommitSuccessAction\n{\n type: \"STOCK_RELOCATION_COMMIT_SUCCESS\";\n request: RelocationRequest;\n}\nexport const stockRelocationCommitSuccess = (request: RelocationRequest): StockRelocationCommitSuccessAction => ({\n type: \"STOCK_RELOCATION_COMMIT_SUCCESS\",\n request\n});\n\n//\n// Action: STOCK_RELOCATION_COMMIT_FAILURE\n//\nexport interface StockRelocationCommitFailureAction\n{\n type: \"STOCK_RELOCATION_COMMIT_FAILURE\";\n request: RelocationRequest;\n id: string;\n message: string;\n}\nexport const stockRelocationCommitFailure = (request: RelocationRequest, id:string, message: string): StockRelocationCommitFailureAction => ({\n type: \"STOCK_RELOCATION_COMMIT_FAILURE\",\n request, id, message\n});\n\n//\n// Action: STOCK_RELOCATION_CLEAR\n//\nexport interface StockRelocationClearAction\n{\n type: \"STOCK_RELOCATION_CLEAR\";\n}\nexport const stockRelocationClear = (): StockRelocationClearAction => ({\n type: \"STOCK_RELOCATION_CLEAR\"\n});\n\n//\n// Action: STOCK_RELOCATION_SET_SOURCE_LOCATION\n//\nexport interface StockRelocationSetSourceLocationAction\n{\n type: \"STOCK_RELOCATION_SET_SOURCE_LOCATION\";\n location: string;\n}\nexport const stockRelocationSetSourceLocation = (location: string): StockRelocationSetSourceLocationAction => ({\n type: \"STOCK_RELOCATION_SET_SOURCE_LOCATION\",\n location\n});\n\n//\n// Action: STOCK_RELOCATION_SET_DESTINATION_LOCATION\n//\nexport interface StockRelocationSetDestinationLocationAction\n{\n type: \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\";\n location: string;\n}\nexport const stockRelocationSetDestinationLocation = (location: string): StockRelocationSetDestinationLocationAction => ({\n type: \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\",\n location\n});\n\n//\n// Action: STOCK_RELOCATION_SET_QUANTITY\n//\nexport interface StockRelocationSetQuantityAction\n{\n type: \"STOCK_RELOCATION_SET_QUANTITY\";\n qty: number;\n}\nexport const stockRelocationSetQuantity = (qty: number): StockRelocationSetQuantityAction => ({\n type: \"STOCK_RELOCATION_SET_QUANTITY\",\n qty\n});\n\n//\n// Action: STOCK_RELOCATION_SET_ITEM\n//\nexport interface StockRelocationSetItemAction\n{\n type: \"STOCK_RELOCATION_SET_ITEM\";\n item: Item;\n}\nexport const stockRelocationSetItem = (item: Item): StockRelocationSetItemAction => ({\n type: \"STOCK_RELOCATION_SET_ITEM\",\n item\n});\n\nexport type StockRelocationAction = StockRelocationFetchItemAction\n | StockRelocationFetchItemSuccessAction\n | StockRelocationFetchItemFailureAction\n | StockRelocationCommitAction\n | StockRelocationCommitSuccessAction\n | StockRelocationCommitFailureAction\n | StockRelocationClearAction\n | StockRelocationSetSourceLocationAction\n | StockRelocationSetDestinationLocationAction\n | StockRelocationSetQuantityAction\n | StockRelocationSetItemAction\n ;","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { RouteComponentProps } from \"react-router\";\n\nimport Stepper from \"@material-ui/core/Stepper\";\nimport Step from \"@material-ui/core/Step\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport StepContent from \"@material-ui/core/StepContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\n\nimport { Scanner, BarcodeType } from \"../../../../util/scanner\";\nimport { stockRelocationFetchItem, stockRelocationSetItem, stockRelocationSetSourceLocation, stockRelocationSetDestinationLocation, stockRelocationSetQuantity, stockRelocationCommit, stockRelocationClear } from \"../../state/action/relocation\";\nimport { connect } from \"react-redux\";\nimport { Item, RelocationRequest } from \"../../api/StockApi\";\nimport { getRelocationRequest, getCurrentItem, StockState } from \"../../state/reducer\";\n\ninterface RouteProps\n{\n warehouse: string;\n}\n\nexport interface Props extends RouteComponentProps\n{\n \n}\n\nconst mapStateToProps = (state: StockState) => ({\n item: getCurrentItem(state),\n request: getRelocationRequest(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n fetchItem: (barcode: string) => dispatch(stockRelocationFetchItem(barcode)),\n setItem: (item: Item) => dispatch(stockRelocationSetItem(item)),\n setSourceLocation: (location: string) => dispatch(stockRelocationSetSourceLocation(location)),\n setDestLocation: (location: string) => dispatch(stockRelocationSetDestinationLocation(location)),\n setQuantity: (qty: number) => dispatch(stockRelocationSetQuantity(qty)),\n clear: () => dispatch(stockRelocationClear()),\n commit: (request: RelocationRequest) => dispatch(stockRelocationCommit(request)),\n clearNotifications: () => dispatch({ type: \"NOTIFICATIONS_CLEAR\" }),\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface State\n{\n quantityInput: string;\n}\n\nconst STEP_LOCATION_SOURCE = 0;\nconst STEP_ITEM = 1;\nconst STEP_QUANTITY = 2;\nconst STEP_LOCATION_DEST = 3;\nconst STEP_REVIEW = 4;\n\nclass Relocation extends React.Component\n{\n private qtyInput?: HTMLInputElement;\n private scanner?: Scanner;\n private clearNotificationsHandle: any = null;\n\n state: State = { quantityInput: \"\" };\n\n componentDidMount()\n {\n this.scanner = new Scanner(this.onItemScanned, true);\n if(this.props.item !== undefined)\n {\n this.onItemFetched(this.props.item);\n }\n }\n\n componentWillUnmount()\n {\n if(this.scanner !== undefined)\n {\n this.scanner.destroy();\n this.scanner = undefined;\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n const { clearNotifications } = nextProps;\n\n if (nextProps.item !== undefined)\n {\n this.onItemFetched(nextProps.item);\n }\n\n if (this.getActiveStep() === STEP_LOCATION_SOURCE && this.clearNotificationsHandle === null)\n {\n this.clearNotificationsHandle = setTimeout(() => {\n clearNotifications();\n this.clearNotificationsHandle = null;\n }, 3000);\n }\n }\n\n componentDidUpdate()\n {\n if(this.getActiveStep() === STEP_QUANTITY && this.qtyInput !== undefined)\n {\n this.qtyInput.focus();\n }\n }\n\n private onItemFetched(item: Item)\n {\n const step = this.getActiveStep();\n if(step === STEP_ITEM)\n {\n this.props.setItem(item);\n }\n }\n\n private onItemScanned = (barcode: string, type: BarcodeType) =>\n {\n const step = this.getActiveStep();\n if(step === STEP_LOCATION_SOURCE && type === \"location\")\n {\n this.props.setSourceLocation(barcode);\n }\n else if (step === STEP_LOCATION_DEST && type === \"location\")\n {\n this.props.setDestLocation(barcode);\n }\n else if(step === STEP_ITEM && type === \"item\")\n {\n this.props.fetchItem(barcode);\n }\n }\n\n private getActiveStep(): number\n {\n if(this.props.request.from === undefined)\n {\n return STEP_LOCATION_SOURCE;\n }\n\n if(this.props.request.item === undefined)\n {\n return STEP_ITEM;\n }\n\n if(this.props.request.qty === undefined)\n {\n return STEP_QUANTITY;\n }\n\n if(this.props.request.to === undefined)\n {\n return STEP_LOCATION_DEST;\n }\n\n return STEP_REVIEW;\n }\n\n private onQuantityKeypress = (e: React.ChangeEvent) =>\n {\n this.setState({ quantityInput: e.currentTarget.value });\n }\n\n private isValidQuantityInput = () => /^\\d+(\\.\\d+)?$/.test(this.state.quantityInput);\n\n private onQuantityCommit = () => this.props.setQuantity(parseFloat(this.state.quantityInput));\n\n private onCommit = () =>\n {\n const request: RelocationRequest = {\n ...this.props.request as RelocationRequest,\n warehouse: this.props.match.params.warehouse\n }\n // I: to get this far all fields of request has been filled in\n this.props.commit(request);\n }\n\n private onClear = () => \n {\n this.props.clear();\n }\n\n render()\n {\n const {\n to: locationDest = undefined,\n from: locationSource = undefined,\n item = undefined,\n qty: quantity = undefined,\n } = this.props.request;\n\n const activeStep = this.getActiveStep();\n return (\n
\n Relocation\n
\n \n
\n \n \n {locationSource === undefined ? i18n`Scan source location` : i18n`Source location: ${locationSource}`}\n \n {i18n`Scan the location barcode where the items are currently located.`}\n \n \n \n {item === undefined ? i18n`Scan item`: i18n`Scan Item (SKU): \"${item.sku}\"`}\n \n {i18n`Scan the item that is being relocated.`}\n \n \n \n {quantity === undefined ? i18n`Enter quantity` : i18n`Quantity: ${quantity.toFixed(2)}`}\n \n pcs, type: \"number\" }}\n style={{marginTop: 8, marginBottom: 8}} \n inputRef={input => this.qtyInput = input} />\n \n \n \n \n {locationDest === undefined ? i18n`Scan destination location` : i18n`Destination location: ${locationDest}`}\n \n {i18n`Scan the location where the items are being moved to.`}\n \n \n \n {i18n`Review and commit`}\n \n {\n (item !== undefined && locationDest !== undefined && locationSource !== undefined) ? (\n \n {i18n`Item`}\n {item.name}\n \n {i18n`From`}\n {i18n`To`}\n {locationSource}\n {locationDest}\n \n {i18n`Quantity`}\n {quantity}\n \n \n \n \n ) : null\n }\n \n \n \n
\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Relocation);","import { useReducer, Reducer, useEffect } from \"react\";\n\ninterface State\n{\n response?: T;\n error?: any;\n isLoading: boolean;\n}\n\ninterface Resolved \n{\n type: \"SUCCESS\";\n value: T;\n}\n\ninterface Rejected\n{\n type: \"REJECTED\";\n error: any;\n}\n\ninterface Loading\n{\n type: \"LOADING\";\n}\n\ninterface Reset\n{\n type: \"RESET\";\n}\n\ntype Action = Resolved | Rejected | Loading | Reset;\n\nconst fetchReducer = (state: State, action: Action) =>\n{\n if(action.type === \"LOADING\")\n {\n return {\n isLoading: true\n }\n }\n\n if(action.type === \"SUCCESS\")\n {\n return {\n response: action.value,\n isLoading: false\n }\n }\n\n if(action.type === \"REJECTED\")\n {\n return {\n error: action.error,\n isLoading: false\n }\n }\n\n if(action.type === \"RESET\")\n {\n return { isLoading: false };\n }\n\n return state;\n}\n\nexport const createUseFetch = (fetch: typeof window.fetch) => (input: RequestInfo | null, init?: RequestInit): [T | undefined, boolean, any] =>\n{\n const [state, dispatch] = useReducer, Action>>(fetchReducer, { isLoading: false });\n\n useEffect(() =>\n {\n if (input === null)\n {\n dispatch({ type: \"RESET\" });\n return;\n }\n\n let cancelled = false;\n dispatch({ type: \"LOADING\" });\n fetch(input, init)\n .then(res =>\n {\n if (!cancelled)\n {\n if(res.ok)\n {\n return res.json();\n }\n else\n {\n return res.json().then(v => Promise.reject(v));\n }\n\n }\n })\n .then((value: T) =>\n {\n if (!cancelled)\n {\n dispatch({ type: \"SUCCESS\", value })\n }\n })\n .catch(error => dispatch({ type: \"REJECTED\", error }));\n\n return () => { cancelled = true; }\n }, [input, init]);\n\n return [state.response, state.isLoading, state.error];\n}\n\nexport const useFetch = createUseFetch(window.fetch);","import auth from \"../service/auth\"\nimport { createUseFetch } from \"./useFetch\";\n\nconst fetch = auth.getAuthenticatedFetch();\n\nexport const useAuthenticatedFetch = createUseFetch(fetch);","import * as React from \"react\";\nimport { NotificationMessage } from \"../modules/config\";\n\nexport interface ModuleContextData\n{\n isBusy: (busy: boolean) => void;\n toast: (message: NotificationMessage, timeout?: number) => void;\n username: string | undefined;\n}\n\nexport const ModuleContext = React.createContext({\n isBusy: () => {},\n toast: (message: NotificationMessage, timeout?: number) => {},\n username: undefined\n});\n","import * as React from \"react\";\nimport { useState, useCallback, useEffect } from \"react\";\nimport { Grid, TextField, Select, FormControl, InputLabel, MenuItem } from \"@material-ui/core\";\nimport { Field, DateField, NumberField, StringField, ChoiceField } from \"../../api/label\";\nimport { MuiPickersUtilsProvider, DatePicker } from \"material-ui-pickers\";\nimport DayjsUtils from \"@date-io/dayjs\";\nimport dayjs from \"dayjs\";\n\nexport type FieldValues = {\n [fieldName: string]: string;\n};\n\nexport interface Props\n{\n fields: Field[];\n onChange?: (values: FieldValues) => void;\n}\n\nfunction AdditionalFields(props: Props)\n{\n const { fields, onChange } = props;\n\n const [values, setValues] = useState({});\n\n const setFieldValue = useCallback((fieldName: string, value: string) => {\n setValues(values => {\n const newValues = ({...values, [fieldName]: value });\n onChange?.(newValues)\n return newValues;\n });\n \n }, [onChange]);\n\n useEffect(() => {\n const defaultValues: FieldValues = {};\n fields\n .filter(f => f.value !== undefined)\n .forEach(f => defaultValues[f.name] = f.value as string);\n\n // const newValues = ({...defaultValues, ...values});\n setValues(values => {\n const newValues = {...defaultValues, ...values};\n onChange?.(values);\n return newValues;\n });\n }, [fields, onChange]);\n\n return (\n \n {\n fields.map(field => (\n \n {\n (field.type === \"date\") ? (\n \n ) : (field.type === \"number\") ? (\n \n ) : (field.type === \"string\") ? (\n \n ) : (field.type === \"choice\") ? (\n \n ) : null\n }\n \n ))\n }\n \n )\n}\n\ninterface AdditionalFieldProps\n{\n field: T;\n onChange?: (fieldName: string, value: string) => void;\n}\n\nfunction DateFieldRender(props: AdditionalFieldProps)\n{\n const { field, onChange } = props;\n const [value, setValue] = useState(dayjs(field.value));\n \n const onChangeCallback = useCallback((date: dayjs.Dayjs) => {\n setValue(date);\n if(onChange)\n {\n date = date.add(date.utcOffset(), \"minute\");\n onChange(field.name, date.toISOString());\n }\n}, [onChange, field.name]);\n\n return (\n \n )\n}\n\nfunction NumberFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: defaultValue, name }, onChange } = props;\n const [value, setValue] = useState(defaultValue);\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n )\n}\n\nfunction StringFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: defaultValue, name }, onChange } = props;\n const [value, setValue] = useState(defaultValue);\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n )\n}\n\nfunction ChoiceFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: values, name }, onChange } = props;\n const [value, setValue] = useState(\"\");\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n {displayLabel} \n \n \n )\n}\nexport default AdditionalFields;","import * as React from \"react\";\nimport { useCallback, useState, useRef, useContext, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, TextField, IconButton, FormControl, InputLabel, Select, MenuItem, Button } from \"@material-ui/core\";\n\nimport BarcodeScan from \"mdi-material-ui/BarcodeScan\";\nimport { API_BASE_URL } from \"../../../../api/api\";\nimport { useAuthenticatedFetch } from \"../../../../hooks/useAuthenticatedFetch\";\nimport { LabelTypes } from \"../../state/types\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ModuleContext, ModuleContextData } from \"../../../../context/ModuleContext\";\nimport AdditionalFields, { FieldValues } from \"./AdditionalFields\";\nimport { LabelItemResponse } from \"../../api/label\";\nimport auth from \"../../../../service/auth\";\n\nexport interface Props extends RouteComponentProps\n{\n\n}\n\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nfunction useChangeCallback(setValue: (s: string) => void)\n{\n return useCallback((e: React.ChangeEvent) => setValue(e.target.value), [setValue]);\n}\n\nfunction useFormState(initialValue: string) : [string, (e: React.ChangeEvent) => void, (v: string) => void]\n{\n const [value, setValue] = useState(initialValue);\n return [value, useChangeCallback(setValue), setValue];\n}\n\nconst fetch = auth.getAuthenticatedFetch();\n\ninterface Values\n{\n quantity: string;\n labelSku: string;\n printer: string;\n additionalFields: FieldValues;\n barcode: string | null;\n}\n\nfunction useErrorToast(toast: ModuleContextData[\"toast\"], errorObject: { errorMessage?: string } | undefined)\n{\n useEffect(() => \n {\n if(errorObject?.errorMessage)\n {\n toast({ message: errorObject.errorMessage, severity: \"error\" });\n }\n }, [errorObject, toast]);\n}\n\nfunction LabelView()\n{\n const context = useContext(ModuleContext);\n const inputRef = useRef();\n const [confirmedBarCode, setConfirmedBarcode] = useState(null);\n const [barcode, onBarcodeChanged, setBarcode] = useFormState(\"\");\n const [quantity, onQtyChanged, setQuantity] = useFormState(\"\");\n const [label, onLabelTypeChanged, setLabel] = useFormState(\"\");\n const [printer, onPrinterChanged, setPrinter] = useFormState(\"\");\n const [additionaValues, setAdditionalValues] = useState({});\n\n const values = useRef();\n values.current = {\n quantity, labelSku: label, printer, additionalFields: additionaValues, barcode: confirmedBarCode\n }\n\n const qtyIsValid = /^\\s*[0-9]*\\s*$/.test(quantity);\n\n const onSerialNumberKeypress = useCallback((e: React.KeyboardEvent) => {\n if(e.key === \"Enter\" && inputRef.current)\n {\n setConfirmedBarcode(inputRef.current.value);\n }\n }, []);\n\n const [labelTypes, isLoadingLabelTypes, labelTypesError] = useAuthenticatedFetch(\n (confirmedBarCode !== null) \n ? `${API_BASE_URL}/lookup/barcode/${confirmedBarCode}/labels/en-US`\n : null);\n\n const [configuration, isLoadingConfiguration, configurationError] = useAuthenticatedFetch(\n (label !== \"\") \n ? `${API_BASE_URL}/stock-management/label/${label}/config/en-US`\n : null);\n\n useEffect(() => {\n if(labelTypes?.defaultValue)\n {\n setLabel(labelTypes.defaultValue);\n }\n }, [labelTypes, setLabel]);\n \n useEffect(() => {\n if(configuration !== undefined)\n {\n if(configuration.defaultQty)\n {\n setQuantity(configuration.defaultQty.toString());\n }\n if(configuration.printers?.defaultValue)\n {\n setPrinter(configuration.printers.defaultValue);\n }\n if(configuration?.additionalFields?.length)\n {\n let defaultValues: FieldValues = {};\n for(let field of configuration.additionalFields)\n {\n if(typeof field.value === \"string\")\n {\n defaultValues[field.name] = field.value;\n }\n }\n setAdditionalValues(defaultValues);\n }\n }\n }, [configuration, setQuantity, setPrinter]);\n\n useErrorToast(context.toast, configurationError);\n useErrorToast(context.toast, labelTypesError);\n\n const onCommit = React.useCallback(() => \n {\n fetch(`${API_BASE_URL}/stock-management/label/print`, { \n method: \"POST\", \n body: JSON.stringify({ ...values.current, quantity: parseInt(values.current!.quantity) }),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(res => {\n if(res.ok)\n {\n setConfirmedBarcode(null);\n setLabel(\"\");\n setBarcode(\"\");\n setQuantity(\"\");\n setPrinter(\"\");\n setAdditionalValues({});\n context.toast({\n message: i18n`Label printing request successful.`,\n severity: \"success\"\n }, 3000);\n }\n else\n {\n return res.json().then(Promise.reject);\n }\n }).catch(e => {\n context.toast({\n message: e.errorMessage || i18n`Label printing failed.`,\n severity: \"error\"\n });\n })\n ;\n }, [values, context, setBarcode, setLabel, setPrinter, setQuantity]);\n \n // handle loading indicator display\n const loadingIndicator = isLoadingLabelTypes || isLoadingConfiguration;\n React.useEffect(() => { context.isBusy(loadingIndicator) }, [loadingIndicator, context]);\n \n // handle default qty from configuration\n React.useEffect(() => { \n if(configuration !== undefined)\n {\n const { defaultQty = \"\" } = configuration;\n setQuantity(defaultQty + \"\");\n }\n }, [configuration, setQuantity]);\n\n\n return (\n <>\n {/* */}\n \n \n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n \n {i18n`Label Type`}\n \n {\n (labelTypes !== undefined) ? (\n labelTypes.values.map(label => (\n {label.label}\n ))\n ) : null\n }\n \n \n \n \n {\n (configuration !== undefined) ? (\n \n {i18n`Printer`}\n \n {\n (configuration !== undefined) ? (\n configuration.printers.values.map(printer => (\n {printer.label}\n ))\n ) : null\n }\n \n \n ) : null\n }\n \n {\n (configuration?.additionalFields !== undefined) ? (\n \n ) : null\n }\n {\n (configuration !== undefined) ? (\n \n \n \n \n ) : null\n }\n \n\n \n \n {/* {\n (labelRequestActive) ? (\n \n ) : null\n } */}\n \n\n
\n \n );\n}\n\nexport default LabelView;","import React, { useEffect, useState, useCallback, FormEvent } from \"react\";\nimport { Paper, withStyles, TextField, Typography, Button, Table, TableHead, TableRow, TableCell, TableBody, InputAdornment, IconButton, Snackbar, LinearProgress, Grid, Card, CardContent } from \"@material-ui/core\";\nimport Clear from \"@material-ui/icons/Clear\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Scanner } from \"../../../../util/scanner\";\nimport Api from \"../../../../api/api\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends RouteComponentProps<{ warehouse: string }>\n{\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactChildren;\n}\n\nconst styles = (theme: any) => ({\n root: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n errorBar: {\n backgroundColor: theme.palette.error.dark\n }\n})\n\ninterface InquiryItem\n{\n location: string;\n locationName: string;\n itemName: string;\n sku: string;\n qty: number;\n lastUpdate?: string;\n prioDate: string;\n statusBalanceId: string;\n name: string;\n}\n\ninterface InquiryResult\n{\n id: string;\n name: string;\n type: string;\n items: InquiryItem[];\n}\n\nconst getId = (type: string, item: InquiryItem) => (type === \"item\") ? item.location : item.sku;\n\nconst performInquiry = async (warehouse: string, barcode: string) => \n{\n const res = await Api.request(`stock-management/inquiry/${warehouse}/${barcode}`);\n if(!res.ok)\n {\n if(res.status === 404)\n {\n throw new Error(i18n`Item ${barcode} not found`);\n }\n else\n {\n throw new Error(await res.text());\n }\n }\n const data: InquiryResult = await res.json();\n return data;\n}\n\nfunction InquiryItemRow(props: {item: InquiryItem, type: string, onClick?: (item: InquiryItem) => void})\n{\n const {item, type, onClick } = props;\n const [active, setActive] = useState(false);\n return (\n onClick?.(item)} \n onMouseDown={() => setActive(true)} \n onMouseUp={() => setActive(false)}\n onTouchStart={() => setActive(true)} \n onTouchEnd={() => setActive(false)}\n selected={active}\n >\n {getId(type, item)}\n {i18n`${new Date(item.prioDate)}:t(d)`}\n {item.qty}\n \n )\n}\n\nfunction InquiryView(props: Props & { classes: any })\n{\n const { classes, match: { params: { warehouse } } } = props;\n const [barcode, setBarcode] = useState(\"\");\n const [result, setResult] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [showDetails, setShowDetails] = useState(undefined);\n\n useEffect(() => {\n const scanner = new Scanner(async (barcode, type) => {\n setShowDetails(undefined);\n setBusy(true);\n setBarcode(barcode);\n performInquiry(warehouse, barcode)\n .then(data => setResult(data))\n .catch((err: Error) => setErrorMessage(err.message))\n .finally(() => setBusy(false))\n ;\n }, true);\n return () => {\n scanner.destroy();\n }\n }, [warehouse]);\n\n useEffect(() => {\n setResult(undefined);\n }, [barcode])\n\n const onSubmit = useCallback(async (e: FormEvent) => {\n e.preventDefault();\n try {\n setBusy(true);\n const data = await performInquiry(warehouse, barcode);\n setResult(data);\n }\n catch(e)\n {\n setErrorMessage(e.message);\n }\n finally{\n setBusy(false);\n }\n }, [barcode, warehouse]);\n\n const onItemClick = (item: InquiryItem) => setShowDetails(item);\n\n if(showDetails !== undefined)\n {\n const item = showDetails;\n const type = result!.type;\n return (\n
\n \n {/* */}\n \n \n \n {i18n`SKU`}\n {item.sku}\n \n \n {i18n`Item`}\n {item.itemName}\n \n \n {i18n`Location Id.`}\n {item.location}\n \n \n {i18n`Location`}\n {item.locationName}\n \n \n {i18n`Prio. Date`}\n {i18n`${new Date(item.prioDate)}:t(d)`}\n \n \n {i18n`Counted`}\n \n { \n (item.lastUpdate) \n ? i18n`${new Date(item.lastUpdate)}:t(d)`\n : i18n`unknown`\n }\n \n \n \n {i18n`Quantity`}\n {item.qty}\n \n \n {i18n`BalSts`}\n {item.statusBalanceId}\n \n \n \n \n
\n \n
\n
\n\n );\n }\n\n return (\n
\n { busy ? : null}\n \n
\n 0) ? (\n \n setBarcode(\"\")}>\n \n \n \n ) : undefined\n }}\n value={barcode} \n onChange={e => setBarcode(e.target.value)} \n onKeyDown={e => e.stopPropagation()}\n onKeyUp={e => e.stopPropagation()}\n onKeyPress={e => e.stopPropagation()}\n />\n \n \n
\n\n { (result) ? (\n <>\n \n \n \n {result.type === \"item\" ? i18n`Item` : i18n`Location`}\n {result.id}\n \n \n {i18n`Name`}\n {result.name}\n \n \n \n\n \n \n \n \n {result.type === \"item\" ? i18n`Location` : i18n`Item`}\n {i18n`Prio. Date`}\n {i18n`Qty`}\n \n \n \n {\n result.items.map(line => (\n \n ))\n // alert(\"ok\")}>\n // {getId(result, line)}\n // {i18n`${new Date(line.prioDate)}:t(d)`}\n // {line.qty}\n // \n // ))\n }\n \n
\n
\n \n ) : null\n }\n setErrorMessage(undefined)} />\n
\n );\n}\n\nexport default withStyles(styles)(InquiryView);","import * as React from \"react\";\nimport { useCallback, useState, useRef, useContext, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, withStyles, TextField, FormControl, InputLabel, Button, CardContent, Typography, Snackbar, FormLabel, RadioGroup, FormControlLabel, Radio } from \"@material-ui/core\";\nimport { API_BASE_URL } from \"../../../../api/api\";\nimport { ModuleContext, ModuleContextData } from \"../../../../context/ModuleContext\";\nimport Api from \"../../../../api/api\";\nimport { RouteComponentProps } from \"react-router\";\nimport auth from \"../../../../service/auth\";\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nenum searchTypeEnum { Manufacturing, Purchase, Item }\n\nconst fetch = auth.getAuthenticatedFetch();\n\nexport interface Props extends RouteComponentProps<{ warehouse: string }> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactChildren;\n}\n\nconst styles = (theme: any) => ({\n root: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n errorBar: {\n backgroundColor: theme.palette.error.dark\n }\n})\n\nfunction useChangeCallback(setValue: (s: string) => void) {\n return useCallback((e: React.ChangeEvent) => setValue(e.target.value), [setValue]);\n}\n\nfunction useFormState(initialValue: string): [string, (e: React.ChangeEvent) => void, (v: string) => void] {\n const [value, setValue] = useState(initialValue);\n return [value, useChangeCallback(setValue), setValue];\n}\n\ninterface Values {\n qtySmall: string;\n qtyLarge: string;\n qtyBoxSmall: string;\n qtyBoxLarge: string;\n itemNumber: string;\n searchType: string;\n}\n\ninterface itemResult {\n ean: string;\n sku: string;\n unit: string;\n name: string;\n tracking: string\n lotNumber: string\n defaultLoc: string\n edition: string\n quantity: number\n}\n\nconst ProductLabel = (props: Props & { classes: any }) => {\n\n const { classes, match: { params: { warehouse } } } = props;\n const context = useContext(ModuleContext);\n const inputRef = useRef();\n const [qtySmall, onSmallQtyChanged, setQtySmall] = useFormState(\"0\");\n const [qtyLarge, onLargeQtyChanged, setQtyLarge] = useFormState(\"0\");\n const [qtyBoxSmall, onBoxSmallQtyChanged, setQtyBoxSmall] = useFormState(\"0\");\n const [qtyBoxLarge, onBoxLargeQtyChanged, setQtyBoxLarge] = useFormState(\"0\");\n const [item, setItem] = useState(undefined);\n const [itemNumber, onItemNumberChanged, setItemNumber] = useFormState(\"\");\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [searchType, setTypeOfSearch] = useState(searchTypeEnum[searchTypeEnum.Item]);\n\n const handleSearchTypeChange = (event: React.ChangeEvent) => {\n setTypeOfSearch(event.currentTarget.value);\n setItemNumber(\"\");\n setQtyBoxLarge(\"0\");\n setQtyBoxSmall(\"0\");\n setQtyLarge(\"0\");\n setQtySmall(\"0\");\n setItem(undefined);\n setErrorMessage(undefined);\n }\n\n const qtyIsValid = (quantity: string) => { return /^\\s*[0-4]?[0-9]?[0-9]\\s*$/.test(quantity); }\n\n const values = useRef();\n values.current = {\n itemNumber,\n qtySmall,\n qtyLarge,\n qtyBoxSmall,\n qtyBoxLarge,\n searchType\n }\n\n const onItemBlur = React.useCallback(() => {\n performInquiry(\"001\", itemNumber)\n .catch((err: Error) => setErrorMessage(err.message));\n }, [itemNumber]);\n\n const performInquiry = async (warehouse: string, barcode: string) => {\n const res = await Api.request(`lookup/itemnumber/${itemNumber}/${searchType}`);\n if (!res.ok) {\n if (res.status === 404) {\n throw new Error(i18n`Search criteria ${itemNumber} not found`);\n }\n else {\n throw new Error(await res.text());\n }\n }\n\n const data: itemResult = await res.json();\n setQtySmall(data.quantity.toString());\n\n const resEdition = await Api.request(`lookup/edition/${data.sku}`);\n if (!resEdition.ok) {\n if (resEdition.status === 404) {\n throw new Error(i18n`Editon not found for ${itemNumber}`);\n }\n else {\n throw new Error(await resEdition.text());\n }\n }\n else {\n data.edition = await resEdition.json();\n }\n\n setItem(data);\n return data;\n }\n\n const onCommit = React.useCallback(() => {\n console.log(values.current);\n fetch(`${API_BASE_URL}/stock-management/label/printproductlabel`, {\n method: \"POST\",\n body: JSON.stringify({ ...values.current }),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(res => {\n if (res.ok) {\n setItemNumber(\"\");\n setQtyBoxLarge(\"0\");\n setQtyBoxSmall(\"0\");\n setQtyLarge(\"0\");\n setQtySmall(\"0\");\n setItem(undefined);\n setErrorMessage(undefined);\n context.toast({\n message: i18n`Label printing request successful.`,\n severity: \"success\"\n }, 3000);\n }\n else {\n return res.json().then(Promise.reject);\n }\n }).catch(e => {\n context.toast({\n message: e.errorMessage || i18n`Label printing failed.`,\n severity: \"error\"\n });\n })\n ;\n }, [item?.sku]);\n\n return (\n <>\n \n \n
\n handleSearchTypeChange(e)} row>\n } label=\"Item\" />\n } label=\"Manufacturing\" />\n } label=\"Purchase\" />\n \n
\n
\n \n
\n \n
\n
\n \n \n \n \n \n \n\n \n
\n \n \n
\n
\n\n \n \n \n \n \n {i18n`Print`}\n \n\n \n \n \n Item\n \n \n {item?.sku} {item?.name}\n \n \n Std. Location\n \n \n {item?.defaultLoc}\n \n \n Edition\n \n \n {item?.edition}\n \n \n \n
\n setErrorMessage(undefined)} />\n \n );\n}\n\nexport default withStyles(styles)(ProductLabel);\n","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport { Switch, Route } from \"react-router\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Grid from \"@material-ui/core/Grid\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\nimport styled from \"styled-components\";\nimport InventoryMain from \"./inventory/Main\";\nimport { getInventoryCurrentWarehouse, getInventoryNotifications } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { stockSetWarehouse, stockInit, stockDismissError } from \"../state/action\";\nimport { Notification } from \"../state/types\";\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport green from '@material-ui/core/colors/green';\nimport amber from '@material-ui/core/colors/amber';\nimport red from '@material-ui/core/colors/red';\nimport Relocation from \"./relocation/Relocation\";\nimport Label from \"./label/LabelView\";\nimport Inquiry from \"./inquiry/InquiryView\";\nimport ProductLabel from \"./productlabel/ProductLabel\";\nimport { ModuleProps } from \"../../config\";\nimport { getIsBusy, getModuleNotifications, StockState } from \"../state/reducer\";\n\nexport interface Props extends ModuleProps\n{\n}\n\nconst ViewBase = styled.div`\n box-sizing: border-box;\n position: relative;\n margin: 16px;\n`;\n\nconst mapStateToProps = (state: StockState) => ({\n warehouse: getInventoryCurrentWarehouse(state),\n notifications: getInventoryNotifications(state),\n mnotifications: getModuleNotifications(state),\n busy: getIsBusy(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n setCurrentWarehouse: (warehouse: string) => dispatch(stockSetWarehouse(warehouse)),\n dismissError: (id: string) => dispatch(stockDismissError(id)),\n init: () => dispatch(stockInit())\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface CustomSnackBarContentProps\n{\n message: string;\n icon: React.ComponentType;\n style: React.CSSProperties;\n}\n\nconst snackbarStyles = \n{\n success: {\n style: { backgroundColor: green[600] },\n icon: CheckCircleIcon\n }, \n warning: {\n style: { backgroundColor: amber[700] },\n icon: WarningIcon\n },\n error: {\n style: { backgroundColor: red[600] },\n icon: ErrorIcon\n }\n}\n\nconst CustomSnackBarContent = ({message, icon: Icon, style}: CustomSnackBarContentProps) => (\n \n {message}\n \n } />\n);\n\nclass StockManagement extends React.Component\n{\n private navigateToView = (relativePath: string) => \n this.props.history.push(`${this.props.match.path}/${relativePath}`);\n\n private onChange = (e: React.ChangeEvent) => \n this.props.setCurrentWarehouse(e.target.value);\n\n componentWillMount()\n {\n this.props.init();\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n this.props.isBusy(nextProps.busy);\n }\n\n private renderView() \n {\n const { warehouse = \"\" } = this.props;\n return (\n <>\n \n \n \n \n Hasselager (001)\n USA (002)\n Dutch Warehouse(450)\n Holland Montage projecten (451)\n Holland Homecare (452)\n Holland Magazijn Westzaan (453)\n Holland Maickel (454)\n Holland Rene (455)\n Holland Johannes Ypenga (456)\n Holland Rob (457)\n Holland Harry (458)\n Holland David Rens (459)\n Holland Aleid (460)\n Holland Erwin (461)\n Holland Joryan (462)\n Holland Bradley Knol (463)\n Holland Peter Bos (464)\n Holland Hans and Freddy (465)\n Holland Erik van der Nieuwboer (466)\n Holland Arjen Altena (467)\n Holland Edwin Krijgsman (468)\n Holland Martijn Spaan (469)\n Holland service and maintenance (470)\n Henrik Caspers (502)\n Kenny Poulsen, Jacob Theis (715)\n Serena Kjerstine Kjeldsen (717)\n \n \n \n {/* \n \n \n \n */}\n {this.renderNavigationButtons(false)}\n \n );\n }\n\n private renderNavigationButtons(disabled: boolean)\n {\n const { warehouse = \"\" } = this.props;\n const buttons = [\n { route: \"inventory\", title: i18n`Inventory`, role: \"mobility.stock.inventory\" },\n { route: \"relocation\", title: i18n`Relocation`, role: \"mobility.stock.relocate\" },\n { route: \"label\", title: i18n`Label Print`, role: \"mobility.stock.label\" },\n { route: \"inquiry\", title: i18n`Inquiry`, role: null },\n { route: \"productlabel\", title: i18n`Product Label`, role:null}\n ].filter(item => item.role === null || this.props.hasRole(item.role));\n\n\n return (\n \n {\n buttons.map(button => (\n \n \n \n ))\n }\n \n );\n }\n\n private renderSnackbar = (error: Notification, index: number) =>\n {\n const { message, severity, id } = error;\n return (\n this.props.dismissError(id)}>\n \n \n );\n }\n\n render()\n {\n const { match, warehouse, notifications, mnotifications } = this.props;\n if(warehouse === undefined)\n {\n return (\n \n {this.renderView()}\n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n {this.renderView()}\n \n \n {\n [...notifications, ...mnotifications].map(this.renderSnackbar)\n }\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StockManagement);","import { createModuleStore, createModule } from \"../helper\";\nimport reducer from \"./state\";\n\nimport App from \"./views/Main\";\n\nconst store = createModuleStore(reducer, \"stock\", 1);\nconst Stock = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default Stock;\n\n","import i18n from \"es2015-i18n-tag\";\nimport Domain from \"@material-ui/icons/Domain\";\nimport StockManagement from \".\";\nimport { Module } from \"../config\";\n\nconst module_: Module = { \n title: i18n`Stock Management`, \n icon: Domain, \n component: StockManagement, \n url: \"/stock\",\n roles: [\"mobility.stock.*\"]\n};\n\nexport default module_;\n","import * as React from \"react\";\nimport { LookupItem } from \"../../types\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Typography from \"@material-ui/core/Typography\";\n\nexport function ItemList(props: { items: LookupItem[] })\n{\n const { items } = props;\n return (\n \n {\n items.map(item => )\n }\n \n );\n}\n\nfunction ItemListItem(props: {item: LookupItem})\n{\n const { item } = props;\n return (\n \n \n \n {item.itemNumber}\n \n {\" - \" + item.itemDescription}\n }\n />\n \n );\n}","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Feature } from \"../../types\";\n\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\n\nexport type CheckedFeature = Feature & { checked: boolean };\n\ninterface FeatureListProps\n{\n className?: string;\n features: CheckedFeature[];\n onFeatureCheck: (feature: Feature, checked: boolean) => void;\n} \n\nexport function FeatureList(props: FeatureListProps)\n{\n const { features, className, onFeatureCheck } = props;\n\n const onCheckboxChange = useMemo(() => features\n .map(f => (e: React.ChangeEvent) => onFeatureCheck(f, e.target.checked))\n , [features, onFeatureCheck]);\n\n return (\n \n {features.map((feature, i) => (\n \n {/* \n
\n */}\n \n \n \n \n \n ))}\n \n );\n}","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { formatGroupedBinary } from \"../../../../util/number\";\nimport TextField from \"@material-ui/core/TextField\";\n\ninterface ManualInputProps\n{\n className?: string;\n base36value: string;\n onValueChange: (base36value: string) => void;\n}\n\nconst getBase2String = (base36: string) => formatGroupedBinary(parseInt(base36.replace(/ +/, \"\"), 36) || 0);\nconst restrictLength = (s: string, n: number) => s.length > n ? s.substr(0, n) : s;\n\nexport function ManualInput(props: ManualInputProps)\n{\n const { className, onValueChange, base36value } = props;\n\n const [binaryValue, setBinaryValue] = useState(() => getBase2String(base36value));\n \n const onTextFieldChange = (e: React.ChangeEvent) => \n onValueChange(restrictLength(e.target.value.replace(/[^a-zA-Z0-9]+/, \"\"), 5));\n \n const onBinaryTextBlur = (e: React.ChangeEvent) => \n onValueChange(parseInt(binaryValue.replace(/ /g, \"\"), 2).toString(36));\n\n const onBinaryTextChange = (e: React.ChangeEvent) => \n setBinaryValue(e.target.value.replace(/[^01 ]/g, \"\"));\n\n useEffect(() => setBinaryValue(getBase2String(base36value)), [base36value]);\n\n return (\n
\n \n \n
\n );\n}","export function formatGroupedBinary(n: number, grouping: number | undefined = 5, padding = true)\n{\n let s = n.toString(2);\n if(grouping !== undefined)\n {\n if(padding && (((s.length % grouping) !== 0) || s.length === 0))\n {\n const maxSize = s.length + (grouping - (s.length % grouping));\n s = s.padStart(maxSize, \"0\");\n }\n\n if(s.length > grouping)\n {\n let firstGroupLen = s.length % grouping;\n let groups = [s.substr(0, firstGroupLen)];\n for(let i = firstGroupLen; i < s.length; i += grouping)\n {\n groups.push(s.substr(i, grouping));\n }\n s = groups.join(\" \");\n }\n }\n\n return s;\n}\n","import { atom } from \"recoil\";\n\ninterface SearchStatus\n{\n additionalItemsCount: number;\n itemsCount: number;\n}\n\nexport const searchStatusAtom = atom({\n key: \"tools.base36\",\n default: {\n additionalItemsCount: 0,\n itemsCount: 0\n }\n});\n\n\n","import * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { ModuleProps } from \"../../../config\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport { Feature, LookupResult } from \"../../types\";\nimport { Route } from \"react-router\";\nimport { ItemList } from \"./ItemList\";\nimport { FeatureList } from \"./FeatureList\";\nimport { ManualInput } from \"./ManuelInput\";\nimport { useQuery } from \"react-query\";\nimport Api from \"../../../../api/api\";\nimport { useSetRecoilState } from \"recoil\";\nimport { searchStatusAtom } from \"../../atoms/base36\";\nimport { DeliveryContextObject, DeliveryContext } from \"../Main\";\n\nconst styles = (theme: any) => ({\n root: {\n padding: \"16px\"\n },\n list: {\n width: \"100%\",\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n code: {\n marginBottom: 16\n }\n});\n\ntype StylesClasses any> = {\n [P in keyof ReturnType]: string;\n};\n\ninterface StylesProps any>\n{\n classes: StylesClasses;\n}\n\nexport interface Props extends ModuleProps\n{\n}\n\nexport type CheckedFeature = Feature & { checked: boolean };\n\nconst setBit = (n: number, bit: number, on: boolean) => on ? (n | (1 << bit)) : (n & ~(1 << bit));\n\nconst fetchFeatures = () => \n Api.request(\"tools/features/labels/en-US\").then(x => x.json());\n\nconst fetchItems = (code: string) => \n Api.request(`tools/features/lookup/base36/${code}`).then(x => x.json());\n\nfunction Main(props: Props & StylesProps)\n{\n const setSearchStatus = useSetRecoilState(searchStatusAtom);\n const [base36value, setbase36value] = useState(\"\");\n const { classes } = props;\n const { setBusyIndicatorVisible } = React.useContext(DeliveryContext);\n const value = parseInt(base36value, 36);\n\n const { data: featuresConfiguration, isLoading: featureIsLoading } = useQuery(\"tools.feature.features\", fetchFeatures);\n const { data: lookupResult, isLoading: itemsIsLoading } = useQuery([\"tools.features\", \"lookup\", base36value || \"0\"], () => fetchItems(base36value || \"0\" ))\n\n // sync loading indicator\n useEffect(() => { \n setBusyIndicatorVisible(featureIsLoading || itemsIsLoading) \n }, [featureIsLoading, itemsIsLoading, setBusyIndicatorVisible])\n\n const onFeatureCheck = useCallback((f: Feature, c: boolean) => {\n setbase36value(setBit(value, f.bit, c).toString(36).toUpperCase());\n }, [value]);\n\n useEffect(() => \n {\n setSearchStatus({ \n itemsCount: lookupResult?.items.length ?? 0, \n additionalItemsCount: lookupResult?.additionalItems.length ?? 0\n });\n\n }, [lookupResult, setSearchStatus])\n\n const featureList = featuresConfiguration?.map(fc => ({\n ...fc, \n checked: (value & (1 << fc.bit)) > 0 \n }));\n\n const baseUrl = props.match.url.replace(/\\/+$/, \"\");\n\n return (\n
\n (\n <>\n \n \n \n )} />\n } />\n } />\n
\n );\n}\n\nexport default (withStyles(styles)(Main));","import * as React from \"react\";\nimport { useState, useCallback, useEffect, useContext } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport IconPrint from \"@material-ui/icons/Print\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport TextField from \"@material-ui/core/TextField\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport { TypographyProps } from \"@material-ui/core/Typography\";\n\nimport { Delivery } from \"../../state\";\nimport Api from \"../../../../api/api\";\nimport { DeliveryContext } from \"../Main\";\n\ninterface GLSReceive\n{\n consignmentId: string;\n parcels: ReceiveParcel[];\n}\n\ninterface ReceiveParcel\n{\n ndiNumber: string;\n parcelNumber: string;\n uniqueNumber: string;\n}\n\nexport interface Props\n{\n className?: string;\n style?: React.CSSProperties;\n delivery: Delivery;\n deliveryNumber: string;\n}\n\nconst t_headline: TypographyProps[\"variant\"] = \"caption\";\nconst t_data: TypographyProps[\"variant\"] = \"body2\";\n\nconst update = (arr: T[], index: number, value: T): T[] => \n{\n const result = arr.slice();\n result[index] = value;\n return result;\n}\n\nexport default function DeliveryCard(props: Props)\n{\n const { className, style, delivery, deliveryNumber } = props;\n const [weights, setWeights] = useState([]);\n const [tracking, setTracking] = useState([]);\n const context = useContext(DeliveryContext);\n\n const addParcel = useCallback(() => setWeights(ws => [...ws, \"\"]), []);\n const onWeightChange = useCallback(\n (value: string, index: number) => setWeights(es => update(es, index, value)),\n []\n );\n\n // reset weights and tracking data when delivery number changes\n useEffect(() => {\n setWeights([]);\n setTracking([]);\n }, [delivery]);\n\n const onPrintLabelsClick = async () => {\n const res = await Api.request(`delivery/${deliveryNumber}/print`, \"POST\", weights.map(w => parseFloat(w)));\n if(res.ok)\n {\n const data: GLSReceive = await res.json();\n setTracking(data.parcels.map(p => p.parcelNumber));\n }\n else\n {\n const data = await res.json();\n context.toast({\n message: data.errorMessage || i18n`Something went wrong`,\n severity: \"error\"\n });\n }\n };\n\n return (\n \n \n \n \n \n {i18n`Name`}\n \n \n {delivery.name1}
\n {delivery.name2}
\n {delivery.name3}
\n {delivery.street1}\n
\n
\n
\n \n {i18n`Zipcode`}\n {delivery.zipCode}\n \n \n {i18n`City`}\n {delivery.city}\n \n \n {i18n`Country`}\n {delivery.countryNum}\n \n
\n
\n
\n \n {\n (tracking.length === 0) ? (\n \n {\n weights.map((weight, i) => \n \n )\n }\n \n ) : (\n \n {i18n`Labels have been printed for parcels:`}\n {\n tracking.map(number => (\n {number}\n ))\n }\n \n )\n }\n \n {/* */}\n \n {\n (tracking.length === 0) ? (\n <>\n \n {\n (weights.length > 0 && weights[0].length > 0) ? (\n \n \n \n ) : null\n }\n \n ) : null\n }\n \n
\n );\n}\n\ninterface ParcelWeightProps\n{\n value: string;\n index: number;\n onChange: (value: string, index: number) => void;\n}\n\nfunction ParcelWeight(props: ParcelWeightProps)\n{\n const { onChange, value, index } = props;\n\n const onTextFieldChange = useCallback(\n (e: React.ChangeEvent) => onChange(e.target.value, index),\n [index, onChange]\n );\n\n return (\n \n kg\n }}\n fullWidth />\n \n )\n}","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { RouteComponentProps } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport TextField from \"@material-ui/core/TextField\";\nimport DeliveryCard from \"./DeliveryCard\";\nimport Api from \"../../../../api/api\";\nimport { Delivery } from \"../../state\";\n\ninterface Props extends RouteComponentProps\n{\n\n}\n\nexport default function Index(props: Props)\n{\n const [delivery, setDelivery] = useState(null);\n const [query, setQuery] = useState(null);\n\n const onKeyup = (e: React.KeyboardEvent) => \n {\n if(e.keyCode === 13)\n {\n setQuery(e.currentTarget.value);\n }\n else\n {\n setDelivery(null);\n }\n }\n\n useEffect(() => {\n if(query !== null)\n {\n Api.request(`delivery/${query}/address`)\n .then(res => res.ok ? res.json() : Promise.reject(res))\n .then(setDelivery)\n .catch(() => setDelivery(null));\n }\n }, [query]);\n\n\n return (\n
\n \n \n \n {\n (delivery !== null && query !== null) ? (\n
\n \n
\n ) : null\n }\n
\n );\n}","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { ModuleProps } from \"../../config\";\n\nimport { Route, Switch } from \"react-router\";\nimport Features from \"./base36/Index\";\nimport { Button } from \"@material-ui/core\";\nimport Delivery from \"./delivery/Index\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\n\nexport interface DeliveryContextObject\n{\n toast: ModuleProps[\"toast\"];\n setBusyIndicatorVisible: (visible: boolean) => void;\n};\n\nexport const DeliveryContext = React.createContext({\n toast: () => {},\n setBusyIndicatorVisible: () => {}\n});\n\nexport interface Props extends ModuleProps\n{\n}\n\nconst queryClient = new QueryClient();\n\nfunction Main(props: Props)\n{\n const { match: { path }, history, toast, isBusy } = props;\n\n const onFeaturesClick = () => history.push(`${path}/features`);\n const onDeliveryClick = () => history.push(`${path}/delivery`);\n\n // useEffect(() => { isBusy(busy) }, [isBusy, busy]);\n\n const context = useMemo(() => ({\n toast, \n setBusyIndicatorVisible: isBusy\n }), [toast, isBusy]);\n\n\n return (\n \n \n \n \n \n (\n
\n \n \n
\n )} />\n
\n
\n
\n );\n}\n\nexport default Main;","import { createModuleStore, createModule } from \"../helper\";\n\nimport App from \"./views/Main\";\nimport reducer from \"./state\";\n\nexport const store = createModuleStore(reducer, \"tools\", 3, { blacklist: [\"ui\", \"features\", \"lookupResult\"] });\nconst ToolsModule = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default ToolsModule;\n","export interface Delivery\n{\n city: string;\n contact: string;\n countryNum: string;\n name1: string;\n name2: string;\n name3: string;\n phone: string;\n street1: string;\n zipCode: string;\n}\n\nconst reducer = (state = {}, action: any) => state;\n\nexport default reducer;","import { History } from \"history\";\nimport { useState, useEffect } from \"react\";\n\nexport function useLocation(history: History)\n{\n const [location, setLocation] = useState(history.location);\n useEffect(\n () => history.listen(location => setLocation(location)),\n [history]\n );\n return location;\n}","import React from \"react\";\nimport { RouteComponentProps, matchPath } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\nimport { useRecoilValue } from \"recoil\";\n\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\n\nimport { History } from \"history\";\nimport { useLocation } from \"../../../../hooks/useLocation\";\nimport { searchStatusAtom } from \"../../atoms/base36\";\n\ntype Props = RouteComponentProps;\n\nconst tabRoutes = [\n \"lookup\",\n \"items\",\n \"items/any\"\n];\n\nconst getUrl = (urls: string[], pathname: string) => \n Math.max(0, urls.findIndex(url => isMatch(pathname, url)));\n\nconst isMatch = (url: string, matchUrl: string, exact = true) => \n matchPath(url, { path: matchUrl, exact }) !== null;\n\nfunction useLocationTabs(history: History, urls: string[])\n{\n const location = useLocation(history);\n return getUrl(urls, location.pathname);\n}\n\nconst joinUrl = (baseUrl: string, url: string) => \n (baseUrl + \"/\" + url).replace(/\\/{2,}/, \"/\");\n\nconst Base36Tabs = function (props: Props)\n{\n const { itemsCount, additionalItemsCount } = useRecoilValue(searchStatusAtom);\n const { match: { path: baseUrl }, history } = props;\n \n const activeTab = useLocationTabs(history, tabRoutes.map(url => joinUrl(baseUrl, url)));\n const setActiveTab = (index: number) => history.replace(`${joinUrl(baseUrl, tabRoutes[index])}`);\n\n return (\n setActiveTab(v)}>\n \n \n \n \n )\n}\n\nexport default Base36Tabs;","import * as React from \"react\";\nimport { Provider } from \"react-redux\";\nimport { withRouter, RouteComponentProps, Switch, Route } from \"react-router\";\nimport Base36Tabs from \"../views/base36/Tabs\";\n\nimport { store } from \"..\";\nimport { useLocation } from \"../../../hooks/useLocation\";\n\ntype Props = RouteComponentProps;\n\nfunction AppBarTabs(props: Props)\n{\n const { match: { path }, history } = props;\n const location = useLocation(history);\n\n return (\n \n \n {/* \n )\n}\n\n// hookup the redux provider here as the tabs are rendered further up the UI tree\n// and immediately connect the AppBarTabs to our module store\nexport default () => (\n \n {\n React.createElement(withRouter(AppBarTabs))\n }\n \n);","import { createElement } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Icon from \"@material-ui/icons/Build\";\nimport MainComponent from \".\";\nimport { Module } from \"../config\";\nimport AppBarTabs from \"./components/AppBarTabs\";\n\nconst config: Module =\n{\n title: i18n`Tools`, \n icon: Icon, \n component: MainComponent, \n url: \"/tools\",\n roles: [\"mobility.tools.*\"],\n tabs: createElement(AppBarTabs)\n}\n\nexport default config;\n","import { RouteComponentProps } from \"react-router\";\nimport timeRecording from \"./time-recording/config\";\nimport stockManagement from \"./stock-management/config\";\nimport { ReactElement } from \"react\";\nimport tools from \"./tools/config\";\n\nexport interface Module \n{\n title: string;\n icon: React.ComponentType;\n component: React.ComponentType;\n url: string;\n submenu?: MenuItem[];\n roles: string[];\n tabs?: ReactElement;\n}\n\nexport interface MenuItem\n{\n title: string;\n icon?: React.ComponentType;\n url: string;\n}\n\nexport interface ModuleProps extends RouteComponentProps\n{\n isBusy: (busy: boolean) => void;\n toast: (message: NotificationMessage, timeout?: number) => void;\n username: string | undefined;\n hasRole: (role: string) => boolean;\n}\n\nexport interface NotificationMessage \n{\n message: string;\n severity: Severity;\n}\n\nexport type Severity = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst config: Module[] = [\n timeRecording,\n stockManagement,\n tools\n];\n\nexport default config;\n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport { RootState } from \"../state\";\nimport { getDrawerOpenState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { drawerOpen } from \"../state/ui/actions\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Typography from \"@material-ui/core/Typography\";\nimport modules from \"../modules/config\";\nimport { Switch, Route } from \"react-router\";\n\nexport interface Props\n{\n title?: string;\n}\n\ntype ConnectedProps = ReturnType & ReturnType;\n\nconst mapStateToProps = (state: RootState) => ({\n isDrawerOpen: getDrawerOpenState(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n drawerOpen: (open: boolean) => dispatch(drawerOpen(open))\n});\n\nclass TitleBar extends React.Component\n{\n toggleDrawer = () => this.props.drawerOpen(!this.props.isDrawerOpen);\n\n render()\n {\n return (\n \n \n \n \n \n \n {this.props.title || i18n`Guldmann Mobility`}\n \n \n \n {\n modules.map(module => (\n (module.tabs) ? (\n {module.tabs}\n ) : null\n ))\n }\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TitleBar);","import styled from \"styled-components\";\n\nexport interface Props\n{\n fullHeight?: boolean;\n}\n\n\nconst Center = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: ${(props: Props) => props.fullHeight ? \"100%\" : \"inherit\"}\n`;\n\nexport default Center;","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport styled from \"styled-components\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport { Redirect } from \"react-router\";\n\nimport Center from \"../components/Center\";\n\nimport { login } from \"../state/user/action\";\nimport { RootState, isLoggedIn, getLoginPending, getLoginFailed } from \"../state\";\n\nexport interface Props\n{\n}\n\ninterface State\n{\n username: string;\n password: string;\n}\n\nconst mapStateToProps = (state: RootState) => ({\n isLoggedIn: isLoggedIn(state),\n loginPending: getLoginPending(state),\n loginFailed: getLoginFailed(state)\n})\n\nconst mapDispatchToProps = (dispatch: any) => ({\n login: (username: string, password: string) => dispatch(login(username, password) as any)\n});\n\nconst LoginForm = styled.div`\n width: 65%;\n`;\n\ntype ConnectedProps = ReturnType & ReturnType;\n\nclass Login extends React.Component\n{\n private passwordInput?: HTMLInputElement;\n\n state: State = {\n username: \"\",\n password: \"\"\n };\n\n componentWillReceiveProps(nextProps: Props & ConnectedProps)\n {\n if(nextProps.loginFailed && !this.props.loginFailed)\n {\n this.setState({ password: \"\" });\n if(this.passwordInput !== undefined)\n {\n this.passwordInput.focus();\n }\n }\n }\n\n onLoginClick = () => \n {\n let { username, password } = this.state;\n if(username.indexOf(\"\\\\\") < 0)\n {\n username = \"GULDMANN\\\\\" + username\n }\n this.props.login(username, password);\n };\n\n onUsernameChange = (e: React.ChangeEvent) =>\n {\n\n this.setState({username: e.currentTarget.value});\n };\n\n onPasswordChange = (e: React.ChangeEvent) =>\n {\n this.setState({password: e.currentTarget.value});\n };\n\n render()\n {\n const { loginFailed, isLoggedIn } = this.props;\n const { username, password } = this.state;\n const loginDisabled = (this.props.loginPending) || (username === \"\") || (password === \"\");\n\n if(isLoggedIn)\n {\n return ;\n }\n\n return (\n <>\n {\n loginFailed ? (\n
\n {i18n`Login failed. Username or password is invalid.`}\n
\n ) : null\n }\n
\n \n \n this.passwordInput = input} label={i18n`Password`} value={password} onChange={this.onPasswordChange} margin=\"normal\" type=\"password\" fullWidth /> \n \n \n
\n \n );\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);","\nclass UpdateNotificationService\n{\n private callbacks: { [type: string]: Function[] } = {};\n\n addEventListener(type: \"updateavailable\", callback: Function)\n {\n this.callbacks[type] = this.callbacks[type] || [];\n this.callbacks[type].push(callback);\n }\n\n removeEventListener(type: string, callback: Function)\n {\n if(type in this.callbacks)\n {\n this.callbacks[type] = this.callbacks[type].filter(c => c !== callback);\n }\n }\n\n emit(type: \"updateavailable\")\n {\n if(type in this.callbacks)\n {\n this.callbacks[type].forEach(fn => fn());\n }\n }\n}\n\n\n\nexport default new UpdateNotificationService();","import { default as React, useEffect, useState } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport Button, { ButtonProps } from \"@material-ui/core/Button\";\nimport yellow from \"@material-ui/core/colors/yellow\";\nimport withStyles from \"@material-ui/core/styles/withStyles\";\nimport UpdateNotificationService from \"../service/UpdateNotificationService\";\n\nconst styles = {\n yellowButton: {\n color: yellow[500]\n }\n};\n\nconst YellowButton = withStyles(styles)(({ classes, ...other }: ButtonProps & { classes: any }) => \n