Files
fluxscape/packages/noodl-runtime/src/nodes/std-library/datetostring.js

96 lines
2.7 KiB
JavaScript

'use strict';
const DateToStringNode = {
name: 'Date To String',
docs: 'https://docs.noodl.net/nodes/utilities/date-to-string',
category: 'Utilities',
initialize: function () {
this._internal.formatString = '{year}-{month}-{date}';
},
inputs: {
formatString: {
displayName: 'Format',
type: 'string',
default: '{year}-{month}-{date}',
set: function (value) {
if (this._internal.formatString === value) return;
this._internal.formatString = value;
if (this._internal.currentInput !== undefined) {
this._format();
this.flagOutputDirty('currentValue');
}
}
},
input: {
type: { name: 'date' },
displayName: 'Date',
set: function (value) {
const _value = typeof value === 'string' ? new Date(value) : value;
if (this._internal.currentInput === _value) return;
this._internal.currentInput = _value;
this._format();
}
}
},
outputs: {
currentValue: {
type: 'string',
displayName: 'Date String',
group: 'Value',
getter: function () {
return this._internal.dateString;
}
},
inputChanged: {
type: 'signal',
displayName: 'Date Changed',
group: 'Signals'
},
onError: {
type: 'signal',
displayName: 'Invalid Date',
group: 'Signals'
}
},
methods: {
_format() {
try {
const t = this._internal.currentInput;
const format = this._internal.formatString;
const date = ('0' + t.getDate()).slice(-2);
const month = ('0' + (t.getMonth() + 1)).slice(-2);
const monthShort = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(t);
const year = t.getFullYear();
const yearShort = year.toString().substring(2);
const hours = ('0' + t.getHours()).slice(-2);
const minutes = ('0' + t.getMinutes()).slice(-2);
const seconds = ('0' + t.getSeconds()).slice(-2);
this._internal.dateString = format
.replace(/\{date\}/g, date)
.replace(/\{month\}/g, month)
.replace(/\{monthShort\}/g, monthShort)
.replace(/\{year\}/g, year)
.replace(/\{yearShort\}/g, yearShort)
.replace(/\{hours\}/g, hours)
.replace(/\{minutes\}/g, minutes)
.replace(/\{seconds\}/g, seconds);
} catch (error) {
// Set the output to be blank, makes it easier to handle.
this._internal.dateString = '';
this.flagOutputDirty('onError');
}
// Flag that the value have changed
this.flagOutputDirty('currentValue');
this.sendSignalOnOutput('inputChanged');
}
}
};
module.exports = {
node: DateToStringNode
};