{"version":3,"file":"vehicles-BFjSrJPO.js","sources":["../../../Nitrogen.Client/src/models/VehicleType.js","../../../Nitrogen.Client/src/models/VehicleDisposalPermit.js","../../../Nitrogen.Client/src/models/Vehicle.js","../../../Nitrogen.Client/src/api/modules/vehicles.js"],"sourcesContent":["import { getValueFromDto as getValue } from './_helpers.js';\r\n\r\nexport default class VehicleType {\r\n\tconstructor(dto) {\r\n\t\tthis.id = getValue(dto, 'id', 'number', 0);\r\n\t\tthis.name = getValue(dto, 'name', 'string', '');\r\n\t\tthis.sortOrder = getValue(dto, 'sortOrder', 'number', 0);\r\n\t\tthis.active = getValue(dto, 'active', 'boolean', true);\r\n\t}\r\n}\r\n","export default class VehicleDisposalPermit {\r\n\tconstructor(dto) {\r\n\t\tthis.wasteDisposalSiteId = null;\r\n\t\tthis.permitNumber = '';\r\n\r\n\t\tif (typeof dto === 'object' && dto !== null) {\r\n\t\t\tif (typeof dto.wasteDisposalSiteId === 'number') {\r\n\t\t\t\tthis.wasteDisposalSiteId = dto.wasteDisposalSiteId;\r\n\t\t\t}\r\n\t\t\tif (typeof dto.permitNumber === 'string') {\r\n\t\t\t\tthis.permitNumber = dto.permitNumber;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import VehicleDisposalPermit from './VehicleDisposalPermit.js';\r\nimport VehicleType from './VehicleType.js';\r\nimport { getArrayOfObjectsFromDto as getTypedArray, getDateTimeFromDto as getDate, getObjectFromDto as getObject, getValueFromDto as getValue } from './_helpers.js';\r\n\r\nexport default class Vehicle {\r\n\tconstructor(dto) {\r\n\t\tthis.id = getValue(dto, 'id', 'number', 0);\r\n\t\tthis.number = getValue(dto, 'number', 'number', null);\r\n\t\tthis.name = getValue(dto, 'name', 'string', '');\r\n\t\tthis.year = getValue(dto, 'year', 'string', '');\r\n\t\tthis.make = getValue(dto, 'make', 'string', '');\r\n\t\tthis.model = getValue(dto, 'model', 'string', '');\r\n\t\tthis.vehicleTypeId = getValue(dto, 'vehicleTypeId', 'number', null);\r\n\t\tthis.vehicleType = getObject(dto, 'vehicleType', VehicleType, null);\r\n\t\tObject.defineProperty(this, 'vehicleType', { enumerable: false });\r\n\t\tthis.tankCapacity = getValue(dto, 'tankCapacity', 'number', 0);\r\n\t\tthis.registrationNumber = getValue(dto, 'registrationNumber', 'string', '');\r\n\t\tthis.vehicleIdentificationNumber = getValue(dto, 'vehicleIdentificationNumber', 'string', '');\r\n\t\tthis.licensePlateNumber = getValue(dto, 'licensePlateNumber', 'string', '');\r\n\t\tthis.licenseState = getValue(dto, 'licenseState', 'string', '');\r\n\t\tthis.purchaseDate = getDate(dto, 'purchaseDate', null);\r\n\t\tthis.mileage = getValue(dto, 'mileage', 'number', 0);\r\n\t\tthis.hours = getValue(dto, 'hours', 'number', 0);\r\n\t\tthis.notes = getValue(dto, 'notes', 'string', '');\r\n\t\tthis.active = getValue(dto, 'active', 'boolean', true);\r\n\t\tthis.disposalPermits = getTypedArray(dto, 'disposalPermits', VehicleDisposalPermit, []);\r\n\t\tObject.defineProperty(this, 'maintenanceSchedule', { enumerable: false, value: [], writable: true });\r\n\t}\r\n\r\n\tget maintenanceScheduleReminders() {\r\n\t\treturn this.maintenanceSchedule.filter(x => x.isPastWarning);\r\n\t}\r\n}\r\n","import { makeComparator } from '@/helpers/helpers';\r\nimport { getIdb, idbHelpers } from '@/idb';\r\nimport Vehicle from '@/models/Vehicle';\r\nimport { compare as jsonPatchCompare } from 'fast-json-patch';\r\nimport { DateTime } from 'luxon';\r\nimport { fetchAllPages, fetchWrap, idbResponse, isIdbResponse, offlineResponse } from '../_helpers';\r\nimport cache from './cache';\r\n\r\nconst idbStore = 'vehicles';\r\n\r\nexport default {\r\n\t/**\r\n\t * Get all vehicles\r\n\t * @param {Object} params\r\n\t * @param {boolean} params.active\r\n\t * @returns (async) Returns an array of Vehicle objects if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync getAll({ active = undefined } = {}) {\r\n\t\tconst filters = {};\r\n\t\tif (typeof active === 'boolean') {\r\n\t\t\tfilters.active = active;\r\n\t\t}\r\n\t\tconst idb = await getIdb();\r\n\t\tlet response, data = [], timestamp;\r\n\t\tlet useIdb = await cache.isCacheHit(idbStore);\r\n\t\tif (!useIdb) {\r\n\t\t\ttry {\r\n\t\t\t\ttimestamp = DateTime.now();\r\n\t\t\t\tresponse = await fetchAllPages('/api/Vehicles', x => data.push(x));\r\n\t\t\t} catch {\r\n\t\t\t\tuseIdb = true;\r\n\t\t\t\tresponse = offlineResponse();\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst filter = 'active' in filters ? (x => x.active === filters.active) : undefined;\r\n\t\tif (useIdb && idb) {\r\n\t\t\tif (filter) {\r\n\t\t\t\tdata = await idbHelpers.getFiltered(idb, idbStore, filter);\r\n\t\t\t} else {\r\n\t\t\t\tdata = await idb.getAll(idbStore);\r\n\t\t\t}\r\n\t\t\tresponse = idbResponse(200);\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tif (!isIdbResponse(response)) {\r\n\t\t\t\tif (idb) {\r\n\t\t\t\t\tawait idbHelpers.replaceAll(idb, idbStore, data);\r\n\t\t\t\t\tawait cache.setTimestamp(idbStore, timestamp);\r\n\t\t\t\t}\r\n\t\t\t\tif (filter) {\r\n\t\t\t\t\tdata = data.filter(filter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tdata.sort(makeComparator('id'));\r\n\t\t\treturn data.map(x => new Vehicle(x));\r\n\t\t} else {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Get a vehicle\r\n\t * @param {Number} id Vehicle ID\r\n\t * @returns (async) Returns a Vehicle if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync getById(id) {\r\n\t\tconst idb = await getIdb();\r\n\t\tlet response, data = null;\r\n\t\tlet useIdb = await cache.isCacheHit(idbStore);\r\n\t\tif (!useIdb && await cache.canCache()) {\r\n\t\t\t// cache all for future re-use\r\n\t\t\tif ((data = (await this.getAll()).find(x => x.id === id) ?? null)) {\r\n\t\t\t\treturn data;\r\n\t\t\t} else {\r\n\t\t\t\tthrow idbResponse(404);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!useIdb) {\r\n\t\t\ttry {\r\n\t\t\t\tresponse = await fetchWrap('/api/Vehicles/' + id);\r\n\t\t\t\tif (response.ok) { data = await response.json(); }\r\n\t\t\t} catch {\r\n\t\t\t\tuseIdb = true;\r\n\t\t\t\tresponse = offlineResponse();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (useIdb && idb) {\r\n\t\t\tdata = await idb.get(idbStore, id);\r\n\t\t\tresponse = data ? idbResponse(200) : idbResponse(404);\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tif (idb && !isIdbResponse(response)) {\r\n\t\t\t\tawait idb.put(idbStore, data);\r\n\t\t\t}\r\n\t\t\treturn new Vehicle(data);\r\n\t\t} else {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Create a vehicle\r\n\t * @param {Vehicle} model vehicle to create.\r\n\t * @returns (async) Returns the new Vehicle if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync create(model) {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Vehicles', {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\t\tbody: JSON.stringify(model),\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tawait cache.clearTimestamp(idbStore);\r\n\t\t\treturn new Vehicle(await response.json());\r\n\t\t} else {\r\n\t\t\treturn response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Update a vehicle\r\n\t * @param {Vehicle} model vehicle to update.\r\n\t * @returns (async) Returns the updated Vehicle if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync update(model) {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Vehicles/' + model.id, {\r\n\t\t\t\tmethod: 'PUT',\r\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\t\tbody: JSON.stringify(model),\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tawait cache.clearTimestamp(idbStore);\r\n\t\t\treturn new Vehicle(model);\r\n\t\t} else {\r\n\t\t\treturn response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Update a vehicle\r\n\t * @param {Vehicle} model vehicle to update.\r\n\t * @param {Vehicle} oldModel old vehicle to determine updates to apply.\r\n\t * @returns (async) Returns the updated Vehicle if the request was successful, otherwise a Response.\r\n\t */\r\n\tasync patch(model, oldModel) {\r\n\t\tconst oldData = JSON.parse(JSON.stringify(oldModel));\r\n\t\tconst newData = JSON.parse(JSON.stringify(model));\r\n\t\tconst patch = jsonPatchCompare(oldData, newData);\r\n\t\tif (patch.length === 0) {\r\n\t\t\treturn model instanceof Vehicle ? model : new Vehicle(model);\r\n\t\t}\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Vehicles/' + model.id, {\r\n\t\t\t\tmethod: 'PATCH',\r\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\t\tbody: JSON.stringify(patch),\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tresponse = offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tawait cache.clearTimestamp(idbStore);\r\n\t\t\tconst data = await response.json();\r\n\t\t\treturn new Vehicle(data);\r\n\t\t} else {\r\n\t\t\treturn response;\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Delete a vehicle\r\n\t * @param {Number} id Vehicle ID to delete.\r\n\t * @returns (async) Returns true if the request was successful (or not found), false if the vehicle could not be deleted, otherwise a Response.\r\n\t */\r\n\tasync deleteById(id) {\r\n\t\tlet response;\r\n\t\ttry {\r\n\t\t\tresponse = await fetchWrap('/api/Vehicles/' + id, { method: 'DELETE' });\r\n\t\t} catch {\r\n\t\t\treturn offlineResponse();\r\n\t\t}\r\n\t\tif (response.ok) {\r\n\t\t\tawait cache.clearTimestamp(idbStore);\r\n\t\t\treturn true;\r\n\t\t} else if (response.status === 404) {\r\n\t\t\treturn true;\r\n\t\t} else if (response.status === 409) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn response;\r\n\t\t}\r\n\t}\r\n};\r\n"],"names":["VehicleType","dto","getValue","VehicleDisposalPermit","Vehicle","getObject","getDate","getTypedArray","x","idbStore","vehiclesApi","active","filters","idb","getIdb","response","data","timestamp","useIdb","cache","DateTime","fetchAllPages","offlineResponse","filter","idbHelpers","idbResponse","isIdbResponse","makeComparator","id","fetchWrap","model","oldModel","oldData","newData","patch","jsonPatchCompare"],"mappings":"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"}