Fixing issue - this will replace any bindings when copying and pasting a stack of components with 'Invalid binding'.

This commit is contained in:
mike12345567 2021-02-22 15:49:57 +00:00
parent 7ccb905c4b
commit 23d10e1949
2 changed files with 19 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import { TableNames } from "../constants"
// Regex to match all instances of template strings // Regex to match all instances of template strings
const CAPTURE_VAR_INSIDE_TEMPLATE = /{{([^}]+)}}/g const CAPTURE_VAR_INSIDE_TEMPLATE = /{{([^}]+)}}/g
const CAPTURE_HBS_TEMPLATE = /{{[\S\s]*?}}/g
/** /**
* Gets all bindable data context fields and instance fields. * Gets all bindable data context fields and instance fields.
@ -273,6 +274,20 @@ const buildFormSchema = component => {
return schema return schema
} }
/**
* Recurses the input object to remove any instances of bindings.
*/
export function removeBindings(obj) {
for (let [key, value] of Object.entries(obj)) {
if (typeof value === "object") {
obj[key] = removeBindings(value)
} else if (typeof value === "string") {
obj[key] = value.replace(CAPTURE_HBS_TEMPLATE, "Invalid binding")
}
}
return obj
}
/** /**
* utility function for the readableToRuntimeBinding and runtimeToReadableBinding. * utility function for the readableToRuntimeBinding and runtimeToReadableBinding.
*/ */

View File

@ -15,6 +15,7 @@ import { FrontendTypes } from "constants"
import analytics from "analytics" import analytics from "analytics"
import { findComponentType, findComponentParent } from "../storeUtils" import { findComponentType, findComponentParent } from "../storeUtils"
import { uuid } from "../uuid" import { uuid } from "../uuid"
import { removeBindings } from "../dataBinding"
const INITIAL_FRONTEND_STATE = { const INITIAL_FRONTEND_STATE = {
apps: [], apps: [],
@ -408,6 +409,9 @@ export const getFrontendStore = () => {
return state return state
} }
// immediately need to remove bindings, currently these aren't valid when pasted
state.componentToPaste = removeBindings(state.componentToPaste)
// Clone the component to paste // Clone the component to paste
// Retain the same ID if cutting as things may be referencing this component // Retain the same ID if cutting as things may be referencing this component
const cut = state.componentToPaste.isCut const cut = state.componentToPaste.isCut