UNPKG

9s-fe-core

Version:

Core functionalities for authentication, configuration, and repository management.

255 lines (254 loc) 12.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.integrateFieldsWithData = exports.getFieldRules = exports.renderFormField = exports.buildPayloadFromQuery = void 0; exports.buildApiUrl = buildApiUrl; exports.renderFieldDisplayUI = renderFieldDisplayUI; exports.convertFieldToPayload = convertFieldToPayload; exports.convertRequiredFieldsFromPayload = convertRequiredFieldsFromPayload; exports.checkPayloadIsValid = checkPayloadIsValid; const jsx_runtime_1 = require("react/jsx-runtime"); const field_type_enum_1 = require("../enums/field-type.enum"); const form_boolean_field_1 = __importDefault(require("../components/form_fields/form_boolean_field")); const form_image_field_1 = __importDefault(require("../components/form_fields/form_image_field")); const form_date_field_1 = require("../components/form_fields/form_date_field"); const field_subtype_enum_1 = require("../enums/field-subtype.enum"); const image_display_1 = __importDefault(require("../components/view_fields/image_display")); const boolean_display_1 = __importDefault(require("../components/view_fields/boolean_display")); const select_display_1 = __importDefault(require("../components/view_fields/select_display")); const date_display_1 = __importDefault(require("../components/view_fields/date_display")); const text_display_1 = __importDefault(require("../components/view_fields/text_display")); const number_display_1 = __importDefault(require("../components/view_fields/number_display")); const form_editor_field_1 = __importDefault(require("../components/form_fields/form_editor_field")); const form_text_field_1 = require("../components/form_fields/form_text_field"); const dayjs_1 = __importDefault(require("dayjs")); const form_select_field_1 = __importDefault(require("../components/form_fields/form_select_field")); const array_display_1 = __importDefault(require("../components/view_fields/array_display")); function buildApiUrl(apiUrl, params) { return apiUrl.replace(/:([a-zA-Z_]+)/g, (_, key) => { return params[key] || ''; }); } const buildPayloadFromQuery = (searchParams) => { const payload = {}; searchParams.forEach((value, key) => { payload[key] = value; }); return payload; }; exports.buildPayloadFromQuery = buildPayloadFromQuery; function renderFieldDisplayUI(fieldItem, options = {}) { const type = field_type_enum_1.FieldTypeEnumDetail.fromString(fieldItem.type); switch (type) { case field_type_enum_1.FieldTypeEnum.IMAGE: return ((0, jsx_runtime_1.jsx)(image_display_1.default, { fieldItem: fieldItem, showAllImage: options.showAllImage })); case field_type_enum_1.FieldTypeEnum.ARRAY: return (0, jsx_runtime_1.jsx)(array_display_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.BOOLEAN: return (0, jsx_runtime_1.jsx)(boolean_display_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.SELECT: return (0, jsx_runtime_1.jsx)(select_display_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.DATE: return (0, jsx_runtime_1.jsx)(date_display_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.TEXT: return (0, jsx_runtime_1.jsx)(text_display_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.NUMBER: return (0, jsx_runtime_1.jsx)(number_display_1.default, { fieldItem: fieldItem }); default: return null; } } const renderFormField = (fieldItem) => { switch (fieldItem.type) { case field_type_enum_1.FieldTypeEnum.TEXT: case field_type_enum_1.FieldTypeEnum.NUMBER: if (fieldItem.type_sub == field_subtype_enum_1.FieldSubTypeEnum.EDITOR) { return (0, jsx_runtime_1.jsx)(form_editor_field_1.default, { fieldItem: fieldItem }); } else { return (0, jsx_runtime_1.jsx)(form_text_field_1.FormInputField, { fieldItem: fieldItem }); } case field_type_enum_1.FieldTypeEnum.SELECT: return (0, jsx_runtime_1.jsx)(form_select_field_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.BOOLEAN: return (0, jsx_runtime_1.jsx)(form_boolean_field_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.IMAGE: return (0, jsx_runtime_1.jsx)(form_image_field_1.default, { fieldItem: fieldItem }); case field_type_enum_1.FieldTypeEnum.DATE: return (0, jsx_runtime_1.jsx)(form_date_field_1.FormDateField, { fieldItem: fieldItem }); default: return (0, jsx_runtime_1.jsxs)("p", { children: [" ", fieldItem.type, " UI is missing "] }, fieldItem.key); } }; exports.renderFormField = renderFormField; const getFieldRules = (fieldItem) => { var _a, _b, _c, _d, _e, _f; const rules = []; if (fieldItem.is_required) { rules.push({ required: true, message: (_b = (_a = fieldItem === null || fieldItem === void 0 ? void 0 : fieldItem.html) === null || _a === void 0 ? void 0 : _a.placeholder) !== null && _b !== void 0 ? _b : `Please input ${(_c = fieldItem.label) !== null && _c !== void 0 ? _c : fieldItem.key}!`, }); } if (fieldItem.type_sub === field_subtype_enum_1.FieldSubTypeEnum.EMAIL) { rules.push({ type: 'email', message: `${(_d = fieldItem.label) !== null && _d !== void 0 ? _d : fieldItem.key} is invalid with email format!`, }); } if (fieldItem.type_sub === field_subtype_enum_1.FieldSubTypeEnum.PHONE) { rules.push({ pattern: /^\d{9,11}$/, message: `${(_e = fieldItem.label) !== null && _e !== void 0 ? _e : fieldItem.key} is invalid with phone format!`, }); } if (fieldItem.type === field_type_enum_1.FieldTypeEnum.NUMBER) { rules.push({ type: 'number', message: `${(_f = fieldItem.label) !== null && _f !== void 0 ? _f : fieldItem.key} is invalid with number format!`, transform: value => (value ? Number(value) : undefined), }); } return rules; }; exports.getFieldRules = getFieldRules; const integrateFieldsWithData = (fields, dataItem) => { if (!fields) { return []; } const normalizedFields = fields.map(field => { let value = dataItem === null || dataItem === void 0 ? void 0 : dataItem[field.key]; switch (field.type) { case field_type_enum_1.FieldTypeEnum.BOOLEAN: value = value === true; break; case field_type_enum_1.FieldTypeEnum.SELECT: { const options = field.select_options; const newSelectValue = []; if (value != null) { if (typeof value === 'string' && (options === null || options === void 0 ? void 0 : options.field_submit)) { newSelectValue.push({ [options.field_submit]: value }); } else if (typeof value === 'object' && !Array.isArray(value)) { newSelectValue.push(value); } else if (Array.isArray(value)) { value.forEach(v => newSelectValue.push(v)); } } value = newSelectValue; break; } case field_type_enum_1.FieldTypeEnum.IMAGE: { const newValue = []; if (typeof value === 'string') { newValue.push({ name: field.key, networkFile: value }); } else if (Array.isArray(value)) { value.forEach((imageUrl) => newValue.push({ name: field.key, networkFile: imageUrl })); } value = newValue; break; } } return Object.assign(Object.assign({}, field), { value }); }); return normalizedFields; }; exports.integrateFieldsWithData = integrateFieldsWithData; function convertFieldToPayload(field, requestJson, requestFiles) { var _a, _b; switch (field.type) { case field_type_enum_1.FieldTypeEnum.IMAGE: processImageField(field, requestJson, requestFiles); break; case field_type_enum_1.FieldTypeEnum.TEXT: processTextField(field, requestJson); break; case field_type_enum_1.FieldTypeEnum.DATE: if (field.value) { const formatted = (0, dayjs_1.default)(field.value).format('YYYY-MM-DD'); requestJson[field.key] = formatted; } break; case field_type_enum_1.FieldTypeEnum.BOOLEAN: requestJson[field.key] = (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : null; break; case field_type_enum_1.FieldTypeEnum.NUMBER: requestJson[field.key] = field.value != null ? Number(field.value) : null; break; case field_type_enum_1.FieldTypeEnum.SELECT: try { processSelectField(field, requestJson); } catch (error) { console.log('field:', JSON.stringify(field, null, 2)); console.log('requestJson:', JSON.stringify(requestJson, null, 2)); } break; case field_type_enum_1.FieldTypeEnum.ARRAY: // TODO: Handle this case. break; } function processImageField(field, requestJson, requestFiles) { var _a, _b; const files = (_a = field.value) !== null && _a !== void 0 ? _a : []; const imageValue = []; files.forEach(fileItem => { if (fileItem.file) { requestFiles === null || requestFiles === void 0 ? void 0 : requestFiles.push(fileItem); } if (fileItem.networkFile) { imageValue.push(fileItem.networkFile); } }); if (imageValue.length) { requestJson[field.key] = field.max_length == 1 ? ((_b = imageValue[0]) !== null && _b !== void 0 ? _b : null) : imageValue; } } function processTextField(field, requestJson) { var _a, _b; requestJson[field.key] = (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''; } function processSelectField(field, requestJson) { var _a, _b, _c, _d; const value = field.value; const fieldSubmit = (_b = (_a = field.select_options) === null || _a === void 0 ? void 0 : _a.field_submit) !== null && _b !== void 0 ? _b : '_id'; const maxLength = (_c = field.max_length) !== null && _c !== void 0 ? _c : 0; if (Array.isArray(value)) { const values = value.map(v => typeof v === 'object' ? v[fieldSubmit] : v); requestJson[field.key] = maxLength == 1 ? ((_d = values[0]) !== null && _d !== void 0 ? _d : null) : values; } else if (typeof value === 'object' && value !== null) { requestJson[field.key] = value[fieldSubmit]; } else { requestJson[field.key] = value; } } } function convertRequiredFieldsFromPayload(payload, requiredFields) { const result = {}; if (requiredFields) { requiredFields.forEach(map => { Object.entries(map).forEach(([sourceKey, targetKey]) => { if (sourceKey in payload) { result[targetKey] = payload[sourceKey]; } }); }); } return result; } function checkPayloadIsValid(payload, requiredFields) { let result = true; if (requiredFields) { result = requiredFields.every(map => Object.values(map).every(sourceKey => { return payload[sourceKey] !== undefined && payload[sourceKey] !== null; })); } return result; }