@ -180,7 +180,8 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) {
return (
return (
< >
< >
< Forms.FormTitle > replacement < / Forms.FormTitle >
{ /* FormTitle adds a class if className is not set, so we set it to an empty string to prevent that */ }
< Forms.FormTitle className = "" > replacement < / Forms.FormTitle >
< TextInput
< TextInput
value = { replacement ? . toString ( ) }
value = { replacement ? . toString ( ) }
onChange = { onChange }
onChange = { onChange }
@ -188,7 +189,7 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) {
/ >
/ >
{ ! isFunc && (
{ ! isFunc && (
< div className = "vc-text-selectable" >
< div className = "vc-text-selectable" >
< Forms.FormTitle > Cheat Sheet < / Forms.FormTitle >
< Forms.FormTitle className = { Margins . top8 } > Cheat Sheet < / Forms.FormTitle >
{ Object . entries ( {
{ Object . entries ( {
"\\i" : "Special regex escape sequence that matches identifiers (varnames, classnames, etc.)" ,
"\\i" : "Special regex escape sequence that matches identifiers (varnames, classnames, etc.)" ,
"$$" : "Insert a $" ,
"$$" : "Insert a $" ,
@ -220,11 +221,12 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) {
interface FullPatchInputProps {
interface FullPatchInputProps {
setFind ( v : string ) : void ;
setFind ( v : string ) : void ;
setParsedFind ( v : string | RegExp ) : void ;
setMatch ( v : string ) : void ;
setMatch ( v : string ) : void ;
setReplacement ( v : string | ReplaceFn ) : void ;
setReplacement ( v : string | ReplaceFn ) : void ;
}
}
function FullPatchInput ( { setFind , set Match, setReplacement } : FullPatchInputProps ) {
function FullPatchInput ( { setFind , set ParsedFind, set Match, setReplacement } : FullPatchInputProps ) {
const [ fullPatch , setFullPatch ] = React . useState < string > ( "" ) ;
const [ fullPatch , setFullPatch ] = React . useState < string > ( "" ) ;
const [ fullPatchError , setFullPatchError ] = React . useState < string > ( "" ) ;
const [ fullPatchError , setFullPatchError ] = React . useState < string > ( "" ) ;
@ -233,6 +235,7 @@ function FullPatchInput({ setFind, setMatch, setReplacement }: FullPatchInputPro
setFullPatchError ( "" ) ;
setFullPatchError ( "" ) ;
setFind ( "" ) ;
setFind ( "" ) ;
setParsedFind ( "" ) ;
setMatch ( "" ) ;
setMatch ( "" ) ;
setReplacement ( "" ) ;
setReplacement ( "" ) ;
return ;
return ;
@ -256,7 +259,8 @@ function FullPatchInput({ setFind, setMatch, setReplacement }: FullPatchInputPro
if ( ! parsed . replacement . match ) throw new Error ( "No 'replacement.match' field" ) ;
if ( ! parsed . replacement . match ) throw new Error ( "No 'replacement.match' field" ) ;
if ( ! parsed . replacement . replace ) throw new Error ( "No 'replacement.replace' field" ) ;
if ( ! parsed . replacement . replace ) throw new Error ( "No 'replacement.replace' field" ) ;
setFind ( parsed . find ) ;
setFind ( parsed . find instanceof RegExp ? parsed . find . toString ( ) : parsed . find ) ;
setParsedFind ( parsed . find ) ;
setMatch ( parsed . replacement . match instanceof RegExp ? parsed.replacement.match.source : parsed.replacement.match ) ;
setMatch ( parsed . replacement . match instanceof RegExp ? parsed.replacement.match.source : parsed.replacement.match ) ;
setReplacement ( parsed . replacement . replace ) ;
setReplacement ( parsed . replacement . replace ) ;
setFullPatchError ( "" ) ;
setFullPatchError ( "" ) ;
@ -266,7 +270,7 @@ function FullPatchInput({ setFind, setMatch, setReplacement }: FullPatchInputPro
}
}
return < >
return < >
< Forms.FormText > Paste your full JSON patch here to fill out the fields < / Forms.FormText >
< Forms.FormText className = { Margins . bottom8 } > Paste your full JSON patch here to fill out the fields < / Forms.FormText >
< TextArea value = { fullPatch } onChange = { setFullPatch } onBlur = { update } / >
< TextArea value = { fullPatch } onChange = { setFullPatch } onBlur = { update } / >
{ fullPatchError !== "" && < Forms.FormText style = { { color : "var(--text-danger)" } } > { fullPatchError } < / Forms.FormText > }
{ fullPatchError !== "" && < Forms.FormText style = { { color : "var(--text-danger)" } } > { fullPatchError } < / Forms.FormText > }
< / > ;
< / > ;
@ -274,6 +278,7 @@ function FullPatchInput({ setFind, setMatch, setReplacement }: FullPatchInputPro
function PatchHelper() {
function PatchHelper() {
const [ find , setFind ] = React . useState < string > ( "" ) ;
const [ find , setFind ] = React . useState < string > ( "" ) ;
const [ parsedFind , setParsedFind ] = React . useState < string | RegExp > ( "" ) ;
const [ match , setMatch ] = React . useState < string > ( "" ) ;
const [ match , setMatch ] = React . useState < string > ( "" ) ;
const [ replacement , setReplacement ] = React . useState < string | ReplaceFn > ( "" ) ;
const [ replacement , setReplacement ] = React . useState < string | ReplaceFn > ( "" ) ;
@ -285,20 +290,34 @@ function PatchHelper() {
const code = React . useMemo ( ( ) = > {
const code = React . useMemo ( ( ) = > {
return `
return `
{
{
find : $ { JSON. stringify ( f ind) } ,
find : $ { parsedFind instanceof RegExp ? parsedFind . toString ( ) : JSON . stringify ( parsedF ind) } ,
replacement : {
replacement : {
match : /${match.replace(/ ( ? < ! \ \ ) \ //g, "\\/")}/,
match : /${match.replace(/ ( ? < ! \ \ ) \ //g, "\\/")}/,
replace : $ { typeof replacement === "function" ? replacement . toString ( ) : JSON . stringify ( replacement ) }
replace : $ { typeof replacement === "function" ? replacement . toString ( ) : JSON . stringify ( replacement ) }
}
}
}
}
` .trim();
` .trim();
} , [ f ind, match , replacement ] ) ;
} , [ parsedF ind, match , replacement ] ) ;
function onFindChange ( v : string ) {
function onFindChange ( v : string ) {
setFindError ( void 0 ) ;
setFindError ( void 0 ) ;
setFind ( v ) ;
setFind ( v ) ;
if ( v . length ) {
}
findCandidates ( { find : v , setModule , setError : setFindError } ) ;
function onFindBlur() {
try {
let parsedFind = find as string | RegExp ;
if ( /^\/.+?\/$/ . test ( find ) ) parsedFind = new RegExp ( find . slice ( 1 , - 1 ) ) ;
setFindError ( void 0 ) ;
setFind ( find ) ;
setParsedFind ( parsedFind ) ;
if ( find . length ) {
findCandidates ( { find : parsedFind , setModule , setError : setFindError } ) ;
}
} catch ( e : any ) {
setFindError ( ( e as Error ) . message ) ;
}
}
}
}
@ -317,19 +336,21 @@ function PatchHelper() {
< Forms.FormTitle > full patch < / Forms.FormTitle >
< Forms.FormTitle > full patch < / Forms.FormTitle >
< FullPatchInput
< FullPatchInput
setFind = { onFindChange }
setFind = { onFindChange }
setParsedFind = { setParsedFind }
setMatch = { onMatchChange }
setMatch = { onMatchChange }
setReplacement = { setReplacement }
setReplacement = { setReplacement }
/ >
/ >
< Forms.FormTitle > find < / Forms.FormTitle >
< Forms.FormTitle className = { Margins . top8 } > find < / Forms.FormTitle >
< TextInput
< TextInput
type = "text"
type = "text"
value = { find }
value = { find }
onChange = { onFindChange }
onChange = { onFindChange }
onBlur = { onFindBlur }
error = { findError }
error = { findError }
/ >
/ >
< Forms.FormTitle > match < / Forms.FormTitle >
< Forms.FormTitle className = { Margins . top8 } > match < / Forms.FormTitle >
< CheckedTextInput
< CheckedTextInput
value = { match }
value = { match }
onChange = { onMatchChange }
onChange = { onMatchChange }
@ -342,6 +363,7 @@ function PatchHelper() {
} }
} }
/ >
/ >
< div className = { Margins . top8 } / >
< ReplacementInput
< ReplacementInput
replacement = { replacement }
replacement = { replacement }
setReplacement = { setReplacement }
setReplacement = { setReplacement }