Files
pulse-signage/src/web/routes/data-sources/api-sources/form-view-model.js
T
2026-08-05 19:38:16 +01:00

51 lines
2.1 KiB
JavaScript

// Shared API source form view-model builder.
function buildDefaultApiSource() {
return {
id: null,
name: '',
apiUrl: '',
authMethod: 'none',
authUsername: '',
authPassword: '',
authBearerToken: '',
authHeaderName: 'X-API-Key',
authHeaderValue: '',
itemsPath: '',
updateIntervalValue: 60,
updateIntervalUnit: 'minutes',
lastPulledAt: null,
lastPullError: '',
lastResponseStatus: null,
lastResponseContentType: '',
lastResponseJson: ''
};
}
function buildApiSourceFormViewModel(apiSource, message, currentUser, options, isEdit) {
const viewApiSource = Object.assign(buildDefaultApiSource(), apiSource || {});
const viewOptions = options || {};
return {
title: isEdit ? 'Edit API source' : 'Add API source',
active: 'api-sources',
message: message,
currentUser: currentUser || null,
apiSource: viewApiSource,
inUse: Boolean(viewApiSource.inUse),
lastResponseJson: viewOptions.lastResponseJson || viewApiSource.lastResponseJson || '',
lastPullError: viewOptions.lastPullError || viewApiSource.lastPullError || '',
messageVariant: viewOptions.messageVariant || '',
isEdit: Boolean(isEdit),
showSaveSecondaryActions: true,
deleteDisabled: !isEdit || Boolean(viewApiSource.inUse),
formAction: isEdit && viewApiSource.id ? '/data-sources/api-sources/' + viewApiSource.id : '/data-sources/api-sources',
formAttrs: isEdit && viewApiSource.id ? 'data-async-save data-async-save-refresh-target="#api-source-response-panel" data-async-save-refresh-state-url="/data-sources/api-sources/' + viewApiSource.id + '/state" data-async-save-close-url="/data-sources/api-sources" data-async-save-new-url="/data-sources/api-sources/new"' : 'data-async-save data-async-save-close-url="/data-sources/api-sources" data-async-save-new-redirect="response-url" data-async-save-new-url="/data-sources/api-sources/new"',
cancelUrl: '/data-sources/api-sources',
deleteUrl: isEdit && viewApiSource.id ? '/data-sources/api-sources/' + viewApiSource.id + '/delete' : ''
};
}
module.exports = {
buildApiSourceFormViewModel: buildApiSourceFormViewModel
};