diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties index 15733f10c62..9644a8c29f2 100644 --- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties +++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties @@ -126,8 +126,8 @@ project.template.full.stack.description=Fully-functional web application using K project.template.native.console.title=Native Application project.template.native.console.description=Application with Kotlin/Native that works as a standalone application under a specific platform. -project.template.frontend.title=Frontend Application -project.template.frontend.description=Frontend application with Kotlin/JS if you already have a backend. +project.template.browser.title=Browser Application +project.template.browser.description=A blank application targeting the browser project.template.nodejs.title=Node.JS Application project.template.nodejs.description=A blank application targeting Node.js @@ -152,14 +152,11 @@ module.template.ktor.server.setting.engine.jetty=Jetty module.template.native.console.title=Native Application module.template.native.console.description=Simple Kotlin/Native application for your operating system -module.template.js.simple.title=Frontend Application -module.template.js.simple.description=Configurable Kotlin/JS frontend application +module.template.js.simple.title=Browser Application +module.template.js.simple.description=A blank application targeting the browser module.template.js.simple.run.configuration.dev=BrowserDevelopmentRun in continuous mode module.template.js.simple.run.configuration.prod=BrowserProductionRun in continuous mode -module.template.js.simple.setting.rendering.engine=Rendering engine -module.template.js.simple.setting.rendering.kotlinx.html=Use statically-typed Kotlinx.html DSL -module.template.js.simple.setting.rendering.react=Use Kotlin-wrapped React library -module.template.js.simple.setting.rendering.react.styled=Use Kotlin-wrapped React framework with Styled Components +module.template.simple.use.kotlinx.html=Use kotlinx.html module.template.simple.nodejs.title=Node.JS Application module.template.simple.nodejs.description=A blank application targeting Node.js diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index a113acd5b0a..0ab91676b4f 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -274,8 +274,8 @@ object NativeApplicationProjectTemplate : ProjectTemplate() { } object FrontendApplicationProjectTemplate : ProjectTemplate() { - override val title = KotlinNewProjectWizardBundle.message("project.template.frontend.title") - override val description = KotlinNewProjectWizardBundle.message("project.template.frontend.description") + override val title = KotlinNewProjectWizardBundle.message("project.template.browser.title") + override val description = KotlinNewProjectWizardBundle.message("project.template.browser.description") override val id = "frontendApplication" @NonNls diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt index 1db2cfa50f1..a5dfe87f9c6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt @@ -6,8 +6,9 @@ package org.jetbrains.kotlin.tools.projectWizard.templates -import org.jetbrains.annotations.Nls import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle +import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.core.* @@ -16,18 +17,15 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType -import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate -import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle -import org.jetbrains.kotlin.tools.projectWizard.Versions -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin class SimpleJsClientTemplate : Template() { override val title: String = KotlinNewProjectWizardBundle.message("module.template.js.simple.title") @@ -53,14 +51,14 @@ class SimpleJsClientTemplate : Template() { else -> false } - val renderEngine by enumSetting( - KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.engine"), + val useKotlinxHtml by booleanSetting( + KotlinNewProjectWizardBundle.message("module.template.simple.use.kotlinx.html"), GenerationPhase.PROJECT_GENERATION ) { - defaultValue = value(RenderEngine.REACT_WITH_STYLED) + defaultValue = value(false) } - override val settings: List> = listOf(renderEngine) + override val settings: List> = listOf(useKotlinxHtml) override fun Reader.createRunConfigurations(module: ModuleIR): List = buildList { if (module.originalModule.kind == ModuleKind.singleplatformJsBrowser) { @@ -79,19 +77,12 @@ class SimpleJsClientTemplate : Template() { override fun Writer.getRequiredLibraries(module: ModuleIR): List = withSettingsOf(module.originalModule) { buildList { - +ArtifactBasedLibraryDependencyIR( - MavenArtifact(Repositories.KOTLINX, "org.jetbrains.kotlinx", "kotlinx-html-js"), - Versions.KOTLINX.KOTLINX_HTML(KotlinPlugin.version.propertyValue.version), - DependencyType.MAIN - ) - - val kotlinVersion = KotlinPlugin.version.propertyValue - if (renderEngine.reference.settingValue != RenderEngine.KOTLINX_HTML) { - +Dependencies.KOTLIN_REACT(kotlinVersion.version) - +Dependencies.KOTLIN_REACT_DOM(kotlinVersion.version) - if (renderEngine.reference.settingValue == RenderEngine.REACT_WITH_STYLED) { - +Dependencies.KOTLIN_STYLED(kotlinVersion.version) - } + if (useKotlinxHtml.reference.settingValue()) { + +ArtifactBasedLibraryDependencyIR( + MavenArtifact(Repositories.KOTLINX, "org.jetbrains.kotlinx", "kotlinx-html"), + Versions.KOTLINX.KOTLINX_HTML(KotlinPlugin.version.propertyValue.version), + DependencyType.MAIN + ) } } } @@ -109,24 +100,13 @@ class SimpleJsClientTemplate : Template() { if (!hasKtorServNeighbourTarget) { +(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main) } - if (renderEngine.reference.settingValue == RenderEngine.KOTLINX_HTML) { + if (useKotlinxHtml.reference.settingValue()) { +(FileTemplateDescriptor("$id/client.kt.vm") asSrcOf SourcesetType.main) +(FileTemplateDescriptor("$id/TestClient.kt.vm", "TestClient.kt".asPath()) asSrcOf SourcesetType.test) - } else { - +(FileTemplateDescriptor("$id/reactClient.kt.vm", "client.kt".asPath()) asSrcOf SourcesetType.main) - +(FileTemplateDescriptor("$id/reactComponent.kt.vm", "welcome.kt".asPath()) asSrcOf SourcesetType.main) - } - - if (renderEngine.reference.settingValue == RenderEngine.REACT_WITH_STYLED) { - +(FileTemplateDescriptor("$id/WelcomeStyles.kt.vm") asSrcOf SourcesetType.main) } } } - override fun Reader.getAdditionalSettings(module: Module): Map = withSettingsOf(module) { - mapOf("useStyledComponents" to (renderEngine.reference.settingValue == RenderEngine.REACT_WITH_STYLED)) - } - override fun createInterceptors(module: ModuleIR): List = buildList { +interceptTemplate(KtorServerTemplate()) { applicableIf { buildFileIR -> @@ -273,10 +253,4 @@ class SimpleJsClientTemplate : Template() { ) } } - - enum class RenderEngine(@Nls override val text: String) : DisplayableSettingItem { - KOTLINX_HTML(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.kotlinx.html")), - REACT(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.react")), - REACT_WITH_STYLED(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.react.styled")) - } }