1
1
import { useEffect , useState } from "react" ;
2
+ import { SaveIcon } from "./components/SaveIcon" ;
2
3
import { Input } from "./components/Input" ;
3
4
import { Toggle } from "./components/Toggle" ;
4
5
import {
@@ -8,6 +9,12 @@ import {
8
9
MessageResponse ,
9
10
} from "./types" ;
10
11
12
+ enum PersistableSetting {
13
+ MARGIN ,
14
+ STOPLOSS ,
15
+ RISK ,
16
+ }
17
+
11
18
// 5% (stoploss) von margin 20€ sind 1€. 1€ sind 10% vom risk 10€. also brauche ich 10x leverage um auf 10€ risk zu kommen.
12
19
13
20
function App ( ) {
@@ -23,24 +30,31 @@ function App() {
23
30
const [ leverage , setLeverage ] = useState ( 1 ) ;
24
31
const [ marketPrice , setMarketPrice ] = useState ( 0 ) ;
25
32
const [ tradeType , setTradeType ] = useState < TradeType > ( TradeType . LONG ) ;
33
+ const [ marginStored , setMarginStored ] = useState ( true ) ;
34
+ const [ stoplossStored , setStoplossStored ] = useState ( true ) ;
35
+ const [ riskStored , setRiskStored ] = useState ( true ) ;
26
36
27
37
useEffect ( ( ) => {
28
38
if ( stoplossRelative ) {
39
+ console . log ( "OVERWRITE STOPLOSS" ) ;
29
40
setStoplossAbsolute ( marketPrice - ( marketPrice * stoplossRelative ) / 100 ) ;
30
41
}
31
- } , [ marketPrice , stoplossRelative , setStoplossAbsolute ] ) ;
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ } , [ marketPrice ] ) ;
32
44
33
45
useEffect ( ( ) => {
34
46
if ( marginRelative ) {
35
47
setMarginAbsolute ( ( equity * marginRelative ) / 100 ) ;
36
48
}
37
- } , [ equity , marginRelative , setMarginAbsolute ] ) ;
49
+ // eslint-disable-next-line react-hooks/exhaustive-deps
50
+ } , [ equity ] ) ;
38
51
39
52
useEffect ( ( ) => {
40
53
if ( riskRelative ) {
41
54
setRiskAbsolute ( ( equity * riskRelative ) / 100 ) ;
42
55
}
43
- } , [ equity , riskRelative , setRiskAbsolute ] ) ;
56
+ // eslint-disable-next-line react-hooks/exhaustive-deps
57
+ } , [ equity ] ) ;
44
58
45
59
useEffect ( ( ) => {
46
60
setLeverage (
@@ -71,8 +85,21 @@ function App() {
71
85
setEquity ( response . equity . val ) ;
72
86
setUnit ( response . equity . unit ) ;
73
87
setMarketPrice ( response . marketPrice . val ) ;
74
- setStoplossAbsolute ( response . stoploss . val ) ;
75
88
setTradeType ( response . tradeType ?? TradeType . LONG ) ;
89
+
90
+ // market price is changed and useEffect then overwrites stoploss and margin
91
+ setTimeout ( ( ) => {
92
+ if ( response . stoploss . val ) {
93
+ console . log ( "INITIAL SET STOPLOSS" ) ;
94
+ setStoplossAbsolute ( response . stoploss . val ) ;
95
+ // TODO relative stoploss
96
+ }
97
+
98
+ if ( response . margin . val ) {
99
+ setMarginAbsolute ( response . margin . val ) ;
100
+ // TODO relative margin
101
+ }
102
+ } , 0 ) ;
76
103
}
77
104
) ;
78
105
}
@@ -108,6 +135,43 @@ function App() {
108
135
}
109
136
} , [ tabID , tradeType ] ) ;
110
137
138
+ const storeSetting = ( setting : PersistableSetting , value : any ) => {
139
+ chrome . storage . sync . set ( { [ String ( setting ) ] : value } , function ( ) {
140
+ console . log ( "Value is set to " + value ) ;
141
+ chrome . storage . sync . get ( String ( setting ) , function ( result ) {
142
+ console . log ( "result" , result ) ;
143
+ value = result [ String ( setting ) ] ;
144
+ } ) ;
145
+ } ) ;
146
+ } ;
147
+
148
+ const getSetting = ( setting : PersistableSetting ) : Promise < any > => {
149
+ return new Promise ( ( resolve ) => {
150
+ chrome . storage . sync . get ( String ( setting ) , function ( result ) {
151
+ resolve ( result [ String ( setting ) ] ) ;
152
+ } ) ;
153
+ } ) ;
154
+ } ;
155
+
156
+ useEffect ( ( ) => {
157
+ ( async ( ) => {
158
+ const margin = await getSetting ( PersistableSetting . MARGIN ) ;
159
+ if ( margin ) {
160
+ setMarginRelative ( margin ) ;
161
+ }
162
+
163
+ const stoploss = await getSetting ( PersistableSetting . STOPLOSS ) ;
164
+ if ( stoploss ) {
165
+ setStoplossRelative ( stoploss ) ;
166
+ }
167
+
168
+ const risk = await getSetting ( PersistableSetting . RISK ) ;
169
+ if ( risk ) {
170
+ setRiskRelative ( risk ) ;
171
+ }
172
+ } ) ( ) ;
173
+ } , [ ] ) ;
174
+
111
175
return (
112
176
< div className = "flex flex-col h-full p-8" >
113
177
< div >
@@ -146,7 +210,7 @@ function App() {
146
210
className = "mb-4"
147
211
showLabel
148
212
/>
149
- < fieldset >
213
+ < fieldset className = "my-4" >
150
214
< legend > Stoploss</ legend >
151
215
< Input
152
216
label = "Stoploss Absolute"
@@ -157,9 +221,10 @@ function App() {
157
221
onChange = { ( e ) => {
158
222
setStoplossRelative ( ( 100 * Number ( e . target . value ) ) / marketPrice ) ;
159
223
setStoplossAbsolute ( Number ( e . target . value ) ) ;
224
+ setStoplossStored ( false ) ;
160
225
} }
161
226
value = { stoplossAbsolute }
162
- className = "mb-4 "
227
+ className = "mb-2 "
163
228
/>
164
229
< Input
165
230
label = "Stoploss Relative"
@@ -171,13 +236,25 @@ function App() {
171
236
marketPrice - ( marketPrice * Number ( e . target . value ) ) / 100
172
237
) ;
173
238
setStoplossRelative ( Number ( e . target . value ) ) ;
239
+ setStoplossStored ( false ) ;
174
240
} }
241
+ append = {
242
+ ! stoplossStored && (
243
+ < SaveIcon
244
+ className = "w-6 h-6 cursor-pointer"
245
+ onClick = { ( ) => {
246
+ storeSetting ( PersistableSetting . STOPLOSS , stoplossRelative ) ;
247
+ setStoplossStored ( true ) ;
248
+ } }
249
+ />
250
+ )
251
+ }
175
252
value = { stoplossRelative . toFixed ( 2 ) }
176
- className = "mb-4 "
253
+ className = "mb-2 "
177
254
step = { 0.1 }
178
255
/>
179
256
</ fieldset >
180
- < fieldset >
257
+ < fieldset className = "my-4" >
181
258
< legend > Margin</ legend >
182
259
< Input
183
260
label = "Margin Absolute"
@@ -189,9 +266,10 @@ function App() {
189
266
onChange = { ( e ) => {
190
267
setMarginRelative ( ( 100 * Number ( e . target . value ) ) / equity ) ;
191
268
setMarginAbsolute ( Number ( e . target . value ) ) ;
269
+ setMarginStored ( false ) ;
192
270
} }
193
271
step = { 0.1 }
194
- className = "mb-4 "
272
+ className = "mb-2 "
195
273
/>
196
274
< Input
197
275
label = "Margin Relative"
@@ -202,12 +280,24 @@ function App() {
202
280
onChange = { ( e ) => {
203
281
setMarginRelative ( Number ( e . target . value ) ) ;
204
282
setMarginAbsolute ( ( equity * Number ( e . target . value ) ) / 100 ) ;
283
+ setMarginStored ( false ) ;
205
284
} }
206
285
step = { 0.1 }
207
- className = "mb-4"
286
+ append = {
287
+ ! marginStored && (
288
+ < SaveIcon
289
+ className = "w-6 h-6 cursor-pointer"
290
+ onClick = { ( ) => {
291
+ storeSetting ( PersistableSetting . MARGIN , marginRelative ) ;
292
+ setMarginStored ( true ) ;
293
+ } }
294
+ />
295
+ )
296
+ }
297
+ className = "mb-2"
208
298
/>
209
299
</ fieldset >
210
- < fieldset >
300
+ < fieldset className = "my-4" >
211
301
< legend > Risk</ legend >
212
302
< Input
213
303
label = "Risk Absolute"
@@ -218,10 +308,11 @@ function App() {
218
308
onChange = { ( e ) => {
219
309
setRiskRelative ( ( 100 * Number ( e . target . value ) ) / equity ) ;
220
310
setRiskAbsolute ( Number ( e . target . value ) ) ;
311
+ setRiskStored ( false ) ;
221
312
} }
222
313
prepend = "$"
223
314
append = { unit }
224
- className = "mb-4 "
315
+ className = "mb-2 "
225
316
/>
226
317
< Input
227
318
label = "Risk Relative"
@@ -232,9 +323,21 @@ function App() {
232
323
onChange = { ( e ) => {
233
324
setRiskRelative ( Number ( e . target . value ) ) ;
234
325
setRiskAbsolute ( ( equity * Number ( e . target . value ) ) / 100 ) ;
326
+ setRiskStored ( false ) ;
235
327
} }
236
328
prepend = "%"
237
- className = "mb-4"
329
+ append = {
330
+ ! riskStored && (
331
+ < SaveIcon
332
+ className = "w-6 h-6 cursor-pointer"
333
+ onClick = { ( ) => {
334
+ storeSetting ( PersistableSetting . RISK , riskRelative ) ;
335
+ setRiskStored ( true ) ;
336
+ } }
337
+ />
338
+ )
339
+ }
340
+ className = "mb-2"
238
341
/>
239
342
</ fieldset >
240
343
< Input
@@ -267,8 +370,22 @@ function App() {
267
370
>
268
371
Marc Mintel
269
372
</ a >
373
+ . Available open source on{ " " }
374
+ < a
375
+ href = "https://github.com/mmintel/chrome-bybit-extension"
376
+ target = "_blank"
377
+ rel = "noreferrer"
378
+ className = "underline"
379
+ >
380
+ Github
381
+ </ a >
270
382
.
271
383
</ p >
384
+ < p className = "py-4 mt-auto text-xs text-center text-gray-500" >
385
+ < a className = "underline" href = "#" >
386
+ Buy me a coffe if you like this.
387
+ </ a >
388
+ </ p >
272
389
</ div >
273
390
) ;
274
391
}
0 commit comments