Description
DataContext.Provider
is the context provider that has to wrap the features if components of Field and Value is to be used with a common source instead of distributing values and events individually.
Please use Form.Handler for application forms.
Demos
Data and callback events
Code Editor
<DataContext.Provider data={testdata} onChange={(data) => console.log('onChange', data)} onPathChange={(path, value) => console.log('onPathChange', path, value)} onSubmit={(data) => console.log('onSubmit', data)} onSubmitRequest={() => console.log('onSubmitRequest')} > <Layout.Section> <Layout.Card> <Layout.Column divider="line" spacing="small"> <Field.String path="/requiredString" label="Required string" required /> <Field.String path="/hmm" label="Invalid path" /> <Field.String path="/string" label="String value" /> <Field.String path="/string" label="String value (copy)" /> <Field.Number path="/number" label="Number value" /> <Field.String path="/number" label="Number with Field.String" /> <Field.Boolean path="/boolean" label="Boolean - Checkbox" variant="checkbox" /> <Field.Boolean path="/boolean" label="Boolean - Toggle" variant="button" /> <div> <Field.String path="/nested/nestedText" label="Nested text" /> <Field.Number path="/nested/nestedNumber" label="Nested number (minimum 50)" minimum={50} /> </div> <div className="hmm"> <Layout.Row> <Field.String path="/list/0/itemText" label="Item text" /> <Field.Number path="/list/0/itemNumber" label="Item number" /> </Layout.Row> <Layout.Row> <Field.String path="/list/1/itemText" label="Item text" /> <Field.Number path="/list/1/itemNumber" label="Item number" /> </Layout.Row> </div> <Layout.ButtonRow> <Form.SubmitButton /> </Layout.ButtonRow> </Layout.Column> </Layout.Card> </Layout.Section> </DataContext.Provider>
Validation with Json Schema
Code Editor
<DataContext.Provider data={testdata} schema={TestdataSchema} onChange={(data) => console.log('onChange', data)} onPathChange={(path, value) => console.log('onPathChange', path, value)} onSubmit={(data) => console.log('onSubmit', data)} onSubmitRequest={() => console.log('onSubmitRequest')} > <Layout.Section> <Layout.Card> <Layout.Column divider="line" spacing="small"> <Field.String path="/requiredString" label="Required string" /> <Field.String path="/hmm" label="Invalid path" /> <Field.String path="/string" label="String value" /> <Field.String path="/string" label="String value (copy)" /> <Field.Number path="/number" label="Number value" /> <Field.String path="/number" label="Number with Field.String" /> <Field.Boolean path="/boolean" label="Boolean - Checkbox" variant="checkbox" /> <Field.Boolean path="/boolean" label="Boolean - Toggle" variant="button" /> <div> <Field.String path="/nested/nestedText" label="Nested text" /> <Field.Number path="/nested/nestedNumber" label="Nested number" /> </div> <div className="hmm"> <Layout.Row> <Field.String path="/list/0/itemText" label="Item text" /> <Field.Number path="/list/0/itemNumber" label="Item number" /> </Layout.Row> <Layout.Row> <Field.String path="/list/1/itemText" label="Item text" /> <Field.Number path="/list/1/itemNumber" label="Item number" /> </Layout.Row> </div> <Layout.ButtonRow> <Form.SubmitButton /> </Layout.ButtonRow> </Layout.Column> </Layout.Card> </Layout.Section> </DataContext.Provider>