introduces sidebar fields
This commit is contained in:
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
|
||||
import './index.scss';
|
||||
|
||||
const RenderFields = ({
|
||||
fieldSchema, initialData, customComponents, fieldTypes,
|
||||
fieldSchema, initialData, customComponents, fieldTypes, filter,
|
||||
}) => {
|
||||
if (fieldSchema) {
|
||||
return (
|
||||
@@ -12,36 +12,40 @@ const RenderFields = ({
|
||||
{fieldSchema.map((field, i) => {
|
||||
const { defaultValue } = field;
|
||||
if (field?.hidden !== 'api' && field?.hidden !== true) {
|
||||
let FieldComponent = field?.hidden === 'admin' ? fieldTypes.hidden : fieldTypes[field.type];
|
||||
if ((filter && typeof filter === 'function' && filter(field)) || !filter) {
|
||||
let FieldComponent = field?.hidden === 'admin' ? fieldTypes.hidden : fieldTypes[field.type];
|
||||
|
||||
if (customComponents?.[field.name]?.field) {
|
||||
FieldComponent = customComponents[field.name].field;
|
||||
}
|
||||
if (customComponents?.[field.name]?.field) {
|
||||
FieldComponent = customComponents[field.name].field;
|
||||
}
|
||||
|
||||
if (FieldComponent) {
|
||||
return (
|
||||
<FieldComponent
|
||||
fieldTypes={fieldTypes}
|
||||
key={field.name}
|
||||
{...field}
|
||||
validate={field.validate ? value => field.validate(value, field) : undefined}
|
||||
defaultValue={initialData[field.name] || defaultValue}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (FieldComponent) {
|
||||
return (
|
||||
<FieldComponent
|
||||
fieldTypes={fieldTypes}
|
||||
key={field.name}
|
||||
{...field}
|
||||
validate={field.validate ? value => field.validate(value, field) : undefined}
|
||||
defaultValue={initialData[field.name] || defaultValue}
|
||||
/>
|
||||
<div
|
||||
className="missing-field"
|
||||
key={i}
|
||||
>
|
||||
No matched field found for
|
||||
{' '}
|
||||
"
|
||||
{field.label}
|
||||
"
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className="missing-field"
|
||||
key={i}
|
||||
>
|
||||
No matched field found for
|
||||
{' '}
|
||||
"
|
||||
{field.label}
|
||||
"
|
||||
</div>
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -56,6 +60,7 @@ const RenderFields = ({
|
||||
RenderFields.defaultProps = {
|
||||
initialData: {},
|
||||
customComponents: {},
|
||||
filter: null,
|
||||
};
|
||||
|
||||
RenderFields.propTypes = {
|
||||
@@ -67,6 +72,7 @@ RenderFields.propTypes = {
|
||||
fieldTypes: PropTypes.shape({
|
||||
hidden: PropTypes.func,
|
||||
}).isRequired,
|
||||
filter: PropTypes.func,
|
||||
};
|
||||
|
||||
export default RenderFields;
|
||||
|
||||
@@ -74,6 +74,7 @@ const DefaultEditView = (props) => {
|
||||
}
|
||||
</header>
|
||||
<RenderFields
|
||||
filter={field => (!field.position || (field.position && field.position !== 'sidebar'))}
|
||||
fieldTypes={fieldTypes}
|
||||
fieldSchema={fields}
|
||||
initialData={data}
|
||||
@@ -85,6 +86,15 @@ const DefaultEditView = (props) => {
|
||||
<PreviewButton generatePreviewURL={preview} />
|
||||
<FormSubmit>Save</FormSubmit>
|
||||
</div>
|
||||
<div className={`${baseClass}__sidebar-fields`}>
|
||||
<RenderFields
|
||||
filter={field => field.position === 'sidebar'}
|
||||
position="sidebar"
|
||||
fieldTypes={fieldTypes}
|
||||
fieldSchema={fields}
|
||||
initialData={data}
|
||||
/>
|
||||
</div>
|
||||
{isEditing && (
|
||||
<ul className={`${baseClass}__meta`}>
|
||||
<li>
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
&__main {
|
||||
// max-width: base(20);
|
||||
}
|
||||
|
||||
&__header {
|
||||
h1 {
|
||||
word-break: break-all;
|
||||
@@ -33,13 +37,14 @@
|
||||
|
||||
&__sidebar {
|
||||
padding-bottom: base(1);
|
||||
width: base(16);
|
||||
width: base(20);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&__document-actions,
|
||||
&__meta {
|
||||
&__meta,
|
||||
&__sidebar-fields {
|
||||
padding-left: base(1.5);
|
||||
}
|
||||
|
||||
@@ -72,6 +77,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
&__sidebar-fields {
|
||||
margin-bottom: base(1.5);
|
||||
}
|
||||
|
||||
&__meta {
|
||||
margin: auto 0 0 0;
|
||||
list-style: none;
|
||||
@@ -110,7 +119,8 @@
|
||||
}
|
||||
|
||||
&__document-actions,
|
||||
&__meta {
|
||||
&__meta,
|
||||
&__sidebar-fields {
|
||||
padding-left: $baseline;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user