tp-react-elements-dev 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FormRenderProps } from "../FormRender";
|
|
2
|
+
declare const FormRenderMultiFileUpload: ({ props, variant, }: {
|
|
3
|
+
props: FormRenderProps;
|
|
4
|
+
variant: "standard" | "outlined" | "";
|
|
5
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export default FormRenderMultiFileUpload;
|
|
@@ -12,7 +12,7 @@ interface TextFieldInputProps {
|
|
|
12
12
|
export interface FormSectionPropsItem {
|
|
13
13
|
name: string;
|
|
14
14
|
label: string;
|
|
15
|
-
inputType: "text" | "password" | "number" | "select" | "datepicker" | "multiselect" | "select-v2" | "register-number" | "decimal" | "alpha-numerical" | "yearpicker" | "dateRangePicker" | "monthpicker" | "multiselect" | "file" | "textarea" | "phoneNumber" | "pincode" | "email" | "toggleSwitch" | "rich-text-editor" | "multiEmail" | "timepicker" | "checkbox-group" | "";
|
|
15
|
+
inputType: "text" | "password" | "number" | "select" | "datepicker" | "multiselect" | "select-v2" | "register-number" | "decimal" | "alpha-numerical" | "yearpicker" | "dateRangePicker" | "monthpicker" | "multiselect" | "file" | "multifile" | "textarea" | "phoneNumber" | "pincode" | "email" | "toggleSwitch" | "rich-text-editor" | "multiEmail" | "timepicker" | "checkbox-group" | "";
|
|
16
16
|
options?: OptionsProps[];
|
|
17
17
|
required?: boolean;
|
|
18
18
|
errorMessage?: string;
|
|
@@ -36,7 +36,7 @@ export interface FormSectionPropsItem {
|
|
|
36
36
|
sx?: SxProps<Theme>;
|
|
37
37
|
donotAllowSpace?: boolean;
|
|
38
38
|
onInputProps?: (e: React.FocusEvent<HTMLInputElement>) => void;
|
|
39
|
-
fileType?: "excel" | "pdf" | "all" | "";
|
|
39
|
+
fileType?: "excel" | "pdf" | "all" | "image" | "";
|
|
40
40
|
handleFileError?: (message: string) => void;
|
|
41
41
|
doNotAllowPaste?: boolean;
|
|
42
42
|
removeButtons?: string;
|
package/dist/index.esm.js
CHANGED
|
@@ -59232,6 +59232,79 @@ function TimePickerFieldWrapper({ props, }) {
|
|
|
59232
59232
|
}, label: props.variant === "standard" ? "" : props.item.label, disabled: props.item.disable, slotProps: { textField: { readOnly: true, size: "small" } } }))] })) }), jsxRuntimeExports.jsx(ErrorMessageComponent, { children: jsxRuntimeExports.jsx(s, { errors: props.errors, name: props.item.name }) })] })));
|
|
59233
59233
|
}
|
|
59234
59234
|
|
|
59235
|
+
const FormRenderMultiFileUpload = ({ props, variant, }) => {
|
|
59236
|
+
var _a;
|
|
59237
|
+
useEffect(() => {
|
|
59238
|
+
if (props.getValues(props.item.name) === null ||
|
|
59239
|
+
props.getValues(props.item.name) === undefined) {
|
|
59240
|
+
const element = document.getElementById(props.item.name);
|
|
59241
|
+
console.log(element, "elementelement");
|
|
59242
|
+
if (element) {
|
|
59243
|
+
element.value = ""; // Ensure it's an input element
|
|
59244
|
+
}
|
|
59245
|
+
}
|
|
59246
|
+
}, [props.getValues(props.item.name)]);
|
|
59247
|
+
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs(Box, Object.assign({ paddingLeft: "4px", sx: Object.assign({}, props.item.sx) }, { children: [((_a = props.item) === null || _a === void 0 ? void 0 : _a.label) && (jsxRuntimeExports.jsx(Box, Object.assign({ sx: { fontSize: "10px;" } }, { children: renderLabel(variant, props) }))), jsxRuntimeExports.jsx(TextField, { type: "file", id: props.item.name, inputProps: {
|
|
59248
|
+
multiple: true,
|
|
59249
|
+
accept: props.item.fileType === "excel"
|
|
59250
|
+
? ".xls,.xlsx"
|
|
59251
|
+
: props.item.fileType === "pdf"
|
|
59252
|
+
? ".pdf"
|
|
59253
|
+
: props.item.fileType === "image"
|
|
59254
|
+
? ".jpg,.jpeg,.png"
|
|
59255
|
+
: props.item.fileType === "all"
|
|
59256
|
+
? ".pdf,.jpg,.jpeg,.png,.xls,.xlsx,.doc,.docx"
|
|
59257
|
+
: "",
|
|
59258
|
+
}, onChange: (event) => {
|
|
59259
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
59260
|
+
const file = event.target.files;
|
|
59261
|
+
const fileName = file && file.length > 0
|
|
59262
|
+
? Array.from(file)
|
|
59263
|
+
.map((item) => item.name)
|
|
59264
|
+
.join(",")
|
|
59265
|
+
: null;
|
|
59266
|
+
console.log(file, "filefile", file.length, fileName);
|
|
59267
|
+
const allowedExtensions = {
|
|
59268
|
+
excel: ["xls", "xlsx"],
|
|
59269
|
+
pdf: ["pdf"],
|
|
59270
|
+
image: ["jpg", "jpeg", "png"],
|
|
59271
|
+
all: ["pdf", "jpg", "jpeg", "png", "xls", "xlsx", "doc", "docx"],
|
|
59272
|
+
};
|
|
59273
|
+
const fileExtension = fileName
|
|
59274
|
+
? fileName.split(".").pop().toLowerCase()
|
|
59275
|
+
: null;
|
|
59276
|
+
const validExtensions = props.item.fileType === "excel"
|
|
59277
|
+
? allowedExtensions.excel
|
|
59278
|
+
: props.item.fileType === "pdf"
|
|
59279
|
+
? allowedExtensions.pdf
|
|
59280
|
+
: props.item.fileType === "image"
|
|
59281
|
+
? allowedExtensions.image
|
|
59282
|
+
: allowedExtensions.all;
|
|
59283
|
+
if (((_a = props.item) === null || _a === void 0 ? void 0 : _a.fileType) &&
|
|
59284
|
+
fileExtension &&
|
|
59285
|
+
!validExtensions.includes(fileExtension)) {
|
|
59286
|
+
((_b = props.item) === null || _b === void 0 ? void 0 : _b.handleFileError) &&
|
|
59287
|
+
((_c = props.item) === null || _c === void 0 ? void 0 : _c.handleFileError(`Please upload ${allowedExtensions[props.item.fileType].join(",")} Files only`));
|
|
59288
|
+
event.target.value = ""; // Clear the file input\
|
|
59289
|
+
props.setValue((_d = props.item) === null || _d === void 0 ? void 0 : _d.name, null);
|
|
59290
|
+
props.setValue(((_e = props.item) === null || _e === void 0 ? void 0 : _e.name) + "Name", "");
|
|
59291
|
+
return;
|
|
59292
|
+
}
|
|
59293
|
+
else if (event.target.files[event.target.files.length - 1].size > 20000000) {
|
|
59294
|
+
((_f = props.item) === null || _f === void 0 ? void 0 : _f.handleFileError) &&
|
|
59295
|
+
((_g = props.item) === null || _g === void 0 ? void 0 : _g.handleFileError(`File size should be less than 20MB`));
|
|
59296
|
+
event.target.files = null; // Clear the file input
|
|
59297
|
+
props.setValue((_h = props.item) === null || _h === void 0 ? void 0 : _h.name, null);
|
|
59298
|
+
props.setValue(((_j = props.item) === null || _j === void 0 ? void 0 : _j.name) + "File", []);
|
|
59299
|
+
return;
|
|
59300
|
+
}
|
|
59301
|
+
const fileArray = Array.from(file);
|
|
59302
|
+
console.log(fileArray, 'fileArrayfileArray');
|
|
59303
|
+
props.setValue((_k = props.item) === null || _k === void 0 ? void 0 : _k.name, fileName);
|
|
59304
|
+
props.setValue(((_l = props.item) === null || _l === void 0 ? void 0 : _l.name) + "File", fileArray);
|
|
59305
|
+
}, sx: { width: "100%" } })] })), jsxRuntimeExports.jsx(ErrorMessageComponent, { children: jsxRuntimeExports.jsx(s, { errors: props.errors, name: props.item.name }) })] }));
|
|
59306
|
+
};
|
|
59307
|
+
|
|
59235
59308
|
// export const renderLabel = (
|
|
59236
59309
|
// label: string,
|
|
59237
59310
|
// isRequired?: boolean,
|
|
@@ -59643,6 +59716,8 @@ const RenderForm = (props) => {
|
|
|
59643
59716
|
return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: jsxRuntimeExports.jsx(MultiSelectV1, { props: props, variant: variant }) }));
|
|
59644
59717
|
case "file":
|
|
59645
59718
|
return jsxRuntimeExports.jsx(FormRenderFileUpload, { props: props, variant: variant });
|
|
59719
|
+
case "multifile":
|
|
59720
|
+
return jsxRuntimeExports.jsx(FormRenderMultiFileUpload, { props: props, variant: variant });
|
|
59646
59721
|
case "textarea":
|
|
59647
59722
|
return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: jsxRuntimeExports.jsx(Controller, { control: props.control, name: props.item.name, render: ({ field }) => (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [renderLabel(variant, props), jsxRuntimeExports.jsx(TextField, Object.assign({ multiline: true, size: "small", InputProps: {
|
|
59648
59723
|
style: {
|
|
@@ -62179,6 +62254,25 @@ const useFormValidatingContext = (formArray) => {
|
|
|
62179
62254
|
}
|
|
62180
62255
|
renderCustomError(field);
|
|
62181
62256
|
break;
|
|
62257
|
+
case "multifile":
|
|
62258
|
+
initialValues[field.name] = null;
|
|
62259
|
+
if (field.required && field.errorMessage) {
|
|
62260
|
+
validationShape[field.name] = create$6()
|
|
62261
|
+
.test("hasAtLeastOneFile", field.errorMessage, (value) => {
|
|
62262
|
+
if (!value)
|
|
62263
|
+
return false;
|
|
62264
|
+
// Split by comma, trim, and filter out empty values
|
|
62265
|
+
const files = value
|
|
62266
|
+
.split(",")
|
|
62267
|
+
.map((f) => f.trim())
|
|
62268
|
+
.filter((f) => f !== "");
|
|
62269
|
+
return files.length > 0;
|
|
62270
|
+
})
|
|
62271
|
+
.required(field.errorMessage);
|
|
62272
|
+
renderCustomError(field);
|
|
62273
|
+
}
|
|
62274
|
+
renderCustomError(field);
|
|
62275
|
+
break;
|
|
62182
62276
|
case "number":
|
|
62183
62277
|
initialValues[field.name] = null;
|
|
62184
62278
|
if (field.required && field.errorMessage) {
|