Skip to content

Commit 5e51421

Browse files
Tobbecannikin
andauthored
scaffold: Use checkbox to display boolean value (#732)
Co-authored-by: Rob Cameron <[email protected]>
1 parent 008c166 commit 5e51421

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

packages/cli/src/commands/generate/scaffold/__tests__/fixtures/assets/scaffold.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@
297297
.rw-table tbody tr:nth-child(even) {
298298
background-color: #fff;
299299
}
300+
.rw-table input {
301+
margin-left: 0;
302+
}
300303
.rw-table-actions {
301304
display: flex;
302305
justify-content: flex-end;

packages/cli/src/commands/generate/scaffold/__tests__/fixtures/components/index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ const timeTag = (datetime) => {
2727
)
2828
}
2929

30+
const checkboxInputTag = (checked) => {
31+
return <input type="checkbox" checked={checked} disabled />
32+
}
33+
3034
const PostsList = ({ posts }) => {
3135
const { addMessage } = useFlash()
3236
const [deletePost] = useMutation(DELETE_POST_MUTATION, {
@@ -66,7 +70,7 @@ const PostsList = ({ posts }) => {
6670
<td>{truncate(post.author)}</td>
6771
<td>{truncate(post.body)}</td>
6872
<td>{truncate(post.image)}</td>
69-
<td>{truncate(post.isPinned)}</td>
73+
<td>{checkboxInputTag(post.isPinned)}</td>
7074
<td>{timeTag(post.postedAt)}</td>
7175
<td>
7276
<nav className="rw-table-actions">

packages/cli/src/commands/generate/scaffold/scaffold.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -194,37 +194,45 @@ const componentFiles = async (name, scaffoldPath = '') => {
194194
const singularName = pascalcase(pluralize.singular(name))
195195
const model = await getSchema(singularName)
196196
const idType = getIdType(model)
197-
const columns = model.fields.filter((field) => field.kind !== 'object')
198197
const intForeignKeys = intForeignKeysForModel(model)
199198
let fileList = {}
200-
const fieldComponents = {
199+
const componentMetadata = {
201200
Boolean: {
202201
name: 'CheckboxField',
203202
defaultProp: 'defaultChecked',
204203
validation: false,
204+
displayFunction: 'checkboxInputTag',
205+
},
206+
DateTime: {
207+
displayFunction: 'timeTag',
205208
},
206209
String: {
207210
name: 'TextField',
208211
defaultProp: 'defaultValue',
209212
validation: '{{ required: true }}',
213+
displayFunction: 'truncate',
210214
},
211215
}
212-
const editableColumns = columns
213-
.filter((column) => {
214-
return NON_EDITABLE_COLUMNS.indexOf(column.name) === -1
215-
})
216+
const columns = model.fields
217+
.filter((field) => field.kind !== 'object')
216218
.map((column) => ({
217219
...column,
218220
label: humanize(column.name),
219221
component:
220-
fieldComponents[column.type]?.name || fieldComponents.String.name,
222+
componentMetadata[column.type]?.name || componentMetadata.String.name,
221223
defaultProp:
222-
fieldComponents[column.type]?.defaultProp ||
223-
fieldComponents.String.defaultProp,
224+
componentMetadata[column.type]?.defaultProp ||
225+
componentMetadata.String.defaultProp,
224226
validation:
225-
fieldComponents[column.type]?.validation ??
226-
fieldComponents.String.validation,
227+
componentMetadata[column.type]?.validation ??
228+
componentMetadata.String.validation,
229+
displayFunction:
230+
componentMetadata[column.type]?.displayFunction ||
231+
componentMetadata.String.displayFunction,
227232
}))
233+
const editableColumns = columns.filter((column) => {
234+
return NON_EDITABLE_COLUMNS.indexOf(column.name) === -1
235+
})
228236
const fieldsToImport = Object.keys(
229237
editableColumns.reduce((accumulator, column) => {
230238
accumulator[column.component] = true

packages/cli/src/commands/generate/scaffold/templates/assets/scaffold.css.template

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@
297297
.rw-table tbody tr:nth-child(even) {
298298
background-color: #fff;
299299
}
300+
.rw-table input {
301+
margin-left: 0;
302+
}
300303
.rw-table-actions {
301304
display: flex;
302305
justify-content: flex-end;

packages/cli/src/commands/generate/scaffold/templates/components/Names.js.template

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ const timeTag = (datetime) => {
2727
)
2828
}
2929

30+
const checkboxInputTag = (checked) => {
31+
return <input type="checkbox" checked={checked} disabled />
32+
}
33+
3034
const ${pluralPascalName}List = ({ ${pluralCamelName} }) => {
3135
const { addMessage } = useFlash()
3236
const [delete${singularPascalName}] = useMutation(DELETE_${singularConstantName}_MUTATION, {
@@ -53,7 +57,7 @@ const ${pluralPascalName}List = ({ ${pluralCamelName} }) => {
5357
<tbody>
5458
{${pluralCamelName}.map((${singularCamelName}) => (
5559
<tr key={${singularCamelName}.id}><% columns.forEach(column => { %>
56-
<td>{<% if (column.type === 'DateTime') { %>timeTag<% } else { %>truncate<% } %>(${singularCamelName}.<%= column.name %>)}</td><% }) %>
60+
<td>{${column.displayFunction}(${singularCamelName}.${column.name})}</td><% }) %>
5761
<td>
5862
<nav className="rw-table-actions">
5963
<Link

0 commit comments

Comments
 (0)