UNPKG

@tasolutions/express-core

Version:
52 lines (45 loc) 1.93 kB
const _ = require('lodash'); const { apiGWInfo } = require('../../../config'); const { getActions, fieldsToExclude } = require('./constants'); const mongoose = require('mongoose'); const { coverRequiredFields } = require('../utils/cover'); const { buildFieldListSelect } = require('./fieldBuilderSelect'); module.exports = { createObjectSelectOption: async (field, segment = '/') => { const ref = field.options?.ref; if (!ref) { throw new Error(`Ref is undefined for field: ${field.path}`); } const Model = mongoose.model(ref); if (!Model) { throw new Error(`Model not found for ref: ${ref}`); } const actions = getActions(Model.schema); const fieldKeys = Object.keys(Model.schema.paths).filter(key => !fieldsToExclude.includes(key)); if (fieldKeys.length === 0) { throw new Error(`No fields found in the ${ref} model.`); } const fieldList = await buildFieldListSelect(Model, segment); const requiredFields = field.options?.required_fields || null; const requestFields = fieldList.filter(field => requiredFields && requiredFields.includes(field.key) ); const refPath = ref.replace('_', '-'); return { api: { path: `${apiGWInfo.prefix}${segment}${refPath}`, url: `${apiGWInfo.url}${segment}${refPath}`, method: actions.LIST.method, limit: -1, type: ref, content_type: 'application/json', request_fields: requestFields.length ? requestFields : null, required_fields: requiredFields ? coverRequiredFields(requiredFields) : null, }, response_fields: fieldList, values: null, field_submit: '_id', field_display: fieldKeys[0], }; } }