@phpsoftbox/forms 1.0.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.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @phpsoftbox/forms
2
+ Компонент для отрисовки форм из компонентов:
3
+ - https://github.com/phpsoftbox/forms
4
+ - https://github.com/phpsoftbox/db-config
5
+ - https://github.com/phpsoftbox/requisites
6
+
7
+ React-утилиты для рендера schema-driven форм поверх `@phpsoftbox/react-softbox`.
8
+
9
+ ## Экспорт
10
+
11
+ - `DynamicFormFields`
12
+ - `buildDynamicFormData`
13
+ - `isDynamicFieldRequired`
14
+ - `isDynamicValueFilled`
15
+ - вспомогательные типы/хелперы
@@ -0,0 +1,53 @@
1
+ export type DynamicFormFieldOption = {
2
+ label: string;
3
+ value: string | number;
4
+ };
5
+ export type DynamicFormFieldCondition = Record<string, unknown>;
6
+ export type DynamicFormFieldType = 'text' | 'textarea' | 'email' | 'tel' | 'password' | 'file' | 'checkbox' | 'select' | 'radio' | 'number' | 'date' | 'interval' | 'hidden';
7
+ export type DynamicFormValueType = 'string' | 'int' | 'float' | 'bool' | 'array' | 'json' | 'date' | 'datetime';
8
+ export type DynamicFormField = {
9
+ key: string;
10
+ label?: string;
11
+ description?: string;
12
+ required?: boolean;
13
+ field?: DynamicFormFieldType;
14
+ fieldType?: DynamicFormFieldType;
15
+ valueType?: DynamicFormValueType;
16
+ multiple?: boolean;
17
+ searchable?: boolean;
18
+ options?: DynamicFormFieldOption[];
19
+ requiredWhen?: DynamicFormFieldCondition[];
20
+ visibleWhen?: DynamicFormFieldCondition[];
21
+ meta?: Record<string, unknown>;
22
+ };
23
+ export type DynamicFormSchema = {
24
+ id?: string;
25
+ title?: string;
26
+ fields: DynamicFormField[];
27
+ meta?: Record<string, unknown>;
28
+ };
29
+ export type DynamicFormValue = string | number | boolean | null | File | Array<string | number | File>;
30
+ export type DynamicFormData = Record<string, DynamicFormValue>;
31
+ type DynamicFormFieldsProps = {
32
+ schema: DynamicFormSchema;
33
+ data: DynamicFormData;
34
+ errors?: Record<string, unknown>;
35
+ onChange: (key: string, value: DynamicFormValue) => void;
36
+ groupBySection?: boolean;
37
+ sectionLabels?: Record<string, string>;
38
+ sectionClassName?: string;
39
+ sectionTitleClassName?: string;
40
+ fieldClassName?: string;
41
+ labelClassName?: string;
42
+ descriptionClassName?: string;
43
+ };
44
+ export declare const resolveDynamicFieldType: (field: DynamicFormField) => DynamicFormFieldType;
45
+ export declare const resolveDynamicFieldOptions: (field: DynamicFormField) => DynamicFormFieldOption[];
46
+ export declare const resolveDynamicFieldSection: (field: DynamicFormField) => string;
47
+ export declare const isDynamicFieldVisible: (field: DynamicFormField, data: DynamicFormData) => boolean;
48
+ export declare const isDynamicFieldRequired: (field: DynamicFormField, data: DynamicFormData) => boolean;
49
+ export declare const coerceDynamicInitialValue: (field: DynamicFormField, value: unknown) => DynamicFormValue;
50
+ export declare const buildDynamicFormData: (schema: DynamicFormSchema, values: Record<string, unknown>) => DynamicFormData;
51
+ export declare const isDynamicValueFilled: (value: DynamicFormValue | undefined) => boolean;
52
+ export default function DynamicFormFields({ schema, data, errors, onChange, groupBySection, sectionLabels, sectionClassName, sectionTitleClassName, fieldClassName, labelClassName, descriptionClassName, }: DynamicFormFieldsProps): import("react/jsx-runtime").JSX.Element;
53
+ export {};
@@ -0,0 +1,218 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Input, Stack, Text } from '@phpsoftbox/react-softbox';
4
+ const normalizeFieldError = (error) => {
5
+ if (typeof error === 'string') {
6
+ return error;
7
+ }
8
+ if (Array.isArray(error)) {
9
+ const first = error.find((item) => typeof item === 'string');
10
+ return typeof first === 'string' ? first : '';
11
+ }
12
+ return '';
13
+ };
14
+ export const resolveDynamicFieldType = (field) => {
15
+ const widget = typeof field.meta?.widget === 'string' ? field.meta.widget : '';
16
+ if (widget === 'file') {
17
+ return 'file';
18
+ }
19
+ return field.fieldType ?? field.field ?? 'text';
20
+ };
21
+ export const resolveDynamicFieldOptions = (field) => {
22
+ if (Array.isArray(field.options)) {
23
+ return field.options;
24
+ }
25
+ const metaOptions = field.meta?.options;
26
+ return Array.isArray(metaOptions) ? metaOptions : [];
27
+ };
28
+ export const resolveDynamicFieldSection = (field) => {
29
+ const section = field.meta?.section;
30
+ return typeof section === 'string' && section !== '' ? section : 'general';
31
+ };
32
+ const normalizeCondition = (condition) => {
33
+ const fieldName = condition.field;
34
+ if (typeof fieldName === 'string' && fieldName !== '') {
35
+ const operator = typeof condition.operator === 'string' && condition.operator !== '' ? condition.operator : '=';
36
+ return [{ field: fieldName, operator, value: condition.value }];
37
+ }
38
+ return Object.entries(condition)
39
+ .filter(([key]) => key !== 'field' && key !== 'operator' && key !== 'value')
40
+ .map(([key, value]) => ({ field: key, operator: '=', value }));
41
+ };
42
+ const matchesCondition = (condition, data) => {
43
+ const entries = normalizeCondition(condition);
44
+ if (entries.length === 0) {
45
+ return false;
46
+ }
47
+ return entries.every(({ field, operator, value }) => {
48
+ const actual = data[field];
49
+ if (operator === '=') {
50
+ return actual === value;
51
+ }
52
+ if (operator === '!=') {
53
+ return actual !== value;
54
+ }
55
+ if (operator === 'in') {
56
+ return Array.isArray(value) ? value.includes(actual) : false;
57
+ }
58
+ if (operator === 'not_in') {
59
+ return Array.isArray(value) ? !value.includes(actual) : false;
60
+ }
61
+ return false;
62
+ });
63
+ };
64
+ const conditionsMatch = (conditions, data) => {
65
+ if (!Array.isArray(conditions) || conditions.length === 0) {
66
+ return true;
67
+ }
68
+ return conditions.every((condition) => matchesCondition(condition, data));
69
+ };
70
+ export const isDynamicFieldVisible = (field, data) => {
71
+ return conditionsMatch(field.visibleWhen, data);
72
+ };
73
+ export const isDynamicFieldRequired = (field, data) => {
74
+ const baseRequired = field.required === true || field.meta?.required === true;
75
+ const requiredWhenMatches = Array.isArray(field.requiredWhen) && field.requiredWhen.length > 0
76
+ ? conditionsMatch(field.requiredWhen, data)
77
+ : false;
78
+ return baseRequired || requiredWhenMatches;
79
+ };
80
+ export const coerceDynamicInitialValue = (field, value) => {
81
+ const fieldType = resolveDynamicFieldType(field);
82
+ if (fieldType === 'checkbox' || field.valueType === 'bool') {
83
+ return Boolean(value);
84
+ }
85
+ if (fieldType === 'number' || field.valueType === 'int' || field.valueType === 'float') {
86
+ return value === null || value === undefined ? '' : String(value);
87
+ }
88
+ if (fieldType === 'file') {
89
+ return typeof value === 'string' ? value : null;
90
+ }
91
+ if (fieldType === 'select' && field.multiple) {
92
+ return Array.isArray(value) ? value : [];
93
+ }
94
+ if (fieldType === 'date') {
95
+ return typeof value === 'string' ? value : '';
96
+ }
97
+ return typeof value === 'string' || typeof value === 'number' ? value : '';
98
+ };
99
+ export const buildDynamicFormData = (schema, values) => {
100
+ const data = {};
101
+ schema.fields.forEach((field) => {
102
+ if (typeof field?.key !== 'string' || field.key === '') {
103
+ return;
104
+ }
105
+ data[field.key] = coerceDynamicInitialValue(field, values[field.key]);
106
+ });
107
+ return data;
108
+ };
109
+ export const isDynamicValueFilled = (value) => {
110
+ if (value === null || value === undefined) {
111
+ return false;
112
+ }
113
+ if (typeof value === 'boolean') {
114
+ return true;
115
+ }
116
+ if (typeof value === 'number') {
117
+ return true;
118
+ }
119
+ if (value instanceof File) {
120
+ return true;
121
+ }
122
+ if (Array.isArray(value)) {
123
+ return value.length > 0;
124
+ }
125
+ return String(value).trim() !== '';
126
+ };
127
+ const defaultSectionLabel = (section) => {
128
+ return section === 'general' ? 'Общие данные' : section;
129
+ };
130
+ export default function DynamicFormFields({ schema, data, errors = {}, onChange, groupBySection = false, sectionLabels = {}, sectionClassName, sectionTitleClassName, fieldClassName, labelClassName, descriptionClassName, }) {
131
+ const visibleFields = React.useMemo(() => {
132
+ return (schema.fields ?? [])
133
+ .filter((field) => typeof field?.key === 'string' && field.key !== '')
134
+ .filter((field) => isDynamicFieldVisible(field, data));
135
+ }, [schema.fields, data]);
136
+ const renderField = (field) => {
137
+ const fieldType = resolveDynamicFieldType(field);
138
+ const required = isDynamicFieldRequired(field, data);
139
+ const label = field.label ?? field.key;
140
+ const description = field.description ?? '';
141
+ const error = normalizeFieldError(errors[field.key]);
142
+ const hasError = error !== '';
143
+ const tooltip = typeof field.meta?.tooltip === 'string' ? field.meta.tooltip : undefined;
144
+ if (fieldType === 'hidden') {
145
+ return _jsx("input", { type: "hidden", name: field.key, value: String(data[field.key] ?? '') }, field.key);
146
+ }
147
+ if (fieldType === 'file') {
148
+ const currentValue = data[field.key];
149
+ const selectedFiles = Array.isArray(currentValue)
150
+ ? currentValue.filter((value) => value instanceof File)
151
+ : [];
152
+ const selectedFile = currentValue instanceof File ? currentValue : null;
153
+ const currentPath = typeof currentValue === 'string' ? currentValue : '';
154
+ const accept = typeof field.meta?.accept === 'string' ? field.meta.accept : undefined;
155
+ const requiredForInput = required && currentPath === '' && selectedFile === null && selectedFiles.length === 0;
156
+ return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.Label, { required: required, children: label }), _jsx(Input.Field, { name: field.key, type: "file", required: requiredForInput, multiple: field.multiple === true, accept: accept, onChange: (event) => {
157
+ const files = event.target.files;
158
+ if (field.multiple) {
159
+ onChange(field.key, files ? Array.from(files) : []);
160
+ return;
161
+ }
162
+ onChange(field.key, files?.[0] ?? null);
163
+ } }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), selectedFile ? _jsxs(Text, { className: descriptionClassName, children: ["\u0412\u044B\u0431\u0440\u0430\u043D \u0444\u0430\u0439\u043B: ", selectedFile.name] }) : null, !selectedFile && selectedFiles.length > 0 ? (_jsxs(Text, { className: descriptionClassName, children: ["\u0412\u044B\u0431\u0440\u0430\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432: ", selectedFiles.length] })) : null, currentPath !== '' ? _jsxs(Text, { className: descriptionClassName, children: ["\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043B: ", currentPath] }) : null, description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
164
+ }
165
+ if (fieldType === 'checkbox') {
166
+ const widget = typeof field.meta?.widget === 'string' ? field.meta.widget : '';
167
+ return (_jsxs("div", { className: fieldClassName, children: [widget === 'checkbox' ? (_jsx(Input.Checkbox, { name: field.key, label: label, checked: Boolean(data[field.key]), onChange: (event) => onChange(field.key, event.target.checked) })) : (_jsx(Input.Switch, { name: field.key, label: label, checked: Boolean(data[field.key]), hint: tooltip, hintPlacement: "auto", onChange: (event) => onChange(field.key, event.target.checked) })), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null, hasError ? _jsx(Input.ErrorBag, { children: error }) : null] }, field.key));
168
+ }
169
+ if (fieldType === 'select') {
170
+ const options = resolveDynamicFieldOptions(field);
171
+ if (field.multiple) {
172
+ const selected = Array.isArray(data[field.key]) ? data[field.key] : [];
173
+ return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Select, { name: field.key, options: options, value: selected, multiple: true, searchable: Boolean(field.searchable), onChange: (value) => onChange(field.key, value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
174
+ }
175
+ const selected = data[field.key];
176
+ const selectedValue = typeof selected === 'string' || typeof selected === 'number'
177
+ ? selected
178
+ : undefined;
179
+ return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Select, { name: field.key, options: options, value: selectedValue, searchable: Boolean(field.searchable), onChange: (value) => onChange(field.key, value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
180
+ }
181
+ if (fieldType === 'radio') {
182
+ const options = resolveDynamicFieldOptions(field);
183
+ return (_jsxs("div", { className: fieldClassName, children: [_jsx(Text, { className: labelClassName, children: label }), _jsx(Stack, { gap: "8px", children: options.map((option) => (_jsx(Input.Radio, { name: field.key, label: option.label, checked: data[field.key] === option.value, onChange: () => onChange(field.key, option.value) }, `${field.key}-${option.value}`))) }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null, hasError ? _jsx(Input.ErrorBag, { children: error }) : null] }, field.key));
184
+ }
185
+ if (fieldType === 'textarea') {
186
+ return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.TextArea, { name: field.key, value: String(data[field.key] ?? ''), onChange: (event) => onChange(field.key, event.target.value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
187
+ }
188
+ const inputType = (() => {
189
+ if (fieldType === 'number') {
190
+ return 'number';
191
+ }
192
+ if (fieldType === 'date') {
193
+ return 'date';
194
+ }
195
+ if (fieldType === 'email' || fieldType === 'tel' || fieldType === 'password') {
196
+ return fieldType;
197
+ }
198
+ return 'text';
199
+ })();
200
+ return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Field, { name: field.key, type: inputType, required: required, value: String(data[field.key] ?? ''), onChange: (event) => onChange(field.key, event.target.value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
201
+ };
202
+ if (!groupBySection) {
203
+ return _jsx(_Fragment, { children: visibleFields.map(renderField) });
204
+ }
205
+ const grouped = visibleFields.reduce((carry, field) => {
206
+ const section = resolveDynamicFieldSection(field);
207
+ const title = sectionLabels[section] ?? defaultSectionLabel(section);
208
+ const index = carry.findIndex((item) => item.section === section);
209
+ if (index === -1) {
210
+ carry.push({ section, title, fields: [field] });
211
+ return carry;
212
+ }
213
+ carry[index].fields.push(field);
214
+ return carry;
215
+ }, []);
216
+ return (_jsx(_Fragment, { children: grouped.map((group) => (_jsxs("section", { className: sectionClassName, children: [_jsx(Text, { className: sectionTitleClassName, children: group.title }), _jsx(Stack, { gap: "12px", children: group.fields.map(renderField) })] }, group.section))) }));
217
+ }
218
+ //# sourceMappingURL=DynamicFormFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicFormFields.js","sourceRoot":"","sources":["../src/DynamicFormFields.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default as DynamicFormFields, resolveDynamicFieldType, resolveDynamicFieldOptions, resolveDynamicFieldSection, isDynamicFieldVisible, isDynamicFieldRequired, coerceDynamicInitialValue, buildDynamicFormData, isDynamicValueFilled, } from './DynamicFormFields';
2
+ export type { DynamicFormFieldOption, DynamicFormFieldCondition, DynamicFormFieldType, DynamicFormValueType, DynamicFormField, DynamicFormSchema, DynamicFormValue, DynamicFormData, } from './DynamicFormFields';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { default as DynamicFormFields, resolveDynamicFieldType, resolveDynamicFieldOptions, resolveDynamicFieldSection, isDynamicFieldVisible, isDynamicFieldRequired, coerceDynamicInitialValue, buildDynamicFormData, isDynamicValueFilled, } from './DynamicFormFields';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,iBAAiB,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@phpsoftbox/forms",
3
+ "version": "1.0.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "peerDependencies": {
20
+ "react": "^19.0.0",
21
+ "react-dom": "^19.0.0",
22
+ "@phpsoftbox/react-softbox": "^0.9.0"
23
+ },
24
+ "scripts": {
25
+ "clean": "rm -rf dist",
26
+ "build": "tsc -p tsconfig.build.json",
27
+ "prepublishOnly": "yarn clean && yarn build"
28
+ },
29
+ "devDependencies": {
30
+ "@phpsoftbox/react-softbox": "^0.9.0",
31
+ "@types/react": "^19.2.0",
32
+ "@types/react-dom": "^19.2.0",
33
+ "react": "^19.2.4",
34
+ "react-dom": "^19.2.4",
35
+ "typescript": "^5.9.3"
36
+ }
37
+ }