Skip to content

Commit 9d3f962

Browse files
committed
Update TemplateCreatorDialog to rename action buttons and standardize card types
1 parent 87d384b commit 9d3f962

4 files changed

Lines changed: 190 additions & 151 deletions

File tree

src/main/kotlin/com/github/cnrture/quickprojectwizard/components/QPWActionCard.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ fun QPWActionCard(
2828
actionColor: Color,
2929
isTextVisible: Boolean = true,
3030
type: QPWActionCardType = QPWActionCardType.LARGE,
31+
isEnabled: Boolean = true,
3132
onClick: () -> Unit,
3233
) {
3334
val fontSize = when (type) {
@@ -58,15 +59,18 @@ fun QPWActionCard(
5859
Row(
5960
modifier = modifier
6061
.background(
61-
color = QPWTheme.colors.gray,
62+
color = if (isEnabled) QPWTheme.colors.gray else QPWTheme.colors.lightGray.copy(alpha = 0.1f),
6263
shape = RoundedCornerShape(12.dp),
6364
)
6465
.border(
6566
width = borderSize,
66-
color = actionColor,
67+
color = if (isEnabled) actionColor else QPWTheme.colors.lightGray.copy(alpha = 0.1f),
6768
shape = RoundedCornerShape(12.dp)
6869
)
69-
.clickable { onClick() }
70+
.then(
71+
if (isEnabled) Modifier.clickable { onClick() }
72+
else Modifier
73+
)
7074
.padding(padding),
7175
verticalAlignment = Alignment.CenterVertically,
7276
horizontalArrangement = Arrangement.Center,

src/main/kotlin/com/github/cnrture/quickprojectwizard/toolwindow/manager/settings/SettingsContent.kt

Lines changed: 11 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -148,24 +148,7 @@ fun SettingsContent(project: Project) {
148148
)
149149
}
150150
},
151-
onTemplateAdd = { newTemplate ->
152-
settings.saveTemplate(newTemplate)
153-
triggerRefresh()
154-
analyticsService.track("module_template_added")
155-
Utils.showInfo(
156-
title = "Quick Project Wizard",
157-
message = "Template '${newTemplate.name}' added successfully!",
158-
)
159-
},
160-
onTemplateEdit = { oldTemplate, updatedTemplate ->
161-
settings.saveTemplate(updatedTemplate)
162-
triggerRefresh()
163-
analyticsService.track("module_template_updated")
164-
Utils.showInfo(
165-
title = "Quick Project Wizard",
166-
message = "Template '${updatedTemplate.name}' updated successfully!",
167-
)
168-
},
151+
onRefreshTriggered = { triggerRefresh() },
169152
onSetDefault = { template ->
170153
settings.setDefaultModuleTemplate(template.id)
171154
triggerRefresh()
@@ -212,24 +195,7 @@ fun SettingsContent(project: Project) {
212195
)
213196
}
214197
},
215-
onTemplateAdd = { newTemplate ->
216-
settings.saveFeatureTemplate(newTemplate)
217-
triggerRefresh()
218-
analyticsService.track("feature_template_added")
219-
Utils.showInfo(
220-
title = "Quick Project Wizard",
221-
message = "Feature template '${newTemplate.name}' added successfully!",
222-
)
223-
},
224-
onTemplateEdit = { oldTemplate, updatedTemplate ->
225-
settings.saveFeatureTemplate(updatedTemplate)
226-
triggerRefresh()
227-
analyticsService.track("feature_template_updated")
228-
Utils.showInfo(
229-
title = "Quick Project Wizard",
230-
message = "Feature template '${updatedTemplate.name}' updated successfully!",
231-
)
232-
},
198+
onRefreshTriggered = { triggerRefresh() },
233199
onSetDefault = { template ->
234200
settings.setDefaultFeatureTemplate(template.id)
235201
triggerRefresh()
@@ -270,8 +236,7 @@ private fun ModuleTemplatesTab(
270236
templates: List<ModuleTemplate>,
271237
defaultTemplateId: String,
272238
onTemplateDelete: (ModuleTemplate) -> Unit,
273-
onTemplateAdd: (ModuleTemplate) -> Unit,
274-
onTemplateEdit: (ModuleTemplate, ModuleTemplate) -> Unit,
239+
onRefreshTriggered: () -> Unit,
275240
onSetDefault: (ModuleTemplate) -> Unit,
276241
onImport: () -> Unit,
277242
) {
@@ -300,7 +265,7 @@ private fun ModuleTemplatesTab(
300265
icon = Icons.Rounded.Add,
301266
type = QPWActionCardType.SMALL,
302267
actionColor = QPWTheme.colors.green,
303-
onClick = { TemplateCreatorDialog(onTemplateCreated = { onTemplateAdd(it) }).show() }
268+
onClick = { TemplateCreatorDialog(onRefreshTriggered = onRefreshTriggered).show() }
304269
)
305270
QPWActionCard(
306271
title = "Import",
@@ -316,7 +281,7 @@ private fun ModuleTemplatesTab(
316281
ModuleTemplateCard(
317282
template = template,
318283
defaultTemplateId = defaultTemplateId,
319-
onEdit = { TemplateEditorDialog(template) { onTemplateEdit(template, it) }.show() },
284+
onEdit = { TemplateEditorDialog(template, onRefreshTriggered).show() },
320285
onDelete = { if (!template.isDefault) onTemplateDelete(template) },
321286
onSetDefault = { onSetDefault(template) },
322287
onExport = {
@@ -517,8 +482,7 @@ private fun FeatureTemplatesTab(
517482
templates: List<FeatureTemplate>,
518483
defaultTemplateId: String,
519484
onTemplateDelete: (FeatureTemplate) -> Unit,
520-
onTemplateAdd: (FeatureTemplate) -> Unit,
521-
onTemplateEdit: (FeatureTemplate, FeatureTemplate) -> Unit,
485+
onRefreshTriggered: () -> Unit,
522486
onSetDefault: (FeatureTemplate) -> Unit,
523487
onImport: () -> Unit,
524488
) {
@@ -547,11 +511,7 @@ private fun FeatureTemplatesTab(
547511
icon = Icons.Rounded.Add,
548512
type = QPWActionCardType.SMALL,
549513
actionColor = QPWTheme.colors.green,
550-
onClick = {
551-
FeatureTemplateCreatorDialog(onTemplateCreated = { newTemplate ->
552-
onTemplateAdd(newTemplate)
553-
}).show()
554-
}
514+
onClick = { FeatureTemplateCreatorDialog(onRefreshTriggered).show() }
555515
)
556516
QPWActionCard(
557517
title = "Import",
@@ -567,28 +527,12 @@ private fun FeatureTemplatesTab(
567527
FeatureTemplateCard(
568528
template = template,
569529
defaultTemplateId = defaultTemplateId,
570-
onEdit = {
571-
FeatureTemplateEditorDialog(
572-
template = template,
573-
onTemplateUpdated = { updatedTemplate ->
574-
onTemplateEdit(template, updatedTemplate)
575-
}
576-
).show()
577-
},
578-
onDelete = {
579-
if (!template.isDefault) {
580-
onTemplateDelete(template)
581-
}
582-
},
583-
onSetDefault = {
584-
onSetDefault(template)
585-
},
530+
onEdit = { FeatureTemplateEditorDialog(template, onRefreshTriggered).show() },
531+
onDelete = { if (!template.isDefault) onTemplateDelete(template) },
532+
onSetDefault = { onSetDefault(template) },
586533
onExport = {
587534
Utils.exportFeatureTemplate(project, template) { success, message ->
588-
Utils.showInfo(
589-
title = "Quick Project Wizard",
590-
message = message,
591-
)
535+
Utils.showInfo("Quick Project Wizard", message)
592536
}
593537
}
594538
)

src/main/kotlin/com/github/cnrture/quickprojectwizard/toolwindow/manager/settings/dialog/TemplateCreatorDialog.kt

Lines changed: 92 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,50 +13,58 @@ import androidx.compose.ui.text.TextStyle
1313
import androidx.compose.ui.text.font.FontWeight
1414
import androidx.compose.ui.unit.dp
1515
import androidx.compose.ui.unit.sp
16+
import com.github.cnrture.quickprojectwizard.common.Constants
17+
import com.github.cnrture.quickprojectwizard.common.Utils
1618
import com.github.cnrture.quickprojectwizard.components.*
1719
import com.github.cnrture.quickprojectwizard.data.FeatureTemplate
1820
import com.github.cnrture.quickprojectwizard.data.FileTemplate
1921
import com.github.cnrture.quickprojectwizard.data.ModuleTemplate
22+
import com.github.cnrture.quickprojectwizard.service.AnalyticsService
2023
import com.github.cnrture.quickprojectwizard.service.SettingsService
2124
import com.github.cnrture.quickprojectwizard.theme.QPWTheme
2225
import com.github.cnrture.quickprojectwizard.toolwindow.manager.settings.component.FileTemplateEditor
23-
import com.intellij.openapi.application.ApplicationManager
24-
import com.intellij.openapi.components.service
2526
import java.util.*
2627

2728
class TemplateCreatorDialog(
28-
private val onTemplateCreated: (ModuleTemplate) -> Unit,
29+
private val onRefreshTriggered: () -> Unit,
2930
) : QPWDialogWrapper(800, 1200, modal = false) {
3031

32+
val settings = SettingsService.getInstance()
33+
val analyticsService = AnalyticsService.getInstance()
34+
3135
@Composable
3236
override fun createDesign() {
3337
TemplateCreatorContent(
34-
onSave = { template ->
35-
onTemplateCreated(template)
36-
saveTemplateToSettings(template)
38+
onCancelClick = {
39+
onRefreshTriggered()
3740
close(0)
3841
},
39-
onCancel = {
42+
onApplyClick = { template ->
43+
settings.saveTemplate(template)
44+
},
45+
onOkayClick = { template ->
46+
settings.saveTemplate(template)
47+
analyticsService.track("module_template_added")
48+
Utils.showInfo(
49+
title = "Quick Project Wizard",
50+
message = "Module template '${template.name}' added successfully!",
51+
)
52+
onRefreshTriggered()
4053
close(1)
4154
}
4255
)
4356
}
44-
45-
private fun saveTemplateToSettings(template: ModuleTemplate) {
46-
val settingsService = service<SettingsService>()
47-
ApplicationManager.getApplication().invokeLater {
48-
settingsService.saveTemplate(template)
49-
}
50-
}
5157
}
5258

5359
@Composable
5460
private fun TemplateCreatorContent(
55-
onSave: (ModuleTemplate) -> Unit,
56-
onCancel: () -> Unit,
61+
onCancelClick: () -> Unit,
62+
onApplyClick: (ModuleTemplate) -> Unit,
63+
onOkayClick: (ModuleTemplate) -> Unit,
5764
) {
5865
var templateName by remember { mutableStateOf("") }
5966
val fileTemplates = remember { mutableStateListOf<FileTemplate>() }
67+
var id by remember { mutableStateOf(Constants.EMPTY) }
6068

6169
Column(
6270
modifier = Modifier
@@ -150,63 +158,88 @@ private fun TemplateCreatorContent(
150158
title = "Cancel",
151159
type = QPWActionCardType.MEDIUM,
152160
actionColor = QPWTheme.colors.lightGray,
153-
onClick = onCancel
161+
onClick = onCancelClick
154162
)
155163

156164
QPWActionCard(
157-
title = "Add Template",
158-
icon = Icons.Rounded.Add,
165+
title = "Apply",
159166
type = QPWActionCardType.MEDIUM,
160167
actionColor = QPWTheme.colors.green,
168+
isEnabled = templateName.isNotBlank() && fileTemplates.any { it.fileName.isNotBlank() },
161169
onClick = {
162170
if (templateName.isNotBlank()) {
163171
val template = ModuleTemplate(
164-
id = UUID.randomUUID().toString(),
172+
id = id.ifEmpty { UUID.randomUUID().toString().apply { id = this } },
165173
name = templateName,
166174
fileTemplates = fileTemplates.filter { it.fileName.isNotBlank() },
167175
isDefault = false
168176
)
169-
onSave(template)
177+
onApplyClick(template)
170178
}
171179
}
172180
)
181+
182+
QPWActionCard(
183+
title = "Okay",
184+
type = QPWActionCardType.MEDIUM,
185+
actionColor = QPWTheme.colors.green,
186+
isEnabled = templateName.isNotBlank() && fileTemplates.any { it.fileName.isNotBlank() },
187+
onClick = {
188+
if (templateName.isNotBlank()) {
189+
val template = ModuleTemplate(
190+
id = id.ifEmpty { UUID.randomUUID().toString().apply { id = this } },
191+
name = templateName,
192+
fileTemplates = fileTemplates.filter { it.fileName.isNotBlank() },
193+
isDefault = false
194+
)
195+
onOkayClick(template)
196+
}
197+
},
198+
)
173199
}
174200
}
175201
}
176202

177203
class FeatureTemplateCreatorDialog(
178-
private val onTemplateCreated: (FeatureTemplate) -> Unit,
204+
private val onRefreshTriggered: () -> Unit,
179205
) : QPWDialogWrapper(800, 1200, modal = false) {
180206

207+
val settings = SettingsService.getInstance()
208+
val analyticsService = AnalyticsService.getInstance()
209+
181210
@Composable
182211
override fun createDesign() {
183212
FeatureTemplateCreatorContent(
184-
onSave = { template ->
185-
onTemplateCreated(template)
186-
saveTemplateToSettings(template)
213+
onCancelClick = {
214+
onRefreshTriggered()
187215
close(0)
188216
},
189-
onCancel = {
217+
onApplyClick = { template ->
218+
settings.saveFeatureTemplate(template)
219+
},
220+
onOkayClick = { template ->
221+
settings.saveFeatureTemplate(template)
222+
analyticsService.track("feature_template_added")
223+
Utils.showInfo(
224+
title = "Quick Project Wizard",
225+
message = "Feature template '${template.name}' added successfully!",
226+
)
227+
onRefreshTriggered()
190228
close(1)
191229
}
192230
)
193231
}
194-
195-
private fun saveTemplateToSettings(template: FeatureTemplate) {
196-
val settingsService = service<SettingsService>()
197-
ApplicationManager.getApplication().invokeLater {
198-
settingsService.saveFeatureTemplate(template)
199-
}
200-
}
201232
}
202233

203234
@Composable
204235
private fun FeatureTemplateCreatorContent(
205-
onSave: (FeatureTemplate) -> Unit,
206-
onCancel: () -> Unit,
236+
onCancelClick: () -> Unit,
237+
onApplyClick: (FeatureTemplate) -> Unit,
238+
onOkayClick: (FeatureTemplate) -> Unit,
207239
) {
208240
var templateName by remember { mutableStateOf("") }
209241
val fileTemplates = remember { mutableStateListOf<FileTemplate>() }
242+
var id by remember { mutableStateOf(Constants.EMPTY) }
210243

211244
Column(
212245
modifier = Modifier
@@ -300,25 +333,43 @@ private fun FeatureTemplateCreatorContent(
300333
title = "Cancel",
301334
type = QPWActionCardType.MEDIUM,
302335
actionColor = QPWTheme.colors.lightGray,
303-
onClick = onCancel
336+
onClick = onCancelClick
304337
)
305338

306339
QPWActionCard(
307-
title = "Add Template",
308-
icon = Icons.Rounded.Add,
340+
title = "Apply",
309341
type = QPWActionCardType.MEDIUM,
310342
actionColor = QPWTheme.colors.green,
343+
isEnabled = templateName.isNotBlank() && fileTemplates.any { it.fileName.isNotBlank() },
311344
onClick = {
312345
if (templateName.isNotBlank()) {
313346
val template = FeatureTemplate(
314-
id = UUID.randomUUID().toString(),
347+
id = id.ifEmpty { UUID.randomUUID().toString().apply { id = this } },
315348
name = templateName,
316349
fileTemplates = fileTemplates.filter { it.fileName.isNotBlank() },
317350
isDefault = false
318351
)
319-
onSave(template)
352+
onApplyClick(template)
320353
}
321-
}
354+
},
355+
)
356+
357+
QPWActionCard(
358+
title = "Okay",
359+
type = QPWActionCardType.MEDIUM,
360+
actionColor = QPWTheme.colors.green,
361+
isEnabled = templateName.isNotBlank() && fileTemplates.any { it.fileName.isNotBlank() },
362+
onClick = {
363+
if (templateName.isNotBlank()) {
364+
val template = FeatureTemplate(
365+
id = id.ifEmpty { UUID.randomUUID().toString().apply { id = this } },
366+
name = templateName,
367+
fileTemplates = fileTemplates.filter { it.fileName.isNotBlank() },
368+
isDefault = false
369+
)
370+
onOkayClick(template)
371+
}
372+
},
322373
)
323374
}
324375
}

0 commit comments

Comments
 (0)