1
- import { ParentProps , createSignal } from "solid-js" ;
1
+ /* eslint-disable solid/reactivity */
2
+ import { ParentProps , Show , createSignal } from "solid-js" ;
2
3
import "./eraser-link.css" ;
3
4
4
5
const ERASER_TRACKING_PARAMS = "" ;
@@ -28,9 +29,11 @@ const getEraserLinkData = (href: string): EraserLinkData | null => {
28
29
} ;
29
30
} ;
30
31
31
- const EraserLink = ( props : ParentProps < {
32
- linkData : EraserLinkData ;
33
- } > ) => {
32
+ const EraserLink = (
33
+ props : ParentProps < {
34
+ linkData : EraserLinkData ;
35
+ } >
36
+ ) => {
34
37
const workspaceUrl = `https://app.eraser.io/workspace/${ props . linkData . workspaceId } ` ;
35
38
const elementParams = props . linkData . elementsId
36
39
? `elements=${ props . linkData . elementsId } `
@@ -43,22 +46,38 @@ const EraserLink = (props: ParentProps<{
43
46
const [ isLoaded , setIsLoaded ] = createSignal ( false ) ;
44
47
45
48
// if there are no children or this was a right click-copy as markdown embed.
46
- if (
47
- props . children === undefined ||
48
- ( Array . isArray ( props . children ) && props . children [ 0 ] === "View on Eraser" )
49
- ) {
50
- const imageUrl = elementParams
51
- ? `${ workspaceUrl } /preview?${ elementParams } &type=embed`
52
- : `${ workspaceUrl } /preview` ;
53
-
54
- return (
49
+ return (
50
+ < Show
51
+ when = {
52
+ props . children === undefined ||
53
+ ( Array . isArray ( props . children ) &&
54
+ props . children [ 0 ] === "View on Eraser" )
55
+ }
56
+ fallback = {
57
+ < a
58
+ href = { linkUrl }
59
+ class = "dark:text-solid-darklink break-normal text-solid-lightlink duration-100 ease-in font-semibold leading-normal transition hover:underline"
60
+ rel = "noopener noreferrer"
61
+ >
62
+ { props . children }
63
+ </ a >
64
+ }
65
+ >
55
66
< a
56
67
href = { linkUrl }
57
68
class = "relative inline-block"
58
69
target = "_blank"
59
70
rel = "noopener noreferrer"
60
71
>
61
- < img src = { imageUrl } alt = { "" } onLoad = { ( ) => setIsLoaded ( true ) } />
72
+ < img
73
+ src = {
74
+ elementParams
75
+ ? `${ workspaceUrl } /preview?${ elementParams } &type=embed`
76
+ : `${ workspaceUrl } /preview`
77
+ }
78
+ alt = { "" }
79
+ onLoad = { ( ) => setIsLoaded ( true ) }
80
+ />
62
81
{ isLoaded ( ) ? (
63
82
< div class = "eraserLinkContainer" >
64
83
< img
@@ -69,31 +88,27 @@ const EraserLink = (props: ParentProps<{
69
88
</ div >
70
89
) : null }
71
90
</ a >
72
- ) ;
73
- }
74
- return (
75
- < a
76
- href = { linkUrl }
77
- class = "dark:text-solid-darklink break-normal text-solid-lightlink duration-100 ease-in font-semibold leading-normal transition hover:underline"
78
- rel = "noopener noreferrer"
79
- >
80
- { props . children }
81
- </ a >
91
+ </ Show >
82
92
) ;
83
93
} ;
84
94
85
95
export default function EraserOrAnchor ( props : ParentProps < { href : string } > ) {
86
96
const eraserLinkData = getEraserLinkData ( props . href ) ;
87
- if ( eraserLinkData ) {
88
- return < EraserLink linkData = { eraserLinkData } > { props . children } </ EraserLink > ;
89
- }
97
+
90
98
return (
91
- < a
92
- { ...props }
93
- class = "dark:text-solid-darklink break-normal text-solid-lightlink duration-100 ease-in font-semibold leading-normal transition hover:underline"
94
- rel = "noopener noreferrer"
99
+ < Show
100
+ when = { eraserLinkData !== null }
101
+ fallback = {
102
+ < a
103
+ { ...props }
104
+ class = "dark:text-solid-darklink break-normal text-solid-lightlink duration-100 ease-in font-semibold leading-normal transition hover:underline"
105
+ rel = "noopener noreferrer"
106
+ >
107
+ { props . children }
108
+ </ a >
109
+ }
95
110
>
96
- { props . children }
97
- </ a >
111
+ < EraserLink linkData = { eraserLinkData } > { props . children } </ EraserLink >
112
+ </ Show >
98
113
) ;
99
114
}
0 commit comments