diff --git a/packages/builder/src/components/userInterface/temporaryPanelStructure.js b/packages/builder/src/components/userInterface/temporaryPanelStructure.js
index ae39ce3ee2..7a8b336563 100644
--- a/packages/builder/src/components/userInterface/temporaryPanelStructure.js
+++ b/packages/builder/src/components/userInterface/temporaryPanelStructure.js
@@ -406,7 +406,7 @@ export default {
{
name: "List",
_component: "@budibase/standard-components/list",
- description: "Shiny list",
+ description: "Renders all children once per record, of a given model",
icon: "ri-file-list-fill",
properties: {
design: { ...all },
@@ -414,6 +414,17 @@ export default {
},
children: [],
},
+ {
+ name: "Record Detail",
+ _component: "@budibase/standard-components/recorddetail",
+ description: "Loads a record, using an id from the URL, which can be used with {{ context }}, in children",
+ icon: "ri-profile-line",
+ properties: {
+ design: { ...all },
+ settings: [{ label: "Model", key: "model", control: ModelSelect }],
+ },
+ children: [],
+ },
{
name: "Map",
_component: "@budibase/standard-components/datamap",
diff --git a/packages/client/src/render/screenRouter.js b/packages/client/src/render/screenRouter.js
index fb0b005096..4f4256f9fe 100644
--- a/packages/client/src/render/screenRouter.js
+++ b/packages/client/src/render/screenRouter.js
@@ -56,13 +56,13 @@ export const screenRouter = ({ screens, onScreenSelected, window }) => {
const screenIndex = current !== -1 ? current : fallback
- onScreenSelected(screens[screenIndex], _url)
-
try {
!url.state && history.pushState(_url, null, _url)
} catch (_) {
// ignoring an exception here as the builder runs an iframe, which does not like this
}
+
+ onScreenSelected(screens[screenIndex], _url)
}
function click(e) {
diff --git a/packages/standard-components/components.json b/packages/standard-components/components.json
index 8df7756499..2c24c02615 100644
--- a/packages/standard-components/components.json
+++ b/packages/standard-components/components.json
@@ -235,15 +235,14 @@
"description": "A configurable data list that attaches to your backend models.",
"data": true,
"props": {
- "model": "models",
- "layout": {
- "type": "options",
- "default": "list",
- "options": [
- "list",
- "grid"
- ]
- }
+ "model": "models"
+ }
+ },
+ "recorddetail": {
+ "description": "Loads a record, using an ID in the url",
+ "data": true,
+ "props": {
+ "model": "models"
}
},
"datamap": {
diff --git a/packages/standard-components/src/RecordDetail.svelte b/packages/standard-components/src/RecordDetail.svelte
new file mode 100644
index 0000000000..1ebd89e6f0
--- /dev/null
+++ b/packages/standard-components/src/RecordDetail.svelte
@@ -0,0 +1,52 @@
+
+
+
diff --git a/packages/standard-components/src/index.js b/packages/standard-components/src/index.js
index 37d6abab74..a0c6ee025d 100644
--- a/packages/standard-components/src/index.js
+++ b/packages/standard-components/src/index.js
@@ -23,3 +23,4 @@ export { default as list } from "./List.svelte"
export { default as datasearch } from "./DataSearch.svelte"
export { default as datamap } from "./DataMap.svelte"
export { default as embed } from "./Embed.svelte"
+export { default as recorddetail } from "./RecordDetail.svelte"