@wix/headless-forms 0.0.1 → 0.0.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.
- package/cjs/dist/react/Form.d.ts +2 -2
- package/cjs/dist/react/Form.js +25 -107
- package/cjs/dist/react/types.d.ts +1 -1
- package/cjs/dist/services/form-service.js +1 -1
- package/dist/react/Form.d.ts +2 -2
- package/dist/react/Form.js +26 -105
- package/dist/react/types.d.ts +1 -1
- package/dist/services/form-service.js +1 -1
- package/package.json +2 -1
package/cjs/dist/react/Form.d.ts
CHANGED
|
@@ -563,7 +563,7 @@ export interface FieldsProps {
|
|
|
563
563
|
* };
|
|
564
564
|
* ```
|
|
565
565
|
*/
|
|
566
|
-
export declare const Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<
|
|
566
|
+
export declare const Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<HTMLDivElement>>;
|
|
567
567
|
/**
|
|
568
568
|
* Main Form namespace containing all form components following the compound component pattern.
|
|
569
569
|
* Provides a headless, flexible way to render and manage forms with custom field components.
|
|
@@ -627,6 +627,6 @@ export declare const Form: {
|
|
|
627
627
|
/** Form submitted state component */
|
|
628
628
|
readonly Submitted: React.ForwardRefExoticComponent<SubmittedProps & React.RefAttributes<HTMLElement>>;
|
|
629
629
|
/** Form fields component for rendering form fields */
|
|
630
|
-
readonly Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<
|
|
630
|
+
readonly Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<HTMLDivElement>>;
|
|
631
631
|
};
|
|
632
632
|
export {};
|
package/cjs/dist/react/Form.js
CHANGED
|
@@ -32,15 +32,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.Form = exports.Fields = exports.Submitted = exports.Error = exports.LoadingError = exports.Loading = exports.Root = void 0;
|
|
40
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
41
|
-
const react_1 =
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
42
39
|
const react_2 = require("@wix/headless-utils/react");
|
|
43
|
-
const
|
|
40
|
+
const services_manager_react_1 = require("@wix/services-manager-react");
|
|
41
|
+
const form_public_1 = require("@wix/form-public");
|
|
42
|
+
const form_service_1 = require("../services/form-service");
|
|
43
|
+
const CoreForm = __importStar(require("./core/Form"));
|
|
44
44
|
var TestIds;
|
|
45
45
|
(function (TestIds) {
|
|
46
46
|
TestIds["formRoot"] = "form-root";
|
|
@@ -114,7 +114,7 @@ exports.Root = react_1.default.forwardRef((props, ref) => {
|
|
|
114
114
|
*/
|
|
115
115
|
const RootContent = react_1.default.forwardRef((props, ref) => {
|
|
116
116
|
const { asChild, children, className, ...otherProps } = props;
|
|
117
|
-
return ((0, jsx_runtime_1.jsx)(react_2.AsChildSlot, { ref: ref, asChild: asChild, className: className, "data-testid": TestIds.formRoot, customElement: children, customElementProps: {}, ...otherProps, children: (0, jsx_runtime_1.jsx)("div", { children:
|
|
117
|
+
return ((0, jsx_runtime_1.jsx)(react_2.AsChildSlot, { ref: ref, asChild: asChild, className: className, "data-testid": TestIds.formRoot, customElement: children, customElementProps: {}, ...otherProps, children: (0, jsx_runtime_1.jsx)("div", { children: children }) }));
|
|
118
118
|
});
|
|
119
119
|
/**
|
|
120
120
|
* Component that renders content during loading state.
|
|
@@ -483,108 +483,26 @@ exports.Submitted = react_1.default.forwardRef((props, ref) => {
|
|
|
483
483
|
* };
|
|
484
484
|
* ```
|
|
485
485
|
*/
|
|
486
|
-
exports.Fields = react_1.default.forwardRef(({ fieldMap }) => {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
// CONTACTS_FIELD_TYPES
|
|
494
|
-
CONTACTS_COMPANY: fieldMap.TEXT_INPUT,
|
|
495
|
-
CONTACTS_POSITION: fieldMap.TEXT_INPUT,
|
|
496
|
-
CONTACTS_TAX_ID: fieldMap.TEXT_INPUT,
|
|
497
|
-
CONTACTS_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
498
|
-
CONTACTS_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
499
|
-
CONTACTS_EMAIL: fieldMap.TEXT_INPUT,
|
|
500
|
-
CONTACTS_BIRTHDATE: fieldMap.DATE_INPUT,
|
|
501
|
-
CONTACTS_PHONE: fieldMap.PHONE_INPUT,
|
|
502
|
-
CONTACTS_ADDRESS: fieldMap.TEXT_INPUT,
|
|
503
|
-
CONTACTS_SUBSCRIBE: fieldMap.CHECKBOX,
|
|
504
|
-
// QUIZ_FIELD_TYPES
|
|
505
|
-
QUIZ_MULTI_CHOICE: fieldMap.CHECKBOX_GROUP,
|
|
506
|
-
QUIZ_SINGLE_CHOICE: fieldMap.RADIO_GROUP,
|
|
507
|
-
QUIZ_SHORT_TEXT: fieldMap.TEXT_INPUT,
|
|
508
|
-
QUIZ_LONG_TEXT: fieldMap.TEXT_AREA,
|
|
509
|
-
QUIZ_NUMBER: fieldMap.NUMBER_INPUT,
|
|
510
|
-
QUIZ_FILE_UPLOAD: fieldMap.FILE_UPLOAD,
|
|
511
|
-
QUIZ_IMAGE_CHOICE: fieldMap.IMAGE_CHOICE, // TODO: add
|
|
512
|
-
// DEXT_FIELD_TYPES
|
|
513
|
-
DEXT_TEXT_INPUT: fieldMap.TEXT_INPUT,
|
|
514
|
-
DEXT_TEXT_AREA: fieldMap.TEXT_AREA,
|
|
515
|
-
DEXT_DROPDOWN: fieldMap.DROPDOWN,
|
|
516
|
-
DEXT_URL_INPUT: fieldMap.TEXT_INPUT,
|
|
517
|
-
DEXT_RADIO_GROUP: fieldMap.RADIO_GROUP,
|
|
518
|
-
DEXT_NUMBER_INPUT: fieldMap.NUMBER_INPUT,
|
|
519
|
-
DEXT_CHECKBOX: fieldMap.CHECKBOX,
|
|
520
|
-
DEXT_CHECKBOX_GROUP: fieldMap.CHECKBOX_GROUP,
|
|
521
|
-
DEXT_EMAIL: fieldMap.TEXT_INPUT,
|
|
522
|
-
DEXT_PHONE: fieldMap.PHONE_INPUT,
|
|
523
|
-
DEXT_RATING_INPUT: fieldMap.RATING_INPUT,
|
|
524
|
-
DEXT_DATE_PICKER: fieldMap.DATE_PICKER,
|
|
525
|
-
DEXT_TAGS: fieldMap.TAGS,
|
|
526
|
-
// SCHEDULING_FIELD_TYPES
|
|
527
|
-
APPOINTMENT: fieldMap.APPOINTMENT,
|
|
528
|
-
SERVICES_DROPDOWN: fieldMap.DROPDOWN,
|
|
529
|
-
// ECOM_FIELD_TYPES
|
|
530
|
-
ECOM_ADDITIONAL_INFO: fieldMap.TEXT_AREA,
|
|
531
|
-
ECOM_ADDRESS: fieldMap.TEXT_INPUT,
|
|
532
|
-
ECOM_FULL_NAME: fieldMap.TEXT_INPUT,
|
|
533
|
-
ECOM_PHONE: fieldMap.PHONE_INPUT,
|
|
534
|
-
ECOM_COMPANY_NAME: fieldMap.TEXT_INPUT,
|
|
535
|
-
ECOM_EMAIL: fieldMap.TEXT_INPUT,
|
|
536
|
-
ECOM_SUBSCRIPTION: fieldMap.CHECKBOX,
|
|
537
|
-
// BOOKINGS_FIELD_TYPES
|
|
538
|
-
BOOKINGS_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
539
|
-
BOOKINGS_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
540
|
-
BOOKINGS_EMAIL: fieldMap.TEXT_INPUT,
|
|
541
|
-
BOOKINGS_PHONE: fieldMap.PHONE_INPUT,
|
|
542
|
-
BOOKINGS_ADDRESS: fieldMap.TEXT_INPUT,
|
|
543
|
-
// PAYMENTS_FIELD_TYPES
|
|
544
|
-
PRODUCT_LIST: fieldMap.PRODUCT_LIST,
|
|
545
|
-
DONATION: fieldMap.DONATION,
|
|
546
|
-
PAYMENT_INPUT: fieldMap.PAYMENT_INPUT, // could be TEXT_INPUT?
|
|
547
|
-
FIXED_PAYMENT: fieldMap.FIXED_PAYMENT, // could be TAGS?
|
|
548
|
-
// COMMON_FIELD_TYPES
|
|
549
|
-
TEXT_INPUT: fieldMap.TEXT_INPUT,
|
|
550
|
-
NUMBER_INPUT: fieldMap.NUMBER_INPUT,
|
|
551
|
-
URL_INPUT: fieldMap.TEXT_INPUT,
|
|
552
|
-
TEXT_AREA: fieldMap.TEXT_AREA,
|
|
553
|
-
DATE_INPUT: fieldMap.DATE_INPUT,
|
|
554
|
-
DATE_TIME_INPUT: fieldMap.DATE_TIME_INPUT,
|
|
555
|
-
TIME_INPUT: fieldMap.TIME_INPUT,
|
|
556
|
-
RADIO_GROUP: fieldMap.RADIO_GROUP,
|
|
557
|
-
CHECKBOX_GROUP: fieldMap.CHECKBOX_GROUP,
|
|
558
|
-
FILE_UPLOAD: fieldMap.FILE_UPLOAD,
|
|
559
|
-
CHECKBOX: fieldMap.CHECKBOX,
|
|
560
|
-
DROPDOWN: fieldMap.DROPDOWN,
|
|
561
|
-
// NESTED_FORM: 'NESTED_FORM',
|
|
562
|
-
MULTILINE_ADDRESS: fieldMap.MULTILINE_ADDRESS,
|
|
563
|
-
// are these relevant for headless?
|
|
564
|
-
MLA_COUNTRY: fieldMap.DROPDOWN,
|
|
565
|
-
MLA_CITY: fieldMap.TEXT_INPUT,
|
|
566
|
-
MLA_ADDRESS_LINE: fieldMap.TEXT_INPUT, // dropdown if autocomplete disabled?
|
|
567
|
-
MLA_ADDRESS_LINE_2: fieldMap.TEXT_INPUT,
|
|
568
|
-
MLA_POSTAL_CODE: fieldMap.TEXT_INPUT,
|
|
569
|
-
MLA_SUBDIVISION: fieldMap.DROPDOWN,
|
|
570
|
-
MLA_STREET_NAME: fieldMap.TEXT_INPUT,
|
|
571
|
-
MLA_STREET_NUMBER: fieldMap.TEXT_INPUT,
|
|
572
|
-
MLA_APARTMENT: fieldMap.TEXT_INPUT,
|
|
573
|
-
FULL_NAME_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
574
|
-
FULL_NAME_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
575
|
-
FULL_NAME: fieldMap.TEXT_INPUT,
|
|
576
|
-
VAT_ID: fieldMap.TEXT_INPUT,
|
|
577
|
-
SIGNATURE: fieldMap.SIGNATURE,
|
|
578
|
-
RATING_INPUT: fieldMap.RATING_INPUT,
|
|
579
|
-
TAGS: fieldMap.TAGS,
|
|
580
|
-
DATE_PICKER: fieldMap.DATE_PICKER,
|
|
581
|
-
// READONLY_FIELD_TYPES
|
|
582
|
-
HEADER: fieldMap.TEXT,
|
|
583
|
-
RICH_TEXT: fieldMap.TEXT,
|
|
584
|
-
SUBMIT_BUTTON: fieldMap.SUBMIT_BUTTON,
|
|
486
|
+
exports.Fields = react_1.default.forwardRef(({ fieldMap }, ref) => {
|
|
487
|
+
const formService = (0, services_manager_react_1.useService)(form_service_1.FormServiceDefinition);
|
|
488
|
+
const form = formService.form.get();
|
|
489
|
+
const _form = {
|
|
490
|
+
...form,
|
|
491
|
+
id: form?._id,
|
|
492
|
+
fields: form?.formFields?.map((field) => ({ ...field, id: field._id })),
|
|
585
493
|
};
|
|
586
|
-
|
|
587
|
-
|
|
494
|
+
const [formValues, setFormValues] = (0, react_1.useState)({});
|
|
495
|
+
const [formErrors, setFormErrors] = (0, react_1.useState)([]);
|
|
496
|
+
const handleFormChange = (0, react_1.useCallback)((values) => {
|
|
497
|
+
setFormValues(values);
|
|
498
|
+
}, []);
|
|
499
|
+
const handleFormValidate = (0, react_1.useCallback)((errors) => {
|
|
500
|
+
setFormErrors(errors);
|
|
501
|
+
}, []);
|
|
502
|
+
if (!form)
|
|
503
|
+
return (0, jsx_runtime_1.jsx)("div", { children: "Form not found, oops!" });
|
|
504
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: ref, children: (0, jsx_runtime_1.jsx)(form_public_1.Form, { form: _form, values: formValues, onChange: handleFormChange, errors: formErrors, onValidate: handleFormValidate, fields: fieldMap }) }));
|
|
505
|
+
});
|
|
588
506
|
/**
|
|
589
507
|
* Main Form namespace containing all form components following the compound component pattern.
|
|
590
508
|
* Provides a headless, flexible way to render and manage forms with custom field components.
|
|
@@ -786,7 +786,7 @@ export interface DateInputProps extends BaseFieldProps {
|
|
|
786
786
|
label: string;
|
|
787
787
|
showLabel: boolean;
|
|
788
788
|
showPlaceholder: boolean;
|
|
789
|
-
|
|
789
|
+
showDateLabels: boolean;
|
|
790
790
|
acceptedDates: 'all' | 'past' | 'future';
|
|
791
791
|
description?: forms.RichContent;
|
|
792
792
|
}
|
package/dist/react/Form.d.ts
CHANGED
|
@@ -563,7 +563,7 @@ export interface FieldsProps {
|
|
|
563
563
|
* };
|
|
564
564
|
* ```
|
|
565
565
|
*/
|
|
566
|
-
export declare const Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<
|
|
566
|
+
export declare const Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<HTMLDivElement>>;
|
|
567
567
|
/**
|
|
568
568
|
* Main Form namespace containing all form components following the compound component pattern.
|
|
569
569
|
* Provides a headless, flexible way to render and manage forms with custom field components.
|
|
@@ -627,6 +627,6 @@ export declare const Form: {
|
|
|
627
627
|
/** Form submitted state component */
|
|
628
628
|
readonly Submitted: React.ForwardRefExoticComponent<SubmittedProps & React.RefAttributes<HTMLElement>>;
|
|
629
629
|
/** Form fields component for rendering form fields */
|
|
630
|
-
readonly Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<
|
|
630
|
+
readonly Fields: React.ForwardRefExoticComponent<FieldsProps & React.RefAttributes<HTMLDivElement>>;
|
|
631
631
|
};
|
|
632
632
|
export {};
|
package/dist/react/Form.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import React from 'react';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useCallback, useState } from 'react';
|
|
3
3
|
import { AsChildSlot } from '@wix/headless-utils/react';
|
|
4
|
-
import
|
|
4
|
+
import { useService } from '@wix/services-manager-react';
|
|
5
|
+
import { Form as FormViewer, } from '@wix/form-public';
|
|
6
|
+
import { FormServiceDefinition, } from '../services/form-service';
|
|
7
|
+
import * as CoreForm from './core/Form';
|
|
5
8
|
var TestIds;
|
|
6
9
|
(function (TestIds) {
|
|
7
10
|
TestIds["formRoot"] = "form-root";
|
|
@@ -75,7 +78,7 @@ export const Root = React.forwardRef((props, ref) => {
|
|
|
75
78
|
*/
|
|
76
79
|
const RootContent = React.forwardRef((props, ref) => {
|
|
77
80
|
const { asChild, children, className, ...otherProps } = props;
|
|
78
|
-
return (_jsx(AsChildSlot, { ref: ref, asChild: asChild, className: className, "data-testid": TestIds.formRoot, customElement: children, customElementProps: {}, ...otherProps, children: _jsx("div", { children:
|
|
81
|
+
return (_jsx(AsChildSlot, { ref: ref, asChild: asChild, className: className, "data-testid": TestIds.formRoot, customElement: children, customElementProps: {}, ...otherProps, children: _jsx("div", { children: children }) }));
|
|
79
82
|
});
|
|
80
83
|
/**
|
|
81
84
|
* Component that renders content during loading state.
|
|
@@ -444,108 +447,26 @@ export const Submitted = React.forwardRef((props, ref) => {
|
|
|
444
447
|
* };
|
|
445
448
|
* ```
|
|
446
449
|
*/
|
|
447
|
-
export const Fields = React.forwardRef(({ fieldMap }) => {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
// CONTACTS_FIELD_TYPES
|
|
455
|
-
CONTACTS_COMPANY: fieldMap.TEXT_INPUT,
|
|
456
|
-
CONTACTS_POSITION: fieldMap.TEXT_INPUT,
|
|
457
|
-
CONTACTS_TAX_ID: fieldMap.TEXT_INPUT,
|
|
458
|
-
CONTACTS_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
459
|
-
CONTACTS_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
460
|
-
CONTACTS_EMAIL: fieldMap.TEXT_INPUT,
|
|
461
|
-
CONTACTS_BIRTHDATE: fieldMap.DATE_INPUT,
|
|
462
|
-
CONTACTS_PHONE: fieldMap.PHONE_INPUT,
|
|
463
|
-
CONTACTS_ADDRESS: fieldMap.TEXT_INPUT,
|
|
464
|
-
CONTACTS_SUBSCRIBE: fieldMap.CHECKBOX,
|
|
465
|
-
// QUIZ_FIELD_TYPES
|
|
466
|
-
QUIZ_MULTI_CHOICE: fieldMap.CHECKBOX_GROUP,
|
|
467
|
-
QUIZ_SINGLE_CHOICE: fieldMap.RADIO_GROUP,
|
|
468
|
-
QUIZ_SHORT_TEXT: fieldMap.TEXT_INPUT,
|
|
469
|
-
QUIZ_LONG_TEXT: fieldMap.TEXT_AREA,
|
|
470
|
-
QUIZ_NUMBER: fieldMap.NUMBER_INPUT,
|
|
471
|
-
QUIZ_FILE_UPLOAD: fieldMap.FILE_UPLOAD,
|
|
472
|
-
QUIZ_IMAGE_CHOICE: fieldMap.IMAGE_CHOICE, // TODO: add
|
|
473
|
-
// DEXT_FIELD_TYPES
|
|
474
|
-
DEXT_TEXT_INPUT: fieldMap.TEXT_INPUT,
|
|
475
|
-
DEXT_TEXT_AREA: fieldMap.TEXT_AREA,
|
|
476
|
-
DEXT_DROPDOWN: fieldMap.DROPDOWN,
|
|
477
|
-
DEXT_URL_INPUT: fieldMap.TEXT_INPUT,
|
|
478
|
-
DEXT_RADIO_GROUP: fieldMap.RADIO_GROUP,
|
|
479
|
-
DEXT_NUMBER_INPUT: fieldMap.NUMBER_INPUT,
|
|
480
|
-
DEXT_CHECKBOX: fieldMap.CHECKBOX,
|
|
481
|
-
DEXT_CHECKBOX_GROUP: fieldMap.CHECKBOX_GROUP,
|
|
482
|
-
DEXT_EMAIL: fieldMap.TEXT_INPUT,
|
|
483
|
-
DEXT_PHONE: fieldMap.PHONE_INPUT,
|
|
484
|
-
DEXT_RATING_INPUT: fieldMap.RATING_INPUT,
|
|
485
|
-
DEXT_DATE_PICKER: fieldMap.DATE_PICKER,
|
|
486
|
-
DEXT_TAGS: fieldMap.TAGS,
|
|
487
|
-
// SCHEDULING_FIELD_TYPES
|
|
488
|
-
APPOINTMENT: fieldMap.APPOINTMENT,
|
|
489
|
-
SERVICES_DROPDOWN: fieldMap.DROPDOWN,
|
|
490
|
-
// ECOM_FIELD_TYPES
|
|
491
|
-
ECOM_ADDITIONAL_INFO: fieldMap.TEXT_AREA,
|
|
492
|
-
ECOM_ADDRESS: fieldMap.TEXT_INPUT,
|
|
493
|
-
ECOM_FULL_NAME: fieldMap.TEXT_INPUT,
|
|
494
|
-
ECOM_PHONE: fieldMap.PHONE_INPUT,
|
|
495
|
-
ECOM_COMPANY_NAME: fieldMap.TEXT_INPUT,
|
|
496
|
-
ECOM_EMAIL: fieldMap.TEXT_INPUT,
|
|
497
|
-
ECOM_SUBSCRIPTION: fieldMap.CHECKBOX,
|
|
498
|
-
// BOOKINGS_FIELD_TYPES
|
|
499
|
-
BOOKINGS_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
500
|
-
BOOKINGS_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
501
|
-
BOOKINGS_EMAIL: fieldMap.TEXT_INPUT,
|
|
502
|
-
BOOKINGS_PHONE: fieldMap.PHONE_INPUT,
|
|
503
|
-
BOOKINGS_ADDRESS: fieldMap.TEXT_INPUT,
|
|
504
|
-
// PAYMENTS_FIELD_TYPES
|
|
505
|
-
PRODUCT_LIST: fieldMap.PRODUCT_LIST,
|
|
506
|
-
DONATION: fieldMap.DONATION,
|
|
507
|
-
PAYMENT_INPUT: fieldMap.PAYMENT_INPUT, // could be TEXT_INPUT?
|
|
508
|
-
FIXED_PAYMENT: fieldMap.FIXED_PAYMENT, // could be TAGS?
|
|
509
|
-
// COMMON_FIELD_TYPES
|
|
510
|
-
TEXT_INPUT: fieldMap.TEXT_INPUT,
|
|
511
|
-
NUMBER_INPUT: fieldMap.NUMBER_INPUT,
|
|
512
|
-
URL_INPUT: fieldMap.TEXT_INPUT,
|
|
513
|
-
TEXT_AREA: fieldMap.TEXT_AREA,
|
|
514
|
-
DATE_INPUT: fieldMap.DATE_INPUT,
|
|
515
|
-
DATE_TIME_INPUT: fieldMap.DATE_TIME_INPUT,
|
|
516
|
-
TIME_INPUT: fieldMap.TIME_INPUT,
|
|
517
|
-
RADIO_GROUP: fieldMap.RADIO_GROUP,
|
|
518
|
-
CHECKBOX_GROUP: fieldMap.CHECKBOX_GROUP,
|
|
519
|
-
FILE_UPLOAD: fieldMap.FILE_UPLOAD,
|
|
520
|
-
CHECKBOX: fieldMap.CHECKBOX,
|
|
521
|
-
DROPDOWN: fieldMap.DROPDOWN,
|
|
522
|
-
// NESTED_FORM: 'NESTED_FORM',
|
|
523
|
-
MULTILINE_ADDRESS: fieldMap.MULTILINE_ADDRESS,
|
|
524
|
-
// are these relevant for headless?
|
|
525
|
-
MLA_COUNTRY: fieldMap.DROPDOWN,
|
|
526
|
-
MLA_CITY: fieldMap.TEXT_INPUT,
|
|
527
|
-
MLA_ADDRESS_LINE: fieldMap.TEXT_INPUT, // dropdown if autocomplete disabled?
|
|
528
|
-
MLA_ADDRESS_LINE_2: fieldMap.TEXT_INPUT,
|
|
529
|
-
MLA_POSTAL_CODE: fieldMap.TEXT_INPUT,
|
|
530
|
-
MLA_SUBDIVISION: fieldMap.DROPDOWN,
|
|
531
|
-
MLA_STREET_NAME: fieldMap.TEXT_INPUT,
|
|
532
|
-
MLA_STREET_NUMBER: fieldMap.TEXT_INPUT,
|
|
533
|
-
MLA_APARTMENT: fieldMap.TEXT_INPUT,
|
|
534
|
-
FULL_NAME_FIRST_NAME: fieldMap.TEXT_INPUT,
|
|
535
|
-
FULL_NAME_LAST_NAME: fieldMap.TEXT_INPUT,
|
|
536
|
-
FULL_NAME: fieldMap.TEXT_INPUT,
|
|
537
|
-
VAT_ID: fieldMap.TEXT_INPUT,
|
|
538
|
-
SIGNATURE: fieldMap.SIGNATURE,
|
|
539
|
-
RATING_INPUT: fieldMap.RATING_INPUT,
|
|
540
|
-
TAGS: fieldMap.TAGS,
|
|
541
|
-
DATE_PICKER: fieldMap.DATE_PICKER,
|
|
542
|
-
// READONLY_FIELD_TYPES
|
|
543
|
-
HEADER: fieldMap.TEXT,
|
|
544
|
-
RICH_TEXT: fieldMap.TEXT,
|
|
545
|
-
SUBMIT_BUTTON: fieldMap.SUBMIT_BUTTON,
|
|
450
|
+
export const Fields = React.forwardRef(({ fieldMap }, ref) => {
|
|
451
|
+
const formService = useService(FormServiceDefinition);
|
|
452
|
+
const form = formService.form.get();
|
|
453
|
+
const _form = {
|
|
454
|
+
...form,
|
|
455
|
+
id: form?._id,
|
|
456
|
+
fields: form?.formFields?.map((field) => ({ ...field, id: field._id })),
|
|
546
457
|
};
|
|
547
|
-
|
|
548
|
-
|
|
458
|
+
const [formValues, setFormValues] = useState({});
|
|
459
|
+
const [formErrors, setFormErrors] = useState([]);
|
|
460
|
+
const handleFormChange = useCallback((values) => {
|
|
461
|
+
setFormValues(values);
|
|
462
|
+
}, []);
|
|
463
|
+
const handleFormValidate = useCallback((errors) => {
|
|
464
|
+
setFormErrors(errors);
|
|
465
|
+
}, []);
|
|
466
|
+
if (!form)
|
|
467
|
+
return _jsx("div", { children: "Form not found, oops!" });
|
|
468
|
+
return (_jsx("div", { ref: ref, children: _jsx(FormViewer, { form: _form, values: formValues, onChange: handleFormChange, errors: formErrors, onValidate: handleFormValidate, fields: fieldMap }) }));
|
|
469
|
+
});
|
|
549
470
|
/**
|
|
550
471
|
* Main Form namespace containing all form components following the compound component pattern.
|
|
551
472
|
* Provides a headless, flexible way to render and manage forms with custom field components.
|
package/dist/react/types.d.ts
CHANGED
|
@@ -786,7 +786,7 @@ export interface DateInputProps extends BaseFieldProps {
|
|
|
786
786
|
label: string;
|
|
787
787
|
showLabel: boolean;
|
|
788
788
|
showPlaceholder: boolean;
|
|
789
|
-
|
|
789
|
+
showDateLabels: boolean;
|
|
790
790
|
acceptedDates: 'all' | 'past' | 'future';
|
|
791
791
|
description?: forms.RichContent;
|
|
792
792
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/headless-forms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run build:esm && npm run build:cjs",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"vitest": "^3.1.4"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
+
"@wix/form-public": "^0.9.0",
|
|
44
45
|
"@wix/forms": "^1.0.292",
|
|
45
46
|
"@wix/headless-utils": "0.0.3",
|
|
46
47
|
"@wix/services-definitions": "^0.1.4",
|