9s-fe-core
Version:
Core functionalities for authentication, configuration, and repository management.
255 lines (254 loc) • 12.3 kB
JavaScript
;
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;
}