krp-react-form-component
Version:
KRP React Component for Form Preview Component
1,147 lines (1,139 loc) • 93.9 kB
JavaScript
"use strict";
require("core-js/modules/es.weak-map.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es.array.flat.js");
require("core-js/modules/es.array.includes.js");
require("core-js/modules/es.array.reduce.js");
require("core-js/modules/es.array.reverse.js");
require("core-js/modules/es.array.unscopables.flat.js");
require("core-js/modules/es.object.assign.js");
require("core-js/modules/es.parse-int.js");
require("core-js/modules/es.promise.js");
require("core-js/modules/es.regexp.to-string.js");
require("core-js/modules/es.string.includes.js");
require("core-js/modules/es.string.trim.js");
require("core-js/modules/esnext.iterator.constructor.js");
require("core-js/modules/esnext.iterator.filter.js");
require("core-js/modules/esnext.iterator.find.js");
require("core-js/modules/esnext.iterator.for-each.js");
require("core-js/modules/esnext.iterator.map.js");
require("core-js/modules/esnext.iterator.reduce.js");
require("core-js/modules/web.dom-collections.iterator.js");
var _react = _interopRequireWildcard(require("react"));
var _AppContext = require("../../../../context/AppContext");
var _antd = require("antd");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _CommonFormConstants = require("../../../../constants/CommonFormConstants");
var _Constants = require("../../../../constants/Constants");
var _CustomInput = _interopRequireDefault(require("../../Common/CustomInput/CustomInput"));
var _CustomFileUpload = _interopRequireDefault(require("../../Common/CustomFileUpload/CustomFileUpload"));
var _CustomTimePicker = _interopRequireDefault(require("../../Common/CustomTimePicker/CustomTimePicker"));
var _CustomDatePickerMobile = _interopRequireDefault(require("../../Common/CustomDatePickerMobile/CustomDatePickerMobile"));
var _actions = require("../../../../utils/actions");
var _moment = _interopRequireDefault(require("moment"));
require("./CommonFormPage.scss");
var _SelectionContext = require("../../../../context/SelectionContext");
require("../../../../utils/th-locale");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const CommonFormPage = props => {
const {
mode,
appOnPopupCommonForm,
appOnSubmitCommonForm,
formDetailData,
isPreviewMode,
locale,
resolveLocale,
resolveFunctionLocale,
customerInfo,
serviceList,
isServiceNeeded,
setIsServiceNeeded,
errorCommonFormFields,
appOnActionLog,
DatePickerComp,
appOnClickLinkDecoration
} = (0, _react.useContext)(_AppContext.AppContext);
const {
campaign
} = (0, _react.useContext)(_SelectionContext.SelectionContext);
const {
FORM_BACKGROUND_OPTION,
FORM_VERTICAL_ALIGNMENT_OPTION,
IMAGE_ALIGNMENT_OPTION,
PREVIEW_MOCK_OPTIONS,
PREVIEW_CARDS
} = _CommonFormConstants.CONSTANT;
const INPUT_RULE = {
LETTERS_ONLY: "letters_only",
NUMBERS_ONLY: "numbers_only",
ALLOW_ALL_EXCEPT_SOME_SPECIAL: "allows_all_except_some_specials",
THAI_ONLY: 'thai_only',
ENGLISH_ONLY: 'english_only',
THAI_AND_ENGLISH_ONLY: 'thai_and_english_only',
EMAIL_FORMAT: 'email_format'
};
const FormItem = _antd.Form.Item;
const {
Option
} = _antd.Select;
const [formValues, setFormValues] = (0, _react.useState)(() => {
let defaultValueObject;
formDetailData.form_fields.forEach(field => {
if (field.default_value) {
defaultValueObject = _objectSpread(_objectSpread({}, defaultValueObject), {}, {
[field.name]: field.default_value
});
}
});
return defaultValueObject;
});
const [formErrors, setFormErrors] = (0, _react.useState)({});
const [validateCard, setValidateCard] = (0, _react.useState)('');
const [specialCardList, setSpecialCardList] = (0, _react.useState)([]);
const fieldDelayTimer = {};
(0, _react.useEffect)(() => {
if (validateCard !== '') {
props.form.validateFields([validateCard]);
setValidateCard('');
}
}, [validateCard, props.form]);
(0, _react.useEffect)(() => {
if (errorCommonFormFields.length > 0) {
const {
form_fields
} = formDetailData;
const valueInFields = [_CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD, _CommonFormConstants.FIELD_TYPE.DEBIT_CARD, _CommonFormConstants.FIELD_TYPE.XPC];
const noValueInFields = [_CommonFormConstants.FIELD_TYPE.K_PLUS_MOBILE_NO];
const needValueForField = form_fields === null || form_fields === void 0 ? void 0 : form_fields.filter(field => valueInFields.includes(field.type));
const notNeedValueForField = form_fields === null || form_fields === void 0 ? void 0 : form_fields.filter(field => noValueInFields.includes(field.type));
let newErrorArray = errorCommonFormFields.map(e => {
if (needValueForField.find(x => x.id === e.id)) {
let value = e.value || [];
return value.map(ele => {
return {
id: e.id,
value: ele.name,
input_data: ele.input_data
};
});
} else if (notNeedValueForField.find(x => x.id === e.id)) {
return {
id: e.id
};
} else {
return undefined;
}
});
let currentFieldsAndValues = props.form.getFieldsValue();
let arrayOfFieldsAndValues = Object.keys(currentFieldsAndValues).map(e => {
return {
field: e,
input_value: currentFieldsAndValues[e]
};
});
// filter out
newErrorArray = newErrorArray.filter(e => e !== undefined).flat().map(e => {
let x = arrayOfFieldsAndValues.filter(x => (x.field || '').includes("field-".concat(e.id).concat(!!e.value ? "-".concat(e.value) : "")) && e.input_data === x.input_value || e.value === undefined && e.input_data === undefined && x.field.includes("field-".concat(e.id)))[0] || undefined;
if (!!x) {
return {
id: e.id,
value: e.value,
input_data: e.input_data,
fieldname: x.field
};
} else {
return undefined;
}
});
let errorData = newErrorArray.filter(e => e !== undefined).flat().reduce((obj, item) => Object.assign(obj, {
[item.fieldname]: {
errors: [new Error(resolveLocale("ERROR_SPECIAL_FIELDS"))]
}
}), {});
props.form.setFields(errorData);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [errorCommonFormFields, formDetailData, resolveLocale]);
(0, _react.useEffect)(() => {
if (!!serviceList && !!isServiceNeeded) {
setIsServiceNeeded(false);
const SPECIAL_CARD_FIELD = [_CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD, _CommonFormConstants.FIELD_TYPE.DEBIT_CARD, _CommonFormConstants.FIELD_TYPE.XPC, _CommonFormConstants.FIELD_TYPE.OD];
const {
campaignId
} = campaign;
const {
form_fields
} = formDetailData;
const {
newCreditCardService = () => {},
debitCardService = () => {},
xpcCardService = () => {},
odCardService = () => {},
specialCardPopupService = () => {}
} = serviceList;
const needAPIField = form_fields === null || form_fields === void 0 ? void 0 : form_fields.filter(field => SPECIAL_CARD_FIELD.includes(field.type));
const getAllCard = needAPIField.map(field => {
const {
type,
allow_list,
disallow_list,
namepr,
id,
display_internal_data_field,
disallow_field_value,
disallow_field_name // for od card
} = field;
const data = {
allow_list: allow_list,
disallow_list: disallow_list,
namepr: namepr,
id: id,
internal_source_field: display_internal_data_field,
disallow_field_value: disallow_field_value,
disallow_field_name: disallow_field_name,
campaign_id: campaignId
};
if (type === _CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD) {
return newCreditCardService(data, () => {});
} else if (type === _CommonFormConstants.FIELD_TYPE.DEBIT_CARD) {
return debitCardService(data, () => {});
} else if (type === _CommonFormConstants.FIELD_TYPE.XPC) {
return xpcCardService(data, () => {});
} else if (type === _CommonFormConstants.FIELD_TYPE.OD) {
return odCardService(data, () => {});
} else {
return [];
}
});
Promise.all(getAllCard).then(cards => {
setSpecialCardList(cards);
}).catch(err => {
specialCardPopupService(err);
});
}
}, [serviceList, formDetailData, isServiceNeeded, setIsServiceNeeded, campaign]);
const handleFormSubmit = e => {
appOnActionLog({
screenName: _Constants.CONSTANTS.ACTION_SCREEN_NAME.CAMPAIGN_REGISTER_FORM,
eventCategory: _Constants.CONSTANTS.ACTION_EVENT_CATEGORY.CAMPAIGN,
eventActionType: _Constants.CONSTANTS.ACTION_TYPE.CLICK,
eventName: _Constants.CONSTANTS.ACTION_EVENT_NAME.COMMON_FORM_REGISTER_CAMPAIGN,
buttonText: locale === _Constants.CONSTANTS.EN ? labelRegisterButtonEn : labelRegisterButtonTh
});
e.preventDefault();
props.form.validateFields((err, values) => {
if (err) {
setFormErrors(_objectSpread({}, err));
}
values = handleSortTableValuesBasedOnFormOrder(values, form_fields);
const emptyRequiredFields = Object.keys(values).reduce((acc, item) => {
let initFieldName = item.slice(6);
form_fields.forEach(field => {
var _values;
if ((field.namepr === initFieldName || field.id === initFieldName) && field.required === "yes" && !((_values = values["field-".concat(isPreviewMode ? field.namepr : field.id)]) !== null && _values !== void 0 && _values.toString())) {
acc.push(isPreviewMode ? field.namepr : field.id);
}
});
return acc;
}, []);
const decoratorFields = [_CommonFormConstants.FIELD_TYPE.LINK, _CommonFormConstants.FIELD_TYPE.SECTION_HEAD, _CommonFormConstants.FIELD_TYPE.PARAGRAPH, _CommonFormConstants.FIELD_TYPE.PAGE_BREAK];
let allFieldsAreDecoration = true;
form_fields.forEach(field => {
if (!decoratorFields.includes(field.type)) {
allFieldsAreDecoration = false;
}
});
let isAllInputOrRequiredInputEmpty = true;
if (emptyRequiredFields.length > 0) {
isAllInputOrRequiredInputEmpty = true;
} else {
isAllInputOrRequiredInputEmpty = false;
}
if (isAllInputOrRequiredInputEmpty && !allFieldsAreDecoration) {
appOnPopupCommonForm();
}
if (allFieldsAreDecoration) {
appOnSubmitCommonForm({});
}
if (!(err || isAllInputOrRequiredInputEmpty)) {
appOnSubmitCommonForm(values);
}
});
};
const handleFormChange = e => {
e.preventDefault();
setFormErrors(props.form.getFieldsError());
};
const handleFieldOnChange = function handleFieldOnChange(propName, value) {
let time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
clearTimeout(fieldDelayTimer[propName]);
fieldDelayTimer[propName] = setTimeout(() => {
setFormValues(_objectSpread(_objectSpread({}, formValues), {}, {
[propName]: value
}));
clearTimeout(fieldDelayTimer[propName]);
delete fieldDelayTimer[propName];
}, time);
};
const handleSortTableValuesBasedOnFormOrder = (values, formFieldsEdit) => {
const specialCases = [_CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD, _CommonFormConstants.FIELD_TYPE.DEBIT_CARD, _CommonFormConstants.FIELD_TYPE.XPC];
let sortedValues = formFieldsEdit.reduce((acc, field) => {
Object.keys(values).forEach(key => {
let initKey = key.slice(6);
if (isPreviewMode) {
if (field.namepr === initKey) {
if (specialCases.includes(field.type)) {
let specialValue = [];
if (Array.isArray(values[key])) {
values[key].forEach(card_name => {
let card = card_name.split('-');
card.pop();
card = card.join('-');
let value = props.form.getFieldValue("field-".concat(field.namepr, "-").concat(card_name));
specialValue.push({
'card_name': card,
'value': value
});
});
} else if (values[key] === undefined) {
specialValue = [];
} else {
let card = values[key].split('-');
card.pop();
card = card.join('-');
let value = props.form.getFieldValue("field-".concat(field.namepr, "-").concat(values[key]));
specialValue.push({
'card_name': card,
'value': value
});
}
acc = _objectSpread(_objectSpread({}, acc), {}, {
[key]: specialValue
});
} else {
acc = _objectSpread(_objectSpread({}, acc), {}, {
[key]: values[key]
});
}
}
} else {
if (field.id === initKey) {
if (specialCases.includes(field.type)) {
let specialValue = [];
if (Array.isArray(values[key])) {
values[key].forEach(card_name => {
let card = card_name.split('-');
card.pop();
card = card.join('-');
let value = props.form.getFieldValue("field-".concat(field.id, "-").concat(card_name));
specialValue.push({
'card_name': card,
'value': value
});
});
} else if (values[key] === undefined) {
specialValue = undefined;
} else {
let card = values[key].split('-');
card.pop();
card = card.join('-');
let value = props.form.getFieldValue("field-".concat(field.id, "-").concat(values[key]));
specialValue.push({
'card_name': card,
'value': value
});
}
acc = _objectSpread(_objectSpread({}, acc), {}, {
[key]: specialValue
});
} else {
acc = _objectSpread(_objectSpread({}, acc), {}, {
[key]: values[key]
});
}
}
}
});
return acc;
}, {});
return sortedValues;
};
const getClassNameBasedOnViewMode = initClassName => {
return "".concat(initClassName, " ").concat(mode);
};
const getUploadedBackgroundImageSrc = (backgroundImageMobileFromServer, backgroundImageDesktopFromServer) => {
// backgroundImageMobileFromServer = backgroundImageMobileFromServer
// ? backgroundImageMobileFromServer
// : PREVIEW_BOX_BANNER.default;
// backgroundImageDesktopFromServer = backgroundImageDesktopFromServer
// ? backgroundImageDesktopFromServer
// : PREVIEW_BOX_BANNER.default;
let backgroundImgMobile, backgroundImgDesktop;
const {
backgroundImageDesktop,
backgroundImageMobile
} = formStylesEdit;
backgroundImgMobile = backgroundImageMobile !== null && backgroundImageMobile !== void 0 && backgroundImageMobile.url ? backgroundImageMobile.url : backgroundImageMobileFromServer;
backgroundImgDesktop = backgroundImageDesktop !== null && backgroundImageDesktop !== void 0 && backgroundImageDesktop.url ? backgroundImageDesktop.url : backgroundImageDesktopFromServer;
return {
backgroundImgMobile,
backgroundImgDesktop
};
};
const generateBodyStylesWithSpecialCases = (mode, backgroundImageAlignment, backgroundColor, backgroundImageDesktop, formVerticalAlignment) => {
let bodyStyle = {
// backgroundColor: backgroundColor
},
containerStyle = null,
addingSideStyle = null,
formStyle = null;
//Update background image from local
if (mode === "browser_desktop") {
// formStyle = {
// width: '100%'
// };
switch (true) {
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.CENTER && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.CENTER:
bodyStyle = _objectSpread({}, bodyStyle);
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.CENTER && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.RIGHT:
bodyStyle = _objectSpread({}, bodyStyle);
containerStyle = {
display: "flex",
flexDirection: "row-reverse"
};
formStyle = {
width: "560px"
};
addingSideStyle = {
width: "576px"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.CENTER && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.LEFT:
bodyStyle = _objectSpread({}, bodyStyle);
containerStyle = {
display: "flex",
flexDirection: "row"
};
formStyle = {
width: "560px"
};
addingSideStyle = {
width: "576px"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.TOP && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.CENTER:
bodyStyle = _objectSpread({}, bodyStyle);
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.TOP && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.LEFT:
bodyStyle = _objectSpread({}, bodyStyle);
// containerStyle = {
// display: 'flex',
// flexDirection: 'row'
// };
addingSideStyle = {
width: "100%"
};
formStyle = {
width: "50%"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.TOP && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.RIGHT:
bodyStyle = _objectSpread({}, bodyStyle);
addingSideStyle = {
width: "100%"
};
formStyle = {
width: "50%",
marginLeft: "auto"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.LEFT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.RIGHT:
bodyStyle = _objectSpread({}, bodyStyle);
formStyle = {
width: "560px"
};
containerStyle = {
display: "flex",
flexDirection: "row"
};
addingSideStyle = {
width: "576px"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.LEFT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.LEFT:
bodyStyle = _objectSpread({}, bodyStyle);
formStyle = {
width: "560px"
};
containerStyle = {
display: "flex",
flexDirection: "row-reverse"
};
addingSideStyle = {
width: "576px",
visibility: "hidden"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.LEFT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.CENTER:
bodyStyle = _objectSpread({}, bodyStyle);
addingSideStyle = {
display: "none"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.RIGHT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.LEFT:
bodyStyle = _objectSpread({}, bodyStyle);
formStyle = {
width: "560px"
};
containerStyle = {
display: "flex",
flexDirection: "row-reverse"
};
addingSideStyle = {
width: "576px"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.RIGHT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.RIGHT:
bodyStyle = _objectSpread({}, bodyStyle);
formStyle = {
width: "560px"
};
containerStyle = {
display: "flex",
flexDirection: "row"
};
addingSideStyle = {
width: "576px",
visibility: "hidden"
};
break;
case backgroundImageAlignment === IMAGE_ALIGNMENT_OPTION.RIGHT && formVerticalAlignment === FORM_VERTICAL_ALIGNMENT_OPTION.CENTER:
bodyStyle = _objectSpread({}, bodyStyle);
addingSideStyle = {
display: "none"
};
break;
default:
break;
}
}
return [bodyStyle, containerStyle, addingSideStyle, formStyle];
};
// const generateFormStyles = (
// formBackground,
// formBackgroundColor,
// textColor
// ) => {
// let style;
// switch (formBackground) {
// case FORM_BACKGROUND_OPTION.NONE:
// style = { backgroundColor: "transparent" };
// break;
// case FORM_BACKGROUND_OPTION.SOLID:
// style = { backgroundColor: formBackgroundColor };
// break;
// case FORM_BACKGROUND_OPTION.OVERLAY:
// style = {
// backgroundColor: formBackgroundColor,
// opacity: 0.8,
// };
// break;
// default:
// style = null;
// break;
// }
// return { ...style, color: textColor };
// };
const getOptionsData = function getOptionsData() {
let displayInternalDataSourceFlag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "no";
let options = arguments.length > 1 ? arguments[1] : undefined;
if ((displayInternalDataSourceFlag === "no" || displayInternalDataSourceFlag === "") && options) {
options = options.reduce((acc, option) => {
if (option.choiceTh && option.value) {
acc = [...acc, option];
}
return acc;
}, []);
return options;
}
return PREVIEW_MOCK_OPTIONS;
};
const range = (start, end) => {
const result = [];
for (let i = start; i < end; i++) {
result.push(i);
}
return result;
};
const getDisableTimeRange = (min, max) => {
if (typeof min == "object") {
min = (0, _moment.default)(min).format("HH:mm");
}
if (typeof max == "object") {
max = (0, _moment.default)(max).format("HH:mm");
}
if (min === "" && max !== "") {
const max_hour = parseInt(max.split(":")[0]);
const max_minute = parseInt(max.split(":")[1]);
return {
disableHours: () => {
return range(0, 24).filter(item => item > max_hour);
},
disableMinutes: selectedHour => {
if (selectedHour === max_hour) {
return range(0, 60).filter(item => item > max_minute);
}
return [];
}
};
} else if (min !== "" && max === "") {
const min_hour = parseInt(min.split(":")[0]);
const min_minute = parseInt(min.split(":")[1]);
return {
disableHours: () => {
return range(0, 24).filter(item => item < min_hour);
},
disableMinutes: selectedHour => {
if (selectedHour === min_hour) {
return range(0, 60).filter(item => item < min_minute);
}
return [];
}
};
} else if (min !== "" && max !== "") {
const min_hour = parseInt(min.split(":")[0]);
const min_minute = parseInt(min.split(":")[1]);
const max_hour = parseInt(max.split(":")[0]);
const max_minute = parseInt(max.split(":")[1]);
return {
disableHours: () => {
return range(0, 24).filter(item => item < min_hour || item > max_hour);
},
disableMinutes: selectedHour => {
if (selectedHour === min_hour && selectedHour === max_hour) {
return range(0, 60).filter(item => item < min_minute || item > max_minute);
}
if (selectedHour === min_hour) {
return range(0, 60).filter(item => item < min_minute);
}
if (selectedHour === max_hour) {
return range(0, 60).filter(item => item > max_minute);
}
if (selectedHour > min_hour && selectedHour < max_hour) {
return [];
}
return range(0, 60);
}
};
}
return {
disableHours: () => [],
disableMinutes: () => []
};
};
const getDisableDateRange = (min, max) => {
let defaultMinDate = (0, _moment.default)().toISOString().split('T')[0].split('-');
defaultMinDate[0] = (parseInt(defaultMinDate[0]) - 200).toString();
defaultMinDate = defaultMinDate.reverse().join('/');
let defaultMaxDate = (0, _moment.default)().toISOString().split('T')[0].split('-');
defaultMaxDate[0] = (parseInt(defaultMaxDate[0]) + 200).toString();
defaultMaxDate = defaultMaxDate.reverse().join('/');
const defaultMinDateMoment = (0, _moment.default)(defaultMinDate, _CommonFormConstants.CONSTANT.DATE_FORMAT);
const defaultMaxDateMoment = (0, _moment.default)(defaultMaxDate, _CommonFormConstants.CONSTANT.DATE_FORMAT).add(1, 'days');
if (!!min && !max) {
const minDate = (0, _moment.default)(min, _CommonFormConstants.CONSTANT.DATE_FORMAT);
return function disabledDate(current) {
return current && (current < minDate || current > defaultMaxDateMoment);
};
} else if (!min && !!max) {
const maxDate = (0, _moment.default)(max, _CommonFormConstants.CONSTANT.DATE_FORMAT).add(1, "days");
return function disabledDate(current) {
return current && (current < defaultMinDateMoment || current > maxDate);
};
} else if (!!min && !!max) {
const minDate = (0, _moment.default)(min, _CommonFormConstants.CONSTANT.DATE_FORMAT);
const maxDate = (0, _moment.default)(max, _CommonFormConstants.CONSTANT.DATE_FORMAT).add(1, "days");
return function disabledDate(current) {
return current && (current < minDate || current > maxDate);
};
}
return function disabledDate(current) {
return current && (current < defaultMinDateMoment || current > defaultMaxDateMoment);
};
};
const generateRules = function generateRules(type) {
let required = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "no";
let validatePatternFlag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "no";
let validatePatternOptions = arguments.length > 3 ? arguments[3] : undefined;
let validatePatternRegex = arguments.length > 4 ? arguments[4] : undefined;
let alertText = arguments.length > 5 ? arguments[5] : undefined;
let label = arguments.length > 6 ? arguments[6] : undefined;
let limitLength = arguments.length > 7 ? arguments[7] : undefined;
const specialCases = [_CommonFormConstants.FIELD_TYPE.DROPDOWN, _CommonFormConstants.FIELD_TYPE.FILE_UPLOADER, _CommonFormConstants.FIELD_TYPE.CHECK_BOX, _CommonFormConstants.FIELD_TYPE.RADIO, _CommonFormConstants.FIELD_TYPE.CREDIT_CARD_DROPDOWN, _CommonFormConstants.FIELD_TYPE.DATE, _CommonFormConstants.FIELD_TYPE.TIME, _CommonFormConstants.FIELD_TYPE.K_PLUS_MOBILE_NO, _CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD, _CommonFormConstants.FIELD_TYPE.DEBIT_CARD, _CommonFormConstants.FIELD_TYPE.XPC];
const SPECIAL_CARD = [_CommonFormConstants.FIELD_TYPE.NEW_CREDIT_CARD, _CommonFormConstants.FIELD_TYPE.DEBIT_CARD, _CommonFormConstants.FIELD_TYPE.XPC];
let validator = [],
validatedFunction;
if (!specialCases.includes(type) && validatePatternFlag === "yes") {
switch (validatePatternOptions) {
case INPUT_RULE.NUMBERS_ONLY:
validator.push(_objectSpread(_objectSpread({
pattern: /^[0-9]*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (!value && required === "yes") {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkOnlyNumbers(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_NUMBER", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkOnlyNumbers;
break;
// old case and not for setup later
case INPUT_RULE.LETTERS_ONLY:
validator.push(_objectSpread(_objectSpread({
pattern: /^[\u0E00-\u0E7Faa-zA-Z]*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (!value && required === "yes") {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkOnlyTextReal(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_ALPHA", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkOnlyTextReal;
break;
case INPUT_RULE.THAI_ONLY:
validator.push(_objectSpread(_objectSpread({
pattern: /^[\u0E00-\u0E7F\s]*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (!value && required === "yes") {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkOnlyTh(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_TH_ONLY", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkOnlyTh;
break;
case INPUT_RULE.ENGLISH_ONLY:
validator.push(_objectSpread(_objectSpread({
pattern: /^[-a-zA-Z\s]*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (!value && required === "yes") {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkOnlyEn(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_EN_ONLY", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkOnlyEn;
break;
case INPUT_RULE.THAI_AND_ENGLISH_ONLY:
validator.push(_objectSpread(_objectSpread({
pattern: /^(?:(?!<|>|\.\.\/|\.\.\\|[0-9]).)*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (required === "yes" && !value) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkOnlyThEn(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_TH_AND_EN_ONLY", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkOnlyThEn;
break;
case INPUT_RULE.ALLOW_ALL_EXCEPT_SOME_SPECIAL:
validator.push(_objectSpread(_objectSpread({
pattern: /^(?:(?!<|>|\.\.\/|\.\.\\).)*$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (required === "yes" && !value) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkAllowAllExceptSomeSpecial(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_FREE_TEXT_WITH_SOME_SPECIALS", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
validatedFunction = _actions.ACTIONS.checkAllowAllExceptSomeSpecial;
break;
case INPUT_RULE.EMAIL_FORMAT:
validator.push(_objectSpread(_objectSpread({
pattern: /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/
}, limitLength ? {
max: limitLength
} : {}), {}, {
required: required === "yes" ? true : false,
validator: (rule, value, callback) => {
if (required === "yes" && !value) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label));
} else if (value && !_actions.ACTIONS.checkEmailFormat(value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_EMAIL_FORMAT", label));
} else if (value && !_actions.ACTIONS.checkCustomRegEx(validatePatternRegex, value)) {
callback(alertText ? alertText : resolveFunctionLocale("FUNC_INVALID_PATTERN", label));
} else if ((value === null || value === void 0 ? void 0 : value.length) > limitLength) {
callback(resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength]));
} else {
callback();
}
}
}));
// validatedFunction = ACTIONS.checkEmailFormat; // we don't use this because it will not allow typing
break;
default:
validator = [];
validatedFunction = null;
break;
}
} else {
// Special Field Validation //
if (type === _CommonFormConstants.FIELD_TYPE.K_PLUS_MOBILE_NO) {
validator.push({
pattern: /^\d{10}$/,
message: alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_NUMBER", label)
});
}
// ------------------------ //
if (required === "yes") {
validator = [...validator, {
required: true,
message: alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT", label)
}];
}
if (limitLength && !SPECIAL_CARD.includes(type)) {
validator = [...validator, {
max: limitLength,
message: resolveFunctionLocale("FUNC_PLEASE_INPUT_WITH_LIMIT_LENGTH", [label, limitLength])
}];
}
}
return {
validator,
validatedFunction
};
};
const checkFormFieldShow = (flag, questionName, questionValue) => {
const typeOfQuestion = form_fields.reduce((acc, field) => {
if (field.name === questionName) {
acc = field.type;
}
return acc;
}, "");
if (flag === "yes") {
let status = true;
if (typeOfQuestion === _CommonFormConstants.FIELD_TYPE.CHECK_BOX && questionValue && questionValue.length > 0 && formValues) {
status = true;
questionValue.split(", ").forEach(value => {
var _formValues$questionN;
let trimmedValue = value.trim();
if (!((_formValues$questionN = formValues[questionName]) !== null && _formValues$questionN !== void 0 && _formValues$questionN.includes(trimmedValue))) {
status = false;
}
});
} else {
if (formValues) {
var _formValues$questionN2;
status = ((_formValues$questionN2 = formValues[questionName]) === null || _formValues$questionN2 === void 0 ? void 0 : _formValues$questionN2.toString()) === questionValue && questionValue && questionValue.length > 0 || !questionValue && formValues[questionName] && formValues[questionName].length > 0;
} else {
status = false;
}
}
let parentQuestion = form_fields.filter(e => e.name === questionName);
if (parentQuestion.length > 0) {
let currentParentQuestion = parentQuestion[0] || {};
let {
requiredQuestionFlag,
requiredQuestionName,
requiredQuestionValue
} = currentParentQuestion;
return status && checkFormFieldShow(requiredQuestionFlag, requiredQuestionName, requiredQuestionValue);
} else {
return status;
}
}
return true;
};
const getCardData = check => {
const cardList = specialCardList === null || specialCardList === void 0 ? void 0 : specialCardList.filter(card => isPreviewMode ? (card === null || card === void 0 ? void 0 : card.namepr) === check : (card === null || card === void 0 ? void 0 : card.id) === check);
if ((cardList === null || cardList === void 0 ? void 0 : cardList.length) > 0) {
var _cardList$;
if (((_cardList$ = cardList[0]) === null || _cardList$ === void 0 || (_cardList$ = _cardList$.card_list) === null || _cardList$ === void 0 ? void 0 : _cardList$.length) > 0) {
return cardList[0].card_list;
} else {
return [];
}
} else {
if (isPreviewMode) {
return PREVIEW_CARDS;
} else {
return [];
}
}
};
const renderFormItem = formItem => {
formItem = _actions.ACTIONS.convertUnderscoreToCamel(formItem);
let {
type,
namepr,
id,
name,
titleEn,
titleTh,
required,
helptextTh,
helptextEn,
alertTextTh,
alertTextEn,
placeholderEn,
placeholderTh,
size,
validatePatternOptions,
validatePatternRegex,
requiredQuestionFlag,
requiredQuestionName,
requiredQuestionValue,
validatePatternFlag,
accept,
minDate,
maxDate,
minTime,
maxTime,
displayInternalDataSourceFlag,
options,
defaultValue,
defaultTextEn,
defaultTextTh,
disallowFlag,
specialLength: limitLength,
textTh,
textEn,
textColor = "#4D4D4D",
linkTitleTh,
linkTitleEn,
linkNameTh,
linkNameEn,
linkThVersion,
linkEnVersion,
min = "",
max = "",
singleCardFlag
} = formItem;
let disableTimeFunctions = {};
if (type === _CommonFormConstants.FIELD_TYPE.TIME) {
minTime = min;
maxTime = max;
disableTimeFunctions = getDisableTimeRange(minTime, maxTime);
}
if (type === _CommonFormConstants.FIELD_TYPE.DATE) {
minDate = min;
maxDate = max;
}
const {
textColor: updatedColor
} = formStylesEdit;
const {
getFieldDecorator
} = props.form;
const lang = locale;
const label = lang === _Constants.CONSTANTS.EN ? titleEn : titleTh;
const placeholder = lang === _Constants.CONSTANTS.EN ? placeholderEn : placeholderTh;
const helpText = lang === _Constants.CONSTANTS.EN ? helptextEn : helptextTh;
const alertText = lang === _Constants.CONSTANTS.EN ? alertTextEn : alertTextTh;
const text = lang === _Constants.CONSTANTS.EN ? textEn : textTh;
size = size ? parseInt(size) : null;
options = getOptionsData(displayInternalDataSourceFlag, options, disallowFlag);
let cards = getCardData(isPreviewMode ? namepr : id);
const decoratorFields = [_CommonFormConstants.FIELD_TYPE.LINK, _CommonFormConstants.FIELD_TYPE.SECTION_HEAD, _CommonFormConstants.FIELD_TYPE.PARAGRAPH, _CommonFormConstants.FIELD_TYPE.PAGE_BREAK];
let formComponent;
const {
validator,
validatedFunction
} = generateRules(type, required, validatePatternFlag, validatePatternOptions, validatePatternRegex, alertText, label, limitLength);
const specialCardsRules = [{
required: true,
pattern: /^[0-9]*$/,
message: alertText ? alertText : resolveFunctionLocale("FUNC_PLEASE_INPUT_NUMBER", label),
validator: (rule, value, callback) => {
const {
message = ''
} = rule;
if (!value || value.length < 4) {
callback(message);
} else if (value && !_actions.ACTIONS.checkOnlyNumbers(value)) {
callback(message);
} else {
callback();
}
}
}];
switch (type) {
case _CommonFormConstants.FIELD_TYPE.TEXTBOX:
formComponent = mode === "mobile" ? /*#__PURE__*/_react.default.createElement(_CustomInput.default, {
className: "mobile-item-input",
validatedFunction: validatedFunction,
placeholder: placeholder,
maxLength: size,
onChange: _ref => {
let {
target: {
value
}
} = _ref;
return handleFieldOnChange(name, value, 1000);
}
}) : /*#__PURE__*/_react.default.createElement(_CustomInput.default, {
className: getClassNameBasedOnViewMode("item-input"),
validatedFunction: validatedFunction,
placeholder: placeholder,
maxLength: size,
onChange: _ref2 => {
let {
target: {
value
}
} = _ref2;
return handleFieldOnChange(name, value, 1000);
}
});
break;
case _CommonFormConstants.FIELD_TYPE.DROPDOWN:
formComponent = mode === "mobile" ? /*#__PURE__*/_react.default.createElement(_antd.Select, {
className: "mobile-item-select",
placeholder: lang === _Constants.CONSTANTS.EN ? defaultTextEn : defaultTextTh,
onChange: values => {
handleFieldOnChange(name, values);
// For fix issue this.state.formErrors not change when dropdown onChange
setFormErrors(_objectSpread(_objectSpread({}, formErrors), {}, {
["field-".concat(isPreviewMode ? namepr : id)]: undefined
}));
},
suffixIcon: /*#__PURE__*/_react.default.createElement(_antd.Icon, {
type: "down",
style: {
fontSize: 20
}
})
}, options.map((_ref3, index) => {
let {
choiceEn,
choiceTh,
value
} = _ref3;
return /*#__PURE__*/_react.default.createElement(Option, {
key: "".concat(choiceEn).concat(index),
value: value
}, lang === _Constants.CONSTANTS.EN ? choiceEn : choiceTh);
})) : /*#__PURE__*/_react.default.createElement(_antd.Select, {
className: getClassNameBasedOnViewMode("item-select"),
placeholder: lang === _Constants.CONSTANTS.EN ? defaultTextEn : defaultTextTh,
onChange: values => handleFieldOnChange(name, values)
}, options.map((_ref4, index) => {
let {
choiceEn,
choiceTh,
value
} = _ref4;
return /*#__PURE__*/_react.default.createElement(Option, {
key: "".concat(choiceEn).concat(index),
value: value
}, lang === _Constants.CONSTANTS.EN ? choiceEn : choiceTh);
}));
break;
case _CommonFormConstants.FIELD_TYPE.DATE:
formComponent = DatePickerComp ? /*#__PURE__*/_react.default.createElement(DatePickerComp, {
browserMode: mode,
name: name,
required: required,
lang: lang,
className: getClassNameBasedOnViewMode("item-datepicker"),
placeholder: resolveLocale("FORM_DETAIL_PREVIEW_POPUP_BOX_DATE_PLACEHOLDER"),
format: _CommonFormConstants.CONSTANT.DATE_FORMAT,
disabledDate: getDisableDateRange(minDate, maxDate),
initState: props.form.getFieldValue("field-".concat(isPreviewMode ? namepr : id)),
formProps: props.form,
formFieldName: "field-".concat(isPreviewMode ? namepr : id),
errorMsg: alertText,
handleTitleError: () => {
// For fix issue this.state.formErrors not change when dropdown onChange
setFormErrors(_objectSpread(_objectSpread({}, formErrors), {}, {
["field-".concat(isPreviewMode ? namepr : id)]: props.form.getFieldError("field-".concat(isPreviewMode ? namepr : id))
}));
}
}) : /*#__PURE__*/_react.default.createElement(_CustomDatePickerMobile.default, {
browserMode: mode,
name: name,
required: required,
lang: lang,
className: getClassNameBasedOnViewMode("item-datepicker"),
placeholder: resolveLocale("FORM_DETAIL_PREVIEW_POPUP_BOX_DATE_PLACEHOLDER"),
format: _CommonFormConstants.CONSTANT.DATE_FORMAT,
disabledDate: getDisableDateRange(minDate, maxDate),
initState: props.form.getFieldValue("field-".concat(isPreviewMode ? namepr : id)