UNPKG

@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
/* * 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(); } }