-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Suggestion to add AutoGroups
and AutoHeaders
, similar to AutoFields
and AutoItems
#57
Comments
While |
Both components are nice to have thing to hide direct usage of low level utils, but not yet sure they are the similar to Let's have a call about this proposal and try to think together on the best api. The problem though is very relevant. |
The reason I advocate for those two components is that is separates the higher level elements (auto items, auto groups, etc) with the low level concepts, making documentation way simpler and understanding the product simpler for a new user |
Adding more notes - I can easily see how we can make The example from above turns into the following <AutoSchemaFields {...props}>
{(schemaField, i) => <TableCell key={i}>{schemaField.title}</TableCell>}
</AutoSchemaFields> |
Then why do we need a React component |
Regarding
Example: https://codesandbox.io/s/autoheaders-7xss6o?file=/src/AutoHeaders.tsx Why I think it is important to to have schema=>data conversion?
I don't see any better way. This looks good I think. |
I want to understand - your suggestion is basically the structure below The second part is great, but the first is too strange, and the two schemas The problem with the below is that the intent gets lost with a too verbose code.
const tableHeadRepo = new ComponentsRepo("tableHeadRepo")
.register("array", {
name: "tableHeaed",
component: (props) => (
<thead>
<AutoItems {...props} />
</thead>
)
})
.register("object", {
name: "tableHeadCell",
component: (props) => <th>{props.data.schema.title}</th>
});
new ComponentsRepo("complex")
.register("array", {
name: "table",
component: (props) => {
return (
<table>
<RepositoryProvider components={headRepo}>
<AutoView schema={convertedSchema} data={convertedSchema2Data} />
</RepositoryProvider>
<tbody>
<AutoItems {...props} render={(item) => <tr>{item}</tr>} />
</tbody>
</table>
);
}
})
.register("object", {
name: "tableRow",
component: (props) => (
<AutoFields {...props} render={(item) => <td>{item}</td>} />
)
}) |
What I am trying to say is that it looks too complicated. What I am looking for is something like new ComponentsRepo("complex")
.register("array", {
name: "table",
component: (props) => {
return (
<table>
<schemaAsData {...props} path={items} >
<AutoItems {...props} > // the items here are the schema fields of the item
</schemaAsData>
<tbody>
<AutoItems {...props} render={(item) => <tr>{item}</tr>} />
</tbody>
</table>
);
}
}) |
@yoavaa in terms of AutoViews if data is completely different so it should be different AutoView scope with own props /repo/repositoryContext. Code might be rewritten to something like this: new ComponentsRepo("complex")
.register("array", {
name: "table",
component: (props) => {
return (
<table>
<thead>
<SchemaAsData {...props} path="/items">
{headerProps => <AutoItems {...headerProps} render={item => <th>{item}</th>} />}
</SchemaAsData>
</thead>
<tbody>
<AutoItems {...props} render={(item) => <tr>{item}</tr>} />
</tbody>
</table>
);
}
}) But anyway, |
@yoavaa the problem in your example is auto-passing props. |
I think we are getting to an interesting direction. The concept of schema as data, which replaces the props and can use a different component repo looks like a good ackaging for headers. Given we translate schema to data, we can also translate using the UI schema for field ordering and filters, or create an equivalent UI schema to do so. Anyway, it feels like something that takes a good form |
…th map function and rules Function that takes object type schema, optional data, pick. omit and order rules and map callback, returns an array of map callback results. Map callback maps list of object fields after filtering and ordering according to pick, omit and order rules. BREAKING CHANGE: orderFields and filter functions are deleted from the export re #57
AutoHeaders component is a component that converts object `JSONSchema` to array of string data, where each string is a field name from the object schema. AutoHeaders provides new AutoView props based on object JSONSchema re #57
# [@autoviews/core-v3.0.0](https://github.com/wix-incubator/autoviews/compare/@autoviews/core-v2.0.0...@autoviews/core-v3.0.0) (2022-06-01) ### Bug Fixes * correct error message ([ef442b5](ef442b5)) ### Features * added AutoHeaders component ([0f0ed05](0f0ed05)), closes [#57](#57) * **objectschemaasarray utility:** converts object schema to array with map function and rules ([85b0dc8](85b0dc8)), closes [#57](#57) * **schema:** added `prefixItems` support as tuple ([eb41410](eb41410)), closes [#90](#90) ### BREAKING CHANGES * **schema:** `CoreSchemaMetaSchema['items']` now just has `CoreSchemaMetaSchema` type, nextSchema function now consider this field * **objectschemaasarray utility:** orderFields and filter functions are deleted from the export
Is there an existing issue for this?
The problem
rendering table headers and groups is too complex and requires direct usage of too many low level functions and concepts, which should be encapsulated.
Describe the solution you'd like
AutoHeaders
used to render field names in the same order as AutoFields will render the components. The provided children callback is called for each rendered component with the field title and index.
AutoGroups
The equivalent of
AutoFields
but also supports groups from UISchema.The callback is called with the group name and the result of
AutoFields
for that group. The component by default also renders theUNGROUPED
group, which we can decide to control using another propExample here - https://codesandbox.io/s/autoviews-demo-forked-dzc83n?file=/src/autoExtensions.tsx
Describe alternatives you've considered
No response
The text was updated successfully, but these errors were encountered: