Skip to content

Commit edca634

Browse files
committed
feat: stub out links to perform character actions
1 parent 422e5f9 commit edca634

File tree

1 file changed

+161
-65
lines changed

1 file changed

+161
-65
lines changed

electron/renderer/pages/home.tsx

+161-65
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { EuiListGroup, EuiListGroupItem, EuiPanel } from '@elastic/eui';
12
import { type ReactNode, useCallback, useState } from 'react';
23
import { runInBackground } from '../../common/async';
34
import { equalsIgnoreCase } from '../../common/string';
@@ -26,131 +27,226 @@ const HomePage: React.FC = (): ReactNode => {
2627
setCharacters(await window.api.listCharacters());
2728
}, []);
2829

30+
// TODO for each runInBackground, need to catch and display errors
31+
32+
const quitCharacter = useCallback(async () => {
33+
if (playingCharacter) {
34+
const characterName = playingCharacter.characterName;
35+
logger.info('quitting character', { characterName });
36+
await window.api.sendCommand('quit');
37+
setPlayingCharacter(undefined);
38+
}
39+
}, [logger, playingCharacter]);
40+
41+
const onClickQuitCharacter = useCallback(() => {
42+
runInBackground(async () => {
43+
await quitCharacter();
44+
});
45+
}, [quitCharacter]);
46+
2947
const saveAccount = useCallback(
48+
async (options: { accountName: string; accountPassword: string }) => {
49+
const { accountName } = options;
50+
logger.info('saving account', { accountName });
51+
await window.api.saveAccount(options);
52+
await listCharacters();
53+
},
54+
[logger, listCharacters]
55+
);
56+
57+
const onClickSaveAccount = useCallback(
3058
(options: { accountName: string; accountPassword: string }) => {
3159
runInBackground(async () => {
32-
const { accountName } = options;
33-
logger.info('saving account', { accountName });
34-
await window.api.saveAccount(options);
35-
await listCharacters();
60+
await saveAccount(options);
3661
});
3762
},
38-
[]
63+
[saveAccount]
3964
);
4065

41-
const removeAccount = useCallback((options: { accountName: string }) => {
42-
runInBackground(async () => {
66+
const removeAccount = useCallback(
67+
async (options: { accountName: string }) => {
4368
const { accountName } = options;
4469
logger.info('removing account', { accountName });
4570
if (equalsIgnoreCase(playingCharacter?.accountName, accountName)) {
4671
await quitCharacter();
4772
}
4873
await window.api.removeAccount(options);
4974
await listCharacters();
50-
});
51-
}, []);
75+
},
76+
[logger, playingCharacter, listCharacters, quitCharacter]
77+
);
78+
79+
const onClickRemoveAccount = useCallback(
80+
(options: { accountName: string }) => {
81+
runInBackground(async () => {
82+
await removeAccount(options);
83+
});
84+
},
85+
[removeAccount]
86+
);
87+
88+
const saveCharacter = useCallback(
89+
async (options: {
90+
gameCode: string;
91+
accountName: string;
92+
characterName: string;
93+
}) => {
94+
const { characterName } = options;
95+
logger.info('adding character', { characterName });
96+
await window.api.saveCharacter(options);
97+
await listCharacters();
98+
},
99+
[logger, listCharacters]
100+
);
52101

53-
const addCharacter = useCallback(
102+
const onClickSaveCharacter = useCallback(
54103
(options: {
55104
gameCode: string;
56105
accountName: string;
57106
characterName: string;
58107
}) => {
59108
runInBackground(async () => {
60-
const { characterName } = options;
61-
logger.info('saving character', { characterName });
62-
await window.api.saveCharacter(options);
63-
await listCharacters();
109+
await saveCharacter(options);
64110
});
65111
},
66-
[]
112+
[saveCharacter]
67113
);
68114

69115
const removeCharacter = useCallback(
116+
async (options: {
117+
gameCode: string;
118+
accountName: string;
119+
characterName: string;
120+
}) => {
121+
const { gameCode, accountName, characterName } = options;
122+
logger.info('removing character', { characterName });
123+
if (
124+
equalsIgnoreCase(playingCharacter?.gameCode, gameCode) &&
125+
equalsIgnoreCase(playingCharacter?.accountName, accountName) &&
126+
equalsIgnoreCase(playingCharacter?.characterName, characterName)
127+
) {
128+
await quitCharacter();
129+
}
130+
await window.api.removeCharacter(options);
131+
await listCharacters();
132+
},
133+
[logger, playingCharacter, listCharacters, quitCharacter]
134+
);
135+
136+
const onClickRemoveCharacter = useCallback(
70137
(options: {
71138
gameCode: string;
72139
accountName: string;
73140
characterName: string;
74141
}) => {
75142
runInBackground(async () => {
76-
const { gameCode, accountName, characterName } = options;
77-
logger.info('removing character', { characterName });
78-
if (
79-
equalsIgnoreCase(playingCharacter?.gameCode, gameCode) &&
80-
equalsIgnoreCase(playingCharacter?.accountName, accountName) &&
81-
equalsIgnoreCase(playingCharacter?.characterName, characterName)
82-
) {
83-
await quitCharacter();
84-
}
85-
await window.api.removeCharacter(options);
86-
await listCharacters();
143+
await removeCharacter(options);
87144
});
88145
},
89-
[]
146+
[removeCharacter]
90147
);
91148

92149
const playCharacter = useCallback(
93-
(options: {
150+
async (options: {
151+
accountName: string;
152+
characterName: string;
94153
gameCode: string;
154+
}) => {
155+
const { accountName, characterName, gameCode } = options;
156+
logger.info('playing character', { characterName });
157+
await window.api.playCharacter(options);
158+
setPlayingCharacter({
159+
accountName,
160+
characterName,
161+
gameCode,
162+
});
163+
//--
164+
},
165+
[logger]
166+
);
167+
168+
const onClickPlayCharacter = useCallback(
169+
(options: {
95170
accountName: string;
96171
characterName: string;
172+
gameCode: string;
97173
}) => {
98174
runInBackground(async () => {
99-
const { gameCode, accountName, characterName } = options;
100-
logger.info('playing character', { characterName });
101-
await window.api.playCharacter(options);
102-
setPlayingCharacter({
103-
gameCode,
104-
accountName,
105-
characterName,
106-
});
175+
await playCharacter(options);
107176
});
108177
},
109-
[]
178+
[playCharacter]
110179
);
111180

112-
const quitCharacter = useCallback(async () => {
113-
if (playingCharacter) {
114-
const characterName = playingCharacter.characterName;
115-
logger.info('quitting character', { characterName });
116-
await window.api.sendCommand('quit');
117-
setPlayingCharacter(undefined);
118-
}
119-
}, []);
181+
const accountName = 'xxx';
182+
const accountPassword = 'xxx';
183+
const characterName = 'xxx';
184+
const gameCode = 'xxx';
120185

121186
return (
122187
<div>
123-
<h2>Characters</h2>
124-
<div>
125-
<button
188+
<EuiListGroup>
189+
<EuiListGroupItem
190+
label="Save Account"
191+
onClick={() => {
192+
onClickSaveAccount({
193+
accountName,
194+
accountPassword,
195+
});
196+
}}
197+
/>
198+
<EuiListGroupItem
199+
label="Remove Account"
126200
onClick={() => {
127-
saveAccount({
128-
accountName: 'test',
129-
accountPassword: 'test',
201+
onClickRemoveAccount({
202+
accountName,
130203
});
131204
}}
132-
>
133-
Save Account
134-
</button>
135-
<button
205+
/>
206+
<EuiListGroupItem
207+
label="Save Character"
136208
onClick={() => {
137-
addCharacter({
138-
gameCode: 'DR',
139-
accountName: 'test',
140-
characterName: 'test',
209+
onClickSaveCharacter({
210+
accountName,
211+
characterName,
212+
gameCode,
141213
});
142214
}}
143-
>
144-
Add Character
145-
</button>
146-
</div>
215+
/>
216+
<EuiListGroupItem
217+
label="Remove Character"
218+
onClick={() => {
219+
onClickRemoveCharacter({
220+
accountName,
221+
characterName,
222+
gameCode,
223+
});
224+
}}
225+
/>
226+
<EuiListGroupItem
227+
label="Play Character"
228+
onClick={() => {
229+
onClickPlayCharacter({
230+
accountName,
231+
characterName,
232+
gameCode,
233+
});
234+
}}
235+
/>
236+
<EuiListGroupItem
237+
label="Quit Character"
238+
onClick={() => {
239+
onClickQuitCharacter();
240+
}}
241+
/>
242+
</EuiListGroup>
147243
{characters.map((character) => {
148244
return (
149-
<div key={character.characterName}>
245+
<EuiPanel key={character.characterName}>
150246
Game Code: {character.gameCode} <br />
151247
Account Name: {character.accountName} <br />
152248
Character Name: {character.characterName}
153-
</div>
249+
</EuiPanel>
154250
);
155251
})}
156252
</div>

0 commit comments

Comments
 (0)