@fleetbase/fleetops-data
Version:
Fleetbase Fleet-Ops based models, serializers, transforms, adapters and GeoJson utility functions.
99 lines (82 loc) • 2.95 kB
JavaScript
import Model, { attr, hasMany } from '@ember-data/model';
import { computed } from '@ember/object';
import { format as formatDate, isValid as isValidDate, formatDistanceToNow } from 'date-fns';
import extractCoordinates from '@fleetbase/ember-core/utils/extract-coordinates';
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
import first from '@fleetbase/ember-core/utils/first';
export default class ServiceAreaModel extends Model {
/** @ids */
public_id;
company_uuid;
parent_uuid;
/** @relationships */
zones;
/** @attributes */
name;
type;
country;
color;
stroke_color;
status;
border;
/** @dates */
deleted_at;
created_at;
updated_at;
/** @computed */
get bounds() {
const polygon = this.border.get(0);
const coordinates = getWithDefault(polygon, 'coordinates', []);
const bounds = first(coordinates);
return bounds.map((coord) => extractCoordinates(coord));
}
get boundaries() {
return getWithDefault(this.border, 'coordinates', []);
}
get firstCoordinatePair() {
return first(this.bounds) ?? [0, 0];
}
get centerCoordinates() {
const x = this.bounds.map((xy) => xy[0]);
const y = this.bounds.map((xy) => xy[1]);
const cx = (Math.min(...x) + Math.max(...x)) / 2;
const cy = (Math.min(...y) + Math.max(...y)) / 2;
return [cx, cy];
}
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, 'PP');
}
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, 'PP');
}
}