UNPKG

@explita/daily-toolset-form

Version:

A lightweight form toolkit for React built with developer ergonomics in mind. Includes a flexible Form component, useForm, useField, and useFormContext hooks for managing form state and validation with ease. Designed to simplify complex forms while remain

112 lines (111 loc) 4.51 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.Field = void 0; exports.useFieldName = useFieldName; const react_1 = __importStar(require("react")); const __1 = require("../"); const FieldContext = (0, react_1.createContext)(null); function useFieldName() { const fieldContext = (0, react_1.use)(FieldContext); if (!fieldContext) { return { name: "", label: "", isRequired: false, hasError: false, }; } return fieldContext; } function FieldComponent({ name, label, as, isRequired, hideError = false, className, children, }) { const form = (0, __1.useField)(name); const field = form.register; const value = form.fieldValue; const error = form.fieldError; const hasFieldError = error && (error === null || error === void 0 ? void 0 : error.length) > 0 ? true : false; const hasError = !hideError && hasFieldError; const setValue = form.setValue; const isBoolean = as === "checkbox"; const fieldContextValue = { name: name === null || name === void 0 ? void 0 : name.toString(), label, isRequired, hasError, }; const meta = { value, error, hasError: hasFieldError !== null && hasFieldError !== void 0 ? hasFieldError : false, }; if (isBoolean) { return (react_1.default.createElement(FieldContext.Provider, { value: fieldContextValue }, children({ ...field, defaultChecked: !!value, onCheckedChange: (val) => { setValue(val); }, }, meta))); } if (as === "select" || as === "date") { return (react_1.default.createElement(FieldContext.Provider, { value: fieldContextValue }, react_1.default.createElement("div", { "data-slot": "field", style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, className: className }, react_1.default.createElement(ShowLabel, null), children({ ...field, value: value ? String(value) : undefined, onValueChange: (val) => { setValue(val); }, "data-input-error": hasError, }, meta), hasError && react_1.default.createElement(__1.ErrorMessage, null)))); } return (react_1.default.createElement(FieldContext.Provider, { value: fieldContextValue }, react_1.default.createElement("div", { "data-slot": "field", style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, className: className }, react_1.default.createElement(ShowLabel, null), children({ ...field, "data-input-error": hasError, }, meta), hasError && react_1.default.createElement(__1.ErrorMessage, null)))); } exports.Field = react_1.default.memo(FieldComponent); function ShowLabel() { const { label } = useFieldName(); if (!label) return; return react_1.default.createElement(__1.Label, null, label); }