UNPKG

adminjs

Version:
45 lines (42 loc) 1.75 kB
export const FORM_VALUE_NULL = '__FORM_VALUE_NULL__'; export const FORM_VALUE_EMPTY_OBJECT = '__FORM_VALUE_EMPTY_OBJECT__'; export const FORM_VALUE_EMPTY_ARRAY = '__FORM_VALUE_EMPTY_ARRAY__'; const isObjectOrArray = value => typeof value === 'object' && value.constructor !== File && !(value instanceof Date); /** * Changes RecordJSON that it can be send as a FormData to the backend. * * FormData is required because we are sending files via the wire. But it has limitations. * Namely it can only transport files and strings. That is why we have to convert some * standard types like NULL to constants so they can be property converted back by the backend. * And thus properly handled. * * @private * @param {RecordJSON} record * @return {FormData} */ function paramsToFormData(params) { const formData = new FormData(); // Assume that params are flatted Object.entries(params).forEach(([key, value]) => { // {@link updateRecord} does not change empty objects "{}" - so in order to prevent having // them changed to "[object Object]" we have to set them to empty strings. if (value === null) { return formData.set(key, FORM_VALUE_NULL); } // File objects has to go through because they are handled by FormData if (isObjectOrArray(value)) { if (Array.isArray(value)) { return formData.set(key, FORM_VALUE_EMPTY_ARRAY); } return formData.set(key, FORM_VALUE_EMPTY_OBJECT); } // Convert Date fields to UTC timezone if (value instanceof Date) { return formData.set(key, value.toISOString()); } // Rest goes as a standard value return formData.set(key, value); }); return formData; } export { paramsToFormData as default, paramsToFormData };