@jd-data-limited/easy-fm
Version:
easy-fm is a Node.js module that allows you to interact with a [FileMaker database stored](https://www.claris.com/filemaker/) on a [FileMaker server](https://www.claris.com/filemaker/server/). This module interacts with your server using the [FileMaker
82 lines (81 loc) • 2.84 kB
JavaScript
/*
* Copyright (c) 2023-2024. See LICENSE file for more information
*/
import { EventEmitter } from 'events';
import * as moment from 'moment';
import { RecordTypes } from '../types.js';
import { Field } from './field.js';
export class RecordBase extends EventEmitter {
layout;
type = RecordTypes.UNKNOWN;
recordId;
modId;
/**
* An object containing each field in this record.
*
* @template T - The type of the field.
*/
fields;
portalData = [];
constructor(layout, recordId, modId = recordId, fieldData) {
super();
this.layout = layout;
this.recordId = recordId;
this.modId = modId;
this.fields = this.processFieldData(fieldData);
}
get endpoint() {
return `${this.layout.endpoint}/records/${this.recordId}`;
}
/**
* A boolean indicating whether this record has been modified and should be committed
*
* @returns {boolean} A boolean value indicating whether any of the fields have been edited.
*/
get edited() {
return !!this.fieldsArray.find(i => i.edited);
}
get fieldsArray() {
return Object.values(this.fields);
}
processFieldData(fieldData) {
const fields = {};
for (const key of Object.keys(fieldData)) {
const _field = new Field(this, key, fieldData[key]);
if (fieldData[key]) {
if (_field.metadata.result === 'timeStamp') {
let date = moment.default(fieldData[key]);
date = date
.utcOffset(this.layout.database.host.timezoneOffsetFunc(date), true)
.local();
_field.set(date);
_field.updateOriginalContents();
}
else if (_field.metadata.result === 'time') {
let date = moment.default(fieldData[key]);
date = date
.utcOffset(this.layout.database.host.timezoneOffsetFunc(date), true)
.local();
_field.set(date);
_field.updateOriginalContents();
}
else if (_field.metadata.result === 'date') {
let date = moment.default(fieldData[key]);
date = date
.utcOffset(this.layout.database.host.timezoneOffsetFunc(date), true)
.local();
_field.set(date);
_field.updateOriginalContents();
}
}
fields[key] = _field;
}
this.fields = fields;
return fields;
}
_onSave() {
this.emit('saved');
for (const field of this.fieldsArray)
field.updateOriginalContents();
}
}