@fleetbase/fleetops-data
Version:
Fleetbase Fleet-Ops based models, serializers, transforms, adapters and GeoJson utility functions.
124 lines (107 loc) • 3.57 kB
JavaScript
import Model, { attr, belongsTo } from '@ember-data/model';
import { computed } from '@ember/object';
import { getOwner } from '@ember/application';
import { format as formatDate, isValid as isValidDate, formatDistanceToNow } from 'date-fns';
import isRelationMissing from '@fleetbase/ember-core/utils/is-relation-missing';
export default class IssueModel extends Model {
/** @ids */
public_id;
issue_id;
company_uuid;
reported_by_uuid;
assigned_to_uuid;
driver_uuid;
vehicle_uuid;
/** @relationships */
reporter;
assignee;
vehicle;
driver;
/** @attributes */
driver_name;
vehicle_name;
assignee_name;
reporter_name;
type;
category;
report;
priority;
status;
location;
tags;
meta;
/** @dates */
deleted_at;
created_at;
updated_at;
/** @computed */
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 */
loadVehicle() {
const owner = getOwner(this);
const store = owner.lookup('service:store');
return new Promise((resolve, reject) => {
if (isRelationMissing(this, 'vehicle')) {
return store
.findRecord('vehicle', this.vehicle_uuid)
.then((vehicle) => {
this.vehicle = vehicle;
resolve(vehicle);
})
.catch(reject);
}
resolve(this.vehicle);
});
}
loadDriver() {
const owner = getOwner(this);
const store = owner.lookup('service:store');
return new Promise((resolve, reject) => {
if (isRelationMissing(this, 'driver')) {
return store
.findRecord('driver', this.driver_uuid)
.then((driver) => {
this.driver = driver;
resolve(driver);
})
.catch(reject);
}
resolve(this.driver);
});
}
}