@fleetbase/fleetops-data
Version:
Fleetbase Fleet-Ops based models, serializers, transforms, adapters and GeoJson utility functions.
139 lines (115 loc) • 4.08 kB
JavaScript
import Model, { attr, belongsTo } from '@ember-data/model';
import { computed } from '@ember/object';
import { format as formatDate, isValid as isValidDate, formatDistanceToNow } from 'date-fns';
export default class MaintenanceScheduleModel extends Model {
/** @ids */
uuid;
public_id;
company_uuid;
subject_uuid;
subject_type;
default_assignee_uuid;
default_assignee_type;
/** @polymorphic relationships */
subject;
default_assignee;
/** @computed names — server-side convenience fields (read-only) */
subject_name;
default_assignee_name;
/** @attributes */
code;
title;
description;
name;
type;
status;
interval_method;
/** @interval — time-based */
interval_type;
interval_value;
interval_unit;
/** @interval — distance / engine-hours */
interval_distance;
interval_engine_hours;
/** @baseline readings */
last_service_odometer;
last_service_engine_hours;
last_service_date;
/** @next-due thresholds */
next_due_date;
next_due_odometer;
next_due_engine_hours;
/** @work-order defaults */
default_priority;
instructions;
meta;
slug;
/** @reminders — array of integer day offsets, e.g. [15, 7, 3] */
reminder_offsets;
/** @dates */
last_triggered_at;
deleted_at;
created_at;
updated_at;
/** @computed */
get isActive() {
return this.status === 'active';
}
get isPaused() {
return this.status === 'paused';
}
get nextDueAt() {
if (!isValidDate(this.next_due_date)) {
return null;
}
return formatDate(this.next_due_date, 'yyyy-MM-dd HH:mm');
}
get nextDueAtShort() {
if (!isValidDate(this.next_due_date)) {
return null;
}
return formatDate(this.next_due_date, 'dd, MMM yyyy');
}
get nextDueAgo() {
if (!isValidDate(this.next_due_date)) {
return null;
}
return formatDistanceToNow(this.next_due_date, { addSuffix: true });
}
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, 'yyyy-MM-dd HH:mm');
}
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, 'yyyy-MM-dd HH:mm');
}
get createdAtShort() {
if (!isValidDate(this.created_at)) {
return null;
}
return formatDate(this.created_at, 'dd, MMM');
}
}