tp-react-elements-dev 1.9.0 → 1.10.2

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) {
@@ -62282,6 +62376,16 @@ const useFormValidatingContext = (formArray) => {
62282
62376
  }
62283
62377
  renderCustomError(field);
62284
62378
  break;
62379
+ case "checkbox-group":
62380
+ initialValues[field.name] = "";
62381
+ if (field.required && field.errorMessage) {
62382
+ validationShape[field.name] = create$6()
62383
+ .typeError(`Select ${field.label}`)
62384
+ .required(field.errorMessage);
62385
+ renderCustomError(field);
62386
+ }
62387
+ renderCustomError(field);
62388
+ break;
62285
62389
  case "multiselect":
62286
62390
  initialValues[field.name] = null;
62287
62391
  if (field.required && field.errorMessage) {