@fleetbase/fleetops-data
Version:
Fleetbase Fleet-Ops based models, serializers, transforms, adapters and GeoJson utility functions.
92 lines (77 loc) • 2.69 kB
JavaScript
import Model, { attr, belongsTo } from '@ember-data/model';
import { computed } from '@ember/object';
import { isArray } from '@ember/array';
import { format as formatDate, isValid as isValidDate, formatDistanceToNow } from 'date-fns';
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
import first from '@fleetbase/ember-core/utils/first';
export default class ZoneModel extends Model {
/** @ids */
public_id;
service_area_uuid;
/** @relationships */
service_area;
/** @attributes */
name;
description;
color;
stroke_color;
status;
border;
center;
/** @dates */
deleted_at;
created_at;
updated_at;
/** @computed */
get locations() {
let coordinates = getWithDefault(this.border, 'coordinates', []);
let isCoordinatesWrapped = isArray(coordinates) && isArray(coordinates[0]) && coordinates[0].length > 2;
// hotfix patch when coordinates are wrapped in array
if (isCoordinatesWrapped) {
coordinates = first(coordinates);
}
if (this.isNew) {
return coordinates;
}
return coordinates.map((coord) => {
let [longitude, latitude] = coord;
return [latitude, longitude];
});
}
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');
}
}