From b9d21c5d2382f5ba3ed8de232391c9199c051ac8 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:17:07 +0100
Subject: [PATCH 1/9] adjust Node UI to use a typed input for the key
---
nodes/widgets/locales/en-US/ui_table.html | 1 +
nodes/widgets/locales/en-US/ui_table.json | 3 ++-
nodes/widgets/ui_table.html | 26 ++++++++++++++++++-----
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/nodes/widgets/locales/en-US/ui_table.html b/nodes/widgets/locales/en-US/ui_table.html
index fc1fe5cab..82a056af4 100644
--- a/nodes/widgets/locales/en-US/ui_table.html
+++ b/nodes/widgets/locales/en-US/ui_table.html
@@ -7,6 +7,7 @@ Input
The ui-table widget requires an array or an object of data to be sent via msg.payload
.
If an array is provided, the table will render a row for each object within the array, and, by default, a column for each property in the objects.
If an object is provided, the table will render a single row with columns for each property in the object.
+ The text displayed for a row can be either a key or a string. Selecting key
will look up the value of the named key in the object, while a string will display the string as is.
Properties
diff --git a/nodes/widgets/locales/en-US/ui_table.json b/nodes/widgets/locales/en-US/ui_table.json
index c41c1cc7c..bf2978df8 100644
--- a/nodes/widgets/locales/en-US/ui_table.json
+++ b/nodes/widgets/locales/en-US/ui_table.json
@@ -6,7 +6,8 @@
"maxRows": "Max Rows",
"columns": "Columns",
"autoCalculateColumns": "Auto Calculate Columns",
- "key": "Key",
+ "key": "key:",
+ "value": "Value",
"label": "Label",
"type": "Type",
"width": "Width",
diff --git a/nodes/widgets/ui_table.html b/nodes/widgets/ui_table.html
index be08a2db0..8bc4520c7 100644
--- a/nodes/widgets/ui_table.html
+++ b/nodes/widgets/ui_table.html
@@ -33,7 +33,8 @@
.node-input-column-row-property:not(:first-child) {
margin-top: 3px;
}
- #node-input-column-container .node-input-column-row-property input,
+ #node-input-column-container .node-input-column-row-property input:not(.red-ui-typedInput-input):not(.red-ui-typedInput),
+ #node-input-column-container .node-input-column-row-property div.red-ui-typedInput-container,
#node-input-column-container .node-input-column-row-property select {
flex-grow: 1;
width: 50%;
@@ -178,14 +179,27 @@
// key
const keyRow = $('
', { class: 'node-input-column-row-property' }).appendTo(options)
$(' ', {
- text: `${RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.key')}:`
+ text: `${RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.value')}:`
}).appendTo(keyRow)
- $(' ', {
+ const keyTypedInput = $(' ', {
class: 'node-input-column-key',
type: 'text',
- placeholder: RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.key'),
+ placeholder: RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.value'),
value: col.key
}).appendTo(keyRow)
+ const keyType = ['str', 'key'].includes(col.keyType) ? col.keyType : 'key'
+ $(' ', {
+ class: 'node-input-column-keyType',
+ type: 'hidden',
+ value: keyType
+ }).appendTo(keyRow)
+ console.log('ui-table: setting up typedInput for key')
+ $(keyTypedInput).typedInput({
+ default: 'key',
+ value: col.key,
+ typeField: keyRow.find('.node-input-column-keyType'),
+ types: [{ value: 'key', label: RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.key'), icon: 'fa fa-key' }, 'str']
+ })
// label
const labelRow = $('
', { class: 'node-input-column-row-property' }).appendTo(options)
@@ -281,9 +295,11 @@
node.columns = []
columns.each(function (i) {
const column = $(this)
+ const keyField = column.find('.node-input-column-key')
const o = {
title: column.find('.node-input-column-label').val(),
- key: column.find('.node-input-column-key').val(),
+ key: keyField.typedInput('value'),
+ keyType: keyField.typedInput('type') || 'key',
type: column.find('.node-input-column-type').find(':selected').val(),
width: column.find('.node-input-column-width').val(),
align: column.find('.node-input-column-align').find(':selected').val()
From d83083a4631dc4b8cf47b910c7cce803ec6eb533 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:17:37 +0100
Subject: [PATCH 2/9] ensure keyType is passed to frontend
---
nodes/widgets/ui_table.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/nodes/widgets/ui_table.js b/nodes/widgets/ui_table.js
index a08b78e05..aa25226c9 100644
--- a/nodes/widgets/ui_table.js
+++ b/nodes/widgets/ui_table.js
@@ -19,6 +19,7 @@ module.exports = function (RED) {
return {
title: col.title || col.label,
key: col.key,
+ keyType: col.keyType || 'key',
type: col.type,
width: col.width,
align: col.align
From 25ceafd6f0ae2bb96c411c31804bcdb1ce6128ab Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:19:05 +0100
Subject: [PATCH 3/9] render the property based on propertyType
---
ui/src/widgets/ui-table/UITable.vue | 3 ++-
ui/src/widgets/ui-table/UITableCell.vue | 10 +++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/ui/src/widgets/ui-table/UITable.vue b/ui/src/widgets/ui-table/UITable.vue
index 7d7b27c7a..a22d64986 100644
--- a/ui/src/widgets/ui-table/UITable.vue
+++ b/ui/src/widgets/ui-table/UITable.vue
@@ -34,7 +34,7 @@
{{ col.title }}
-
+
@@ -97,6 +97,7 @@ export default {
return this.props.columns.map((col) => {
return {
key: col.key,
+ keyType: col.keyType || 'key',
title: col.label || col.title,
type: col.type,
align: col.align,
diff --git a/ui/src/widgets/ui-table/UITableCell.vue b/ui/src/widgets/ui-table/UITableCell.vue
index c6826c9f7..b96ce799d 100644
--- a/ui/src/widgets/ui-table/UITableCell.vue
+++ b/ui/src/widgets/ui-table/UITableCell.vue
@@ -53,13 +53,21 @@ export default {
property: {
type: String,
required: true
+ },
+ propertyType: {
+ type: String,
+ default: 'key'
}
},
emits: ['update:modelValue', 'action-click'],
computed: {
value: {
get () {
- // get nested property from item
+ // if this is a string property, just return the string
+ if (this.propertyType === 'str') {
+ return this.property ?? ''
+ }
+ // default to getting property from item by key
const keys = this.property.split('.')
const value = keys.reduce((val, key) => {
return val?.[key] ?? null
From f877f185f3f21a075bc676a77da8209aa24a8fd4 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:19:25 +0100
Subject: [PATCH 4/9] update end to end tests for key typed input
---
cypress/fixtures/flows/dashboard-tables.json | 104 ++++++++++++++++++-
cypress/tests/widgets/table.spec.js | 14 +++
2 files changed, 117 insertions(+), 1 deletion(-)
diff --git a/cypress/fixtures/flows/dashboard-tables.json b/cypress/fixtures/flows/dashboard-tables.json
index a1b0f945e..f4b344a3a 100644
--- a/cypress/fixtures/flows/dashboard-tables.json
+++ b/cypress/fixtures/flows/dashboard-tables.json
@@ -64,7 +64,9 @@
"dashboard-ui-table-default",
"dashboard-ui-table-max-rows",
"dashboard-ui-table-single-row-click",
- "dashboard-ui-table-multi-select"
+ "dashboard-ui-table-multi-select",
+ "dashboard-ui-table-table-buttons-string-value",
+ "dashboard-ui-table-buttons-text-from-payload"
]
]
},
@@ -137,6 +139,106 @@
]
]
},
+ {
+ "id": "dashboard-ui-table-table-buttons-string-value",
+ "type": "ui-table",
+ "z": "node-red-tab-tables",
+ "group": "dashboard-ui-group",
+ "name": "dashboard-ui-table-table-buttons-string-value",
+ "label": "dashboard-ui-table-table-buttons-string-value",
+ "order": 0,
+ "width": 0,
+ "height": 0,
+ "maxrows": 0,
+ "passthru": false,
+ "autocols": false,
+ "showSearch": false,
+ "selectionType": "none",
+ "columns": [
+ {
+ "title": "ID",
+ "key": "id",
+ "keyType": "key",
+ "type": "text",
+ "width": "",
+ "align": "start"
+ },
+ {
+ "title": "Name",
+ "key": "name",
+ "keyType": "key",
+ "type": "text",
+ "width": "",
+ "align": "start"
+ },
+ {
+ "title": "",
+ "key": "Button Text Is String Value",
+ "keyType": "str",
+ "type": "button",
+ "width": "",
+ "align": "start"
+ }
+ ],
+ "mobileBreakpoint": "sm",
+ "mobileBreakpointType": "defaults",
+ "action": "append",
+ "x": 990,
+ "y": 1020,
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "dashboard-ui-table-buttons-text-from-payload",
+ "type": "ui-table",
+ "z": "node-red-tab-tables",
+ "group": "dashboard-ui-group",
+ "name": "dashboard-ui-table-buttons-text-from-payload",
+ "label": "text",
+ "order": 0,
+ "width": 0,
+ "height": 0,
+ "maxrows": 0,
+ "passthru": false,
+ "autocols": false,
+ "showSearch": false,
+ "selectionType": "none",
+ "columns": [
+ {
+ "title": "ID",
+ "key": "id",
+ "keyType": "key",
+ "type": "text",
+ "width": "",
+ "align": "start"
+ },
+ {
+ "title": "Name",
+ "key": "name",
+ "keyType": "key",
+ "type": "text",
+ "width": "",
+ "align": "start"
+ },
+ {
+ "title": "",
+ "key": "name",
+ "keyType": "key",
+ "type": "button",
+ "width": "",
+ "align": "start"
+ }
+ ],
+ "mobileBreakpoint": "sm",
+ "mobileBreakpointType": "defaults",
+ "action": "append",
+ "x": 1050,
+ "y": 1060,
+ "wires": [
+ []
+ ]
+ },
{
"id": "dashboard-ui-group",
"type": "ui-group",
diff --git a/cypress/tests/widgets/table.spec.js b/cypress/tests/widgets/table.spec.js
index 5a0bcb2f8..c19c19caa 100644
--- a/cypress/tests/widgets/table.spec.js
+++ b/cypress/tests/widgets/table.spec.js
@@ -34,4 +34,18 @@ describe('Node-RED Dashboard 2.0 - Tables', () => {
cy.checkOutput('msg.payload[0].value', 4)
})
+
+ it('uses table value for button text', () => {
+ // this one will render the 5 buttons text using the key "name" from the payload
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').should('have.length', 5)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').eq(0).should('have.text', 'Name 1')
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').eq(1).should('have.text', 'Name 2')
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').eq(2).should('have.text', 'Name 3')
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').eq(3).should('have.text', 'Name 4')
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-buttons-text-from-payload').find('button').eq(4).should('have.text', 'Name 5')
+ })
+ it('uses fixed value for button text', () => {
+ // this one uses a `str` value for the button text
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').should('have.text', 'Button Text Is String Value')
+ })
})
From 8e0979d95892bd1e6d7ef9c471f851ebacb69da9 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:47:26 +0100
Subject: [PATCH 5/9] remove action "append" from fixture
---
cypress/fixtures/flows/dashboard-tables.json | 2 --
1 file changed, 2 deletions(-)
diff --git a/cypress/fixtures/flows/dashboard-tables.json b/cypress/fixtures/flows/dashboard-tables.json
index f4b344a3a..0bd3c3ea5 100644
--- a/cypress/fixtures/flows/dashboard-tables.json
+++ b/cypress/fixtures/flows/dashboard-tables.json
@@ -182,7 +182,6 @@
],
"mobileBreakpoint": "sm",
"mobileBreakpointType": "defaults",
- "action": "append",
"x": 990,
"y": 1020,
"wires": [
@@ -232,7 +231,6 @@
],
"mobileBreakpoint": "sm",
"mobileBreakpointType": "defaults",
- "action": "append",
"x": 1050,
"y": 1060,
"wires": [
From 470646b6fdb9af7b7ae0eb28cf57f0ecd3fa8b30 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 30 Sep 2024 16:47:42 +0100
Subject: [PATCH 6/9] fix new tests
---
cypress/tests/widgets/table.spec.js | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/cypress/tests/widgets/table.spec.js b/cypress/tests/widgets/table.spec.js
index c19c19caa..622009a63 100644
--- a/cypress/tests/widgets/table.spec.js
+++ b/cypress/tests/widgets/table.spec.js
@@ -46,6 +46,12 @@ describe('Node-RED Dashboard 2.0 - Tables', () => {
})
it('uses fixed value for button text', () => {
// this one uses a `str` value for the button text
- cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').should('have.text', 'Button Text Is String Value')
+ const fixedString = 'Button Text Is String Value'
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').should('have.length', 5)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').eq(0).should('have.text', fixedString)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').eq(1).should('have.text', fixedString)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').eq(2).should('have.text', fixedString)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').eq(3).should('have.text', fixedString)
+ cy.get('#nrdb-ui-widget-dashboard-ui-table-table-buttons-string-value').find('button').eq(4).should('have.text', fixedString)
})
})
From 26d5a0d01cef1566e79902aaad04d3ff744b9914 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Tue, 1 Oct 2024 17:24:31 +0100
Subject: [PATCH 7/9] update site docs for key/str type
---
docs/nodes/widgets/ui-table.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/nodes/widgets/ui-table.md b/docs/nodes/widgets/ui-table.md
index 79593d256..1c96e4bf2 100644
--- a/docs/nodes/widgets/ui-table.md
+++ b/docs/nodes/widgets/ui-table.md
@@ -118,7 +118,7 @@ _Screenshot of the configuration options available for column types in Node-RED_
If you toggle "off" the "Auto Columns" option, you will have more control to define the columns for your table. For each column, you can define the following:
-- **Key**: The key in the object to use for the column data.
+- **Value**: The value to use for rendering the control. Typically, you would provide a key to the value in the data row object but it can be changed to provide a fixed string value.
- **Label**: The text to display in the column header.
- **Width**: The width of the column, can be in `px`, `%`, or any other valid CSS sizing.
- **Align:** The alignment of the text in the column. Can be `Left`, `Center`, or `Right`. Note that some columns do look odd with "Center" alignment as the header does also contain space for the sorting icon.
@@ -137,7 +137,7 @@ _An example of a ui-table displaying various of the cell types available_
- **Progress**: Renders the cell as a progress bar. The `Value` field should contain a number between 0 and 100.
- **Sparkline - Trend**: Renders the cell as a small line chart without axes. The `Value` field should contain an array of numbers to be plotted.
- **Sparkline - Bar**: Renders the cell as a small bar chart without axes. The `Value` field should contain an array of numbers to be plotted.
-- **Button**: Renders a clickable button in the cell. The label of the button will be the `row[key]` value.
+- **Button**: Renders a clickable button in the cell. The label of the button will be either the `row[key]` or the fixed string entered on the manual column configuration.
- **Row Number**: Renders the row number into the cell.
#### Interaction: Buttons
From 9a61e16f9c2c87c94759ed5102578e26b41ff1da Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Tue, 1 Oct 2024 17:29:52 +0100
Subject: [PATCH 8/9] remove key icon
---
.../node-examples/ui-table-column-config.png | Bin 154425 -> 35124 bytes
nodes/widgets/ui_table.html | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/public/images/node-examples/ui-table-column-config.png b/docs/public/images/node-examples/ui-table-column-config.png
index 721fc15e6b35f5acbbc0e5d9ffe18740303ffddd..145522d478616861084dd15c0d758a23a8329755 100644
GIT binary patch
literal 35124
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