@myorders/fleetops-data
Version:
Myorders Fleet-Ops based models, serializers, transforms, adapters and GeoJson utility functions.
141 lines (123 loc) • 4.21 kB
JavaScript
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
import { get, computed } from '@ember/object';
import { format as formatDate, isValid as isValidDate, formatDistanceToNow } from 'date-fns';
import { getOwner } from '@ember/application';
import isRelationMissing from '@myorders/ember-core/utils/is-relation-missing';
import config from 'ember-get-config';
export default class VehicleModel extends Model {
/** @ids */
uuid;
public_id;
company_uuid;
photo_uuid;
vendor_uuid;
online;
/** @relationships */
driver;
vendor;
devices;
/** @attributes */
photo_url;
driver_name;
vendor_name;
display_name;
avatar_url;
avatar_value;
location;
make;
model;
year;
trim;
type;
plate_number;
vin;
vin_data;
model_data;
telematics;
meta;
status;
slug;
/** @dates */
deleted_at;
created_at;
updated_at;
/** @computed */
get displayName() {
const nameSegments = [this.year, this.make, this.model, this.trim, this.plate_number, this.internal_id];
return nameSegments.filter(Boolean).join(' ').trim();
}
get updatedAgo() {
if (!isValidDate(this.updated_at)) {
return null;
}
return formatDistanceToNow(this.updated_at);
}
get updatedAt() {
if (!isValidDate(this.updated_at)) {
return null;
}
return formatDate(this.updated_at, 'PPP p');
}
get updatedAtShort() {
if (!isValidDate(this.updated_at)) {
return null;
}
return formatDate(this.updated_at, 'dd, MMM');
}
get createdAgo() {
if (!isValidDate(this.created_at)) {
return null;
}
return formatDistanceToNow(this.created_at);
}
get createdAt() {
if (!isValidDate(this.created_at)) {
return null;
}
return formatDate(this.created_at, 'PPP p');
}
get createdAtShort() {
if (!isValidDate(this.created_at)) {
return null;
}
return formatDate(this.created_at, 'dd, MMM');
}
/** @methods */
loadDriver() {
const owner = getOwner(this);
const store = owner.lookup('service:store');
return new Promise((resolve) => {
if (isRelationMissing(this, 'driver')) {
return store
.findRecord('driver', this.driver_uuid)
.then((driver) => {
this.driver = driver;
resolve(driver);
})
.catch(() => {
resolve(null);
});
}
resolve(this.driver);
});
}
loadDevices() {
const owner = getOwner(this);
const store = owner.lookup('service:store');
return new Promise((resolve, reject) => {
return store
.findRecord('vehicle-device', { vehicle_uuid: this.id })
.then((devices) => {
this.vehicle_devices = devices;
resolve(devices);
})
.catch(reject);
});
}
}