Skip to content

Commit 732158c

Browse files
committed
sf-required class for required inputs
1 parent 2018836 commit 732158c

File tree

10 files changed

+47
-32
lines changed

10 files changed

+47
-32
lines changed

build/components/component-for-type.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import React from "react";
22
import { ISchemaContainerProps } from "components/schema-form-interfaces";
33
declare function ComponentForTypeInner(props: ISchemaContainerProps): React.ReactElement;
44
export declare const ComponentForType: React.MemoExoticComponent<typeof ComponentForTypeInner>;
5-
declare function SchemaFormComponentGenericInner({ schema, path, value, errors, onFocus, onBlur, onEditor, context }: ISchemaContainerProps): React.ReactElement;
5+
declare function SchemaFormComponentGenericInner({ schema, path, value, isRequired, errors, onFocus, onBlur, onEditor, context }: ISchemaContainerProps): React.ReactElement;
66
export declare const SchemaFormComponentGeneric: React.MemoExoticComponent<typeof SchemaFormComponentGenericInner>;
77
export {};

build/components/schema-form-interfaces.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export interface ISchemaContainerProps {
55
schema: object;
66
path: string[];
77
value: object;
8+
isRequired?: boolean;
89
errors: ErrorObject | Ajv.ErrorObject[];
910
onFocus(path: string[]): void;
1011
onBlur(path: string[]): void;
@@ -15,6 +16,7 @@ export interface ISchemaComponentProps {
1516
schema: object;
1617
path: string[];
1718
value: any;
19+
isRequired?: boolean;
1820
errors: Ajv.ErrorObject[];
1921
onFocus(path: string[]): void;
2022
onBlur(path: string[]): void;

build/index.es.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24979,12 +24979,13 @@ function valueReducer(oldValue, action) {
2497924979
}
2498024980

2498124981
var SchemaFormComponentWrapper = function (_a) {
24982-
var errors = _a.errors, caption = _a.caption, children = _a.children, schema = _a.schema;
24982+
var errors = _a.errors, caption = _a.caption, children = _a.children, schema = _a.schema, isRequired = _a.isRequired;
2498324983
var isError = errors.length > 0;
24984-
var errorClass = isError ? "sf-has-error" : "";
24984+
var errorClass = isError ? "sf-has-error " : "";
24985+
var requiredClass = isRequired ? "sf-required" : "";
2498524986
return (React.createElement(React.Fragment, null,
2498624987
React.createElement("div", { className: "sf-row" },
24987-
caption && React.createElement("label", { htmlFor: name, className: "sf-caption " + errorClass },
24988+
caption && React.createElement("label", { htmlFor: name, className: "sf-caption " + errorClass + requiredClass },
2498824989
caption,
2498924990
schema['description'] && (React.createElement(React.Fragment, null,
2499024991
React.createElement("br", null),
@@ -25001,7 +25002,7 @@ var stringFilters = {
2500125002
}
2500225003
};
2500325004
function SchemaFormComponent(props) {
25004-
var schema = props.schema, path = props.path, value = props.value, errors = props.errors, onFocus = props.onFocus, onBlur = props.onBlur, context = props.context;
25005+
var schema = props.schema, path = props.path, value = props.value, errors = props.errors, onFocus = props.onFocus, onBlur = props.onBlur, context = props.context, isRequired = props.isRequired;
2500525006
var name = path.join('.');
2500625007
var dispatch = useContext(ValueDispatch);
2500725008
var _a = useState(''), holdString = _a[0], setHoldString = _a[1];
@@ -25133,15 +25134,16 @@ function isEqual(p0, p1) {
2513325134
var equ = lodash.isEqual(p0.value, p1.value)
2513425135
&& lodash.isEqual(p0.errors, p1.errors)
2513525136
&& p0.schema === p1.schema
25137+
&& (p0.isRequired || false) === (p1.isRequired || false)
2513625138
&& p0.onBlur === p1.onBlur
2513725139
&& p0.onFocus === p1.onFocus
2513825140
&& p0.onEditor === p1.onEditor;
2513925141
return equ;
2514025142
}
2514125143
function SchemaFormComponentGenericInner(_a) {
25142-
var schema = _a.schema, path = _a.path, value = _a.value, errors = _a.errors, onFocus = _a.onFocus, onBlur = _a.onBlur, onEditor = _a.onEditor, context = _a.context;
25144+
var schema = _a.schema, path = _a.path, value = _a.value, isRequired = _a.isRequired, errors = _a.errors, onFocus = _a.onFocus, onBlur = _a.onBlur, onEditor = _a.onEditor, context = _a.context;
2514325145
var componentProps = {
25144-
schema: schema, path: path, value: value, onFocus: onFocus, onBlur: onBlur, onEditor: onEditor,
25146+
schema: schema, path: path, value: value, isRequired: isRequired, onFocus: onFocus, onBlur: onBlur, onEditor: onEditor,
2514525147
errors: (errors || []),
2514625148
caption: fieldCaption(schema, path),
2514725149
context: context.componentContext
@@ -25203,23 +25205,24 @@ function SchemaFormObject(_a) {
2520325205
var _b = useState(false), collapsed = _b[0], setCollapsed = _b[1];
2520425206
var pathEl = path.length ? lodash.last(path) : '';
2520525207
var objectClass = path.length === 0 ? "" : "sf-object sf-" + pathEl;
25206-
function renderSection(order, properties, i) {
25208+
function renderSection(order, properties, requireds, i) {
2520725209
if (typeof order === 'string') {
2520825210
var _a = properties.find(function (_a) {
2520925211
var key = _a[0], _ = _a[1];
2521025212
return key === order;
2521125213
}) || ['', null], key = _a[0], subSchema = _a[1];
2521225214
if (key) {
25213-
return (React.createElement(ComponentForType, { schema: subSchema, path: __spreadArrays(path, [key]), value: value && value[key], errors: ErrorObject.forKey(errors, key), onFocus: onFocus, onBlur: onBlur, onEditor: onEditor, key: key, context: context }));
25215+
return (React.createElement(ComponentForType, { schema: subSchema, path: __spreadArrays(path, [key]), value: value && value[key], isRequired: requireds && requireds.indexOf(key) >= 0, errors: ErrorObject.forKey(errors, key), onFocus: onFocus, onBlur: onBlur, onEditor: onEditor, key: key, context: context }));
2521425216
}
2521525217
}
2521625218
else { // recurse into a section list
25217-
return (React.createElement("section", { key: i || 0 }, order.map(function (subOrder, i) { return renderSection(subOrder, properties, i); })));
25219+
return (React.createElement("section", { key: i || 0 }, order.map(function (subOrder, i) { return renderSection(subOrder, properties, requireds, i); })));
2521825220
}
2521925221
return React.createElement(React.Fragment, null);
2522025222
}
2522125223
var topOrder = schema['order'] || Object.keys(schema['properties']);
2522225224
var properties = Object.entries(schema['properties']);
25225+
var requireds = schema['required'];
2522325226
if (schema['order'] && lodash.flatten(schema['order']).length < properties.length) {
2522425227
console.log('fewer items in order than properties at ' + path.join('.'));
2522525228
}
@@ -25231,7 +25234,7 @@ function SchemaFormObject(_a) {
2523125234
showTitle && React.createElement("div", { className: "sf-title" },
2523225235
collapsible && React.createElement("span", { className: collapserClasses, onClick: onCollapserClick }),
2523325236
fieldCaption(schema, path, value) || '\u00A0'),
25234-
!collapsed && React.createElement("div", { className: "sf-object-fieldset fieldset" }, topOrder.map(function (subOrder) { return renderSection(subOrder, properties); }))));
25237+
!collapsed && React.createElement("div", { className: "sf-object-fieldset fieldset" }, topOrder.map(function (subOrder) { return renderSection(subOrder, properties, requireds); }))));
2523525238
}
2523625239

2523725240
var reactIs_production_min = createCommonjsModule(function (module, exports) {

build/index.es.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/index.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24986,12 +24986,13 @@ function valueReducer(oldValue, action) {
2498624986
}
2498724987

2498824988
var SchemaFormComponentWrapper = function (_a) {
24989-
var errors = _a.errors, caption = _a.caption, children = _a.children, schema = _a.schema;
24989+
var errors = _a.errors, caption = _a.caption, children = _a.children, schema = _a.schema, isRequired = _a.isRequired;
2499024990
var isError = errors.length > 0;
24991-
var errorClass = isError ? "sf-has-error" : "";
24991+
var errorClass = isError ? "sf-has-error " : "";
24992+
var requiredClass = isRequired ? "sf-required" : "";
2499224993
return (React__default.createElement(React__default.Fragment, null,
2499324994
React__default.createElement("div", { className: "sf-row" },
24994-
caption && React__default.createElement("label", { htmlFor: name, className: "sf-caption " + errorClass },
24995+
caption && React__default.createElement("label", { htmlFor: name, className: "sf-caption " + errorClass + requiredClass },
2499524996
caption,
2499624997
schema['description'] && (React__default.createElement(React__default.Fragment, null,
2499724998
React__default.createElement("br", null),
@@ -25008,7 +25009,7 @@ var stringFilters = {
2500825009
}
2500925010
};
2501025011
function SchemaFormComponent(props) {
25011-
var schema = props.schema, path = props.path, value = props.value, errors = props.errors, onFocus = props.onFocus, onBlur = props.onBlur, context = props.context;
25012+
var schema = props.schema, path = props.path, value = props.value, errors = props.errors, onFocus = props.onFocus, onBlur = props.onBlur, context = props.context, isRequired = props.isRequired;
2501225013
var name = path.join('.');
2501325014
var dispatch = React.useContext(ValueDispatch);
2501425015
var _a = React.useState(''), holdString = _a[0], setHoldString = _a[1];
@@ -25140,15 +25141,16 @@ function isEqual(p0, p1) {
2514025141
var equ = lodash.isEqual(p0.value, p1.value)
2514125142
&& lodash.isEqual(p0.errors, p1.errors)
2514225143
&& p0.schema === p1.schema
25144+
&& (p0.isRequired || false) === (p1.isRequired || false)
2514325145
&& p0.onBlur === p1.onBlur
2514425146
&& p0.onFocus === p1.onFocus
2514525147
&& p0.onEditor === p1.onEditor;
2514625148
return equ;
2514725149
}
2514825150
function SchemaFormComponentGenericInner(_a) {
25149-
var schema = _a.schema, path = _a.path, value = _a.value, errors = _a.errors, onFocus = _a.onFocus, onBlur = _a.onBlur, onEditor = _a.onEditor, context = _a.context;
25151+
var schema = _a.schema, path = _a.path, value = _a.value, isRequired = _a.isRequired, errors = _a.errors, onFocus = _a.onFocus, onBlur = _a.onBlur, onEditor = _a.onEditor, context = _a.context;
2515025152
var componentProps = {
25151-
schema: schema, path: path, value: value, onFocus: onFocus, onBlur: onBlur, onEditor: onEditor,
25153+
schema: schema, path: path, value: value, isRequired: isRequired, onFocus: onFocus, onBlur: onBlur, onEditor: onEditor,
2515225154
errors: (errors || []),
2515325155
caption: fieldCaption(schema, path),
2515425156
context: context.componentContext
@@ -25210,23 +25212,24 @@ function SchemaFormObject(_a) {
2521025212
var _b = React.useState(false), collapsed = _b[0], setCollapsed = _b[1];
2521125213
var pathEl = path.length ? lodash.last(path) : '';
2521225214
var objectClass = path.length === 0 ? "" : "sf-object sf-" + pathEl;
25213-
function renderSection(order, properties, i) {
25215+
function renderSection(order, properties, requireds, i) {
2521425216
if (typeof order === 'string') {
2521525217
var _a = properties.find(function (_a) {
2521625218
var key = _a[0], _ = _a[1];
2521725219
return key === order;
2521825220
}) || ['', null], key = _a[0], subSchema = _a[1];
2521925221
if (key) {
25220-
return (React__default.createElement(ComponentForType, { schema: subSchema, path: __spreadArrays(path, [key]), value: value && value[key], errors: ErrorObject.forKey(errors, key), onFocus: onFocus, onBlur: onBlur, onEditor: onEditor, key: key, context: context }));
25222+
return (React__default.createElement(ComponentForType, { schema: subSchema, path: __spreadArrays(path, [key]), value: value && value[key], isRequired: requireds && requireds.indexOf(key) >= 0, errors: ErrorObject.forKey(errors, key), onFocus: onFocus, onBlur: onBlur, onEditor: onEditor, key: key, context: context }));
2522125223
}
2522225224
}
2522325225
else { // recurse into a section list
25224-
return (React__default.createElement("section", { key: i || 0 }, order.map(function (subOrder, i) { return renderSection(subOrder, properties, i); })));
25226+
return (React__default.createElement("section", { key: i || 0 }, order.map(function (subOrder, i) { return renderSection(subOrder, properties, requireds, i); })));
2522525227
}
2522625228
return React__default.createElement(React__default.Fragment, null);
2522725229
}
2522825230
var topOrder = schema['order'] || Object.keys(schema['properties']);
2522925231
var properties = Object.entries(schema['properties']);
25232+
var requireds = schema['required'];
2523025233
if (schema['order'] && lodash.flatten(schema['order']).length < properties.length) {
2523125234
console.log('fewer items in order than properties at ' + path.join('.'));
2523225235
}
@@ -25238,7 +25241,7 @@ function SchemaFormObject(_a) {
2523825241
showTitle && React__default.createElement("div", { className: "sf-title" },
2523925242
collapsible && React__default.createElement("span", { className: collapserClasses, onClick: onCollapserClick }),
2524025243
fieldCaption(schema, path, value) || '\u00A0'),
25241-
!collapsed && React__default.createElement("div", { className: "sf-object-fieldset fieldset" }, topOrder.map(function (subOrder) { return renderSection(subOrder, properties); }))));
25244+
!collapsed && React__default.createElement("div", { className: "sf-object-fieldset fieldset" }, topOrder.map(function (subOrder) { return renderSection(subOrder, properties, requireds); }))));
2524225245
}
2524325246

2524425247
var reactIs_production_min = createCommonjsModule(function (module, exports) {

build/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/component-for-type.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,19 @@ function isEqual(p0: ISchemaContainerProps, p1: ISchemaContainerProps) {
2626
const equ = _.isEqual(p0.value, p1.value)
2727
&& _.isEqual(p0.errors, p1.errors)
2828
&& p0.schema === p1.schema
29+
&& (p0.isRequired || false) === (p1.isRequired || false)
2930
&& p0.onBlur === p1.onBlur
3031
&& p0.onFocus === p1.onFocus
3132
&& p0.onEditor === p1.onEditor;
3233
return equ;
3334
}
3435

3536
function SchemaFormComponentGenericInner({
36-
schema, path, value, errors, onFocus, onBlur, onEditor, context
37+
schema, path, value, isRequired, errors, onFocus, onBlur, onEditor, context
3738
}: ISchemaContainerProps): React.ReactElement {
3839

3940
const componentProps: ISchemaComponentProps = {
40-
schema, path, value, onFocus, onBlur, onEditor,
41+
schema, path, value, isRequired, onFocus, onBlur, onEditor,
4142
errors: (errors || []) as Ajv.ErrorObject[],
4243
caption: fieldCaption(schema, path),
4344
context: context.componentContext

src/components/schema-form-component.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import { ISchemaComponentProps } from "components/schema-form-interfaces";
33
import { fieldType } from "schema/schema";
44
import { ValueDispatch, ValueAction } from "components/schema-form-value-context";
55

6-
export const SchemaFormComponentWrapper: FunctionComponent<ISchemaComponentProps> = ({ errors, caption, children, schema }) => {
6+
export const SchemaFormComponentWrapper: FunctionComponent<ISchemaComponentProps> = ({ errors, caption, children, schema, isRequired }) => {
77
const isError = errors.length > 0;
8-
const errorClass = isError ? "sf-has-error" : "";
8+
const errorClass = isError ? "sf-has-error " : "";
9+
const requiredClass = isRequired ? "sf-required" : ""
910
return (
1011
<>
1112
<div className="sf-row">
12-
{caption && <label htmlFor={name} className={"sf-caption " + errorClass}>
13+
{caption && <label htmlFor={name} className={"sf-caption " + errorClass + requiredClass}>
1314
{caption}
1415
{schema['description'] && (<><br/><span className={"sf-description " + errorClass}>
1516
{schema['description']}
@@ -47,7 +48,8 @@ export function SchemaFormComponent(props: ISchemaComponentProps): React.ReactEl
4748
errors,
4849
onFocus,
4950
onBlur,
50-
context
51+
context,
52+
isRequired
5153
} = props;
5254
const name = path.join('.');
5355
const dispatch = useContext(ValueDispatch);

src/components/schema-form-interfaces.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface ISchemaContainerProps {
77
schema: object,
88
path: string[],
99
value: object,
10+
isRequired?: boolean,
1011
errors: ErrorObject | Ajv.ErrorObject[],
1112
onFocus(path: string[]): void,
1213
onBlur(path: string[]): void,
@@ -26,6 +27,7 @@ export interface ISchemaComponentProps {
2627
schema: object,
2728
path: string[],
2829
value: any,
30+
isRequired?: boolean,
2931
errors: Ajv.ErrorObject[]
3032
onFocus(path: string[]): void,
3133
onBlur(path: string[]): void,

src/components/schema-form-object.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function SchemaFormObject({
2222
const pathEl = path.length ? _.last(path) : '';
2323
const objectClass = path.length === 0 ? "" : "sf-object sf-" + pathEl;
2424

25-
function renderSection(order: NestedList, properties: [string, unknown][], i?: number) {
25+
function renderSection(order: NestedList, properties: [string, unknown][], requireds?: string[], i?: number) {
2626
if (typeof order === 'string') {
2727
const [key, subSchema] = properties.find(([key, _]) => key === order) || ['', null];
2828
if (key) {
@@ -31,6 +31,7 @@ export function SchemaFormObject({
3131
schema={subSchema as object}
3232
path={[ ...path, key ]}
3333
value={value && value[key]}
34+
isRequired={requireds && requireds.indexOf(key) >= 0}
3435
errors={ErrorObject.forKey(errors, key)}
3536
onFocus={onFocus}
3637
onBlur={onBlur}
@@ -42,7 +43,7 @@ export function SchemaFormObject({
4243
} else { // recurse into a section list
4344
return (
4445
<section key={i || 0}>
45-
{order.map((subOrder, i) => renderSection(subOrder, properties, i))}
46+
{order.map((subOrder, i) => renderSection(subOrder, properties, requireds, i))}
4647
</section>
4748
)
4849
}
@@ -51,6 +52,7 @@ export function SchemaFormObject({
5152

5253
let topOrder: NestedListArray = schema['order'] || Object.keys(schema['properties']);
5354
let properties = Object.entries(schema['properties']);
55+
let requireds = schema['required'];
5456
if (schema['order'] && _.flatten(schema['order']).length < properties.length) {
5557
console.log('fewer items in order than properties at ' + path.join('.'));
5658
}
@@ -66,7 +68,7 @@ export function SchemaFormObject({
6668
{fieldCaption(schema, path, value) || '\u00A0'}
6769
</div>}
6870
{!collapsed && <div className="sf-object-fieldset fieldset">
69-
{topOrder.map((subOrder) => renderSection(subOrder, properties))}
71+
{topOrder.map((subOrder) => renderSection(subOrder, properties, requireds))}
7072
</div>}
7173
</div>
7274
)

0 commit comments

Comments
 (0)