11import { useEffect , useState } from "react" ;
2- import { FrameworkTypes , PluginSettings , PluginUI } from "plugin-ui" ;
2+ import { PluginUI } from "plugin-ui" ;
3+ import {
4+ FrameworkTypes ,
5+ PluginSettings ,
6+ ConversionMessage ,
7+ Message ,
8+ HTMLPreview ,
9+ LinearGradientConversion ,
10+ SolidColorConversion ,
11+ ErrorMessage ,
12+ SettingsChangedMessage ,
13+ } from "types" ;
14+ import { postUISettingsChangingMessage } from "./messaging" ;
315
416interface AppState {
517 code : string ;
6- selectedFramework : FrameworkTypes | null ;
18+ selectedFramework : FrameworkTypes ;
719 isLoading : boolean ;
8- htmlPreview : {
9- size : { width : number ; height : number } ;
10- content : string ;
11- } | null ;
12- preferences : PluginSettings | null ;
13- colors : {
14- hex : string ;
15- colorName : string ;
16- exportValue : string ;
17- contrastWhite : number ;
18- contrastBlack : number ;
19- } [ ] ;
20- gradients : { cssPreview : string ; exportedValue : string } [ ] ;
20+ htmlPreview : HTMLPreview ;
21+ settings : PluginSettings | null ;
22+ colors : SolidColorConversion [ ] ;
23+ gradients : LinearGradientConversion [ ] ;
2124}
2225
26+ const emptyPreview = { size : { width : 0 , height : 0 } , content : "" } ;
2327export default function App ( ) {
2428 const [ state , setState ] = useState < AppState > ( {
2529 code : "" ,
26- selectedFramework : null ,
30+ selectedFramework : "HTML" ,
2731 isLoading : false ,
28- htmlPreview : null ,
29- preferences : null ,
32+ htmlPreview : emptyPreview ,
33+ settings : null ,
3034 colors : [ ] ,
3135 gradients : [ ] ,
3236 } ) ;
@@ -38,42 +42,47 @@ export default function App() {
3842
3943 useEffect ( ( ) => {
4044 window . onmessage = ( event : MessageEvent ) => {
41- const message = event . data . pluginMessage ;
42- console . log ( "[ui] message received:" , message ) ;
43- switch ( message . type ) {
45+ const untypedMessage = event . data . pluginMessage as Message ;
46+ console . log ( "[ui] message received:" , untypedMessage ) ;
47+
48+ switch ( untypedMessage . type ) {
4449 case "code" :
50+ const conversionMessage = untypedMessage as ConversionMessage ;
4551 setState ( ( prevState ) => ( {
4652 ...prevState ,
47- code : message . data ,
48- htmlPreview : message . htmlPreview ,
49- colors : message . colors ,
50- gradients : message . gradients ,
51- preferences : message . preferences ,
52- selectedFramework : message . preferences . framework ,
53+ ...conversionMessage ,
54+ selectedFramework : conversionMessage . settings . framework ,
5355 } ) ) ;
5456 break ;
57+
5558 case "pluginSettingChanged" :
59+ const settingsMessage = untypedMessage as SettingsChangedMessage ;
5660 setState ( ( prevState ) => ( {
5761 ...prevState ,
58- preferences : message . data ,
59- selectedFramework : message . data . framework ,
62+ settings : settingsMessage . settings ,
63+ selectedFramework : settingsMessage . settings . framework ,
6064 } ) ) ;
6165 break ;
66+
6267 case "empty" :
68+ // const emptyMessage = untypedMessage as EmptyMessage;
6369 setState ( ( prevState ) => ( {
6470 ...prevState ,
6571 code : "// No layer is selected." ,
66- htmlPreview : null ,
72+ htmlPreview : emptyPreview ,
6773 colors : [ ] ,
6874 gradients : [ ] ,
6975 } ) ) ;
7076 break ;
77+
7178 case "error" :
79+ const errorMessage = untypedMessage as ErrorMessage ;
80+
7281 setState ( ( prevState ) => ( {
7382 ...prevState ,
7483 colors : [ ] ,
7584 gradients : [ ] ,
76- code : `Error :(\n// ${ message . data } ` ,
85+ code : `Error :(\n// ${ errorMessage . error } ` ,
7786 } ) ) ;
7887 break ;
7988 default :
@@ -112,17 +121,9 @@ export default function App() {
112121 // code: "// Loading...",
113122 selectedFramework : updatedFramework ,
114123 } ) ) ;
115-
116- parent . postMessage (
117- {
118- pluginMessage : {
119- type : "pluginSettingChanged" ,
120- key : "framework" ,
121- value : updatedFramework ,
122- } ,
123- } ,
124- "*" ,
125- ) ;
124+ postUISettingsChangingMessage ( "framework" , updatedFramework , {
125+ targetOrigin : "*" ,
126+ } ) ;
126127 } ;
127128 console . log ( "state.code" , state . code . slice ( 0 , 25 ) ) ;
128129
@@ -134,24 +135,12 @@ export default function App() {
134135 selectedFramework = { state . selectedFramework }
135136 setSelectedFramework = { handleFrameworkChange }
136137 htmlPreview = { state . htmlPreview }
137- preferences = { state . preferences }
138- onPreferenceChange = { ( key : string , value : boolean | string ) => {
139- parent . postMessage (
140- {
141- pluginMessage : {
142- type : "pluginSettingChanged" ,
143- key : key ,
144- value : value ,
145- } ,
146- } ,
147- "*" ,
148- ) ;
149- } }
138+ settings = { state . settings }
139+ onPreferenceChanged = { ( key : string , value : boolean | string ) =>
140+ postUISettingsChangingMessage ( key , value , { targetOrigin : "*" } )
141+ }
150142 colors = { state . colors }
151- gradients = { state . gradients . map ( ( gradient ) => ( {
152- ...gradient ,
153- exportValue : gradient . exportedValue ,
154- } ) ) }
143+ gradients = { state . gradients }
155144 />
156145 </ div >
157146 ) ;
0 commit comments