From d5340803bddde7844be3ad2483c4c655b705f368 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 24 Aug 2020 18:06:21 +0300 Subject: [PATCH] [JS, Wizard] Add react application template ^KT-41417 fixed --- .../jetbrains/kotlin/idea/KotlinIcons.java | 1 + .../ProjectTemplateSettingComponent.kt | 1 + .../kotlin/idea/icons/wizard/react.svg | 10 +++++++ .../KotlinNewProjectWizardBundle.properties | 3 +++ .../index.html.vm | 0 .../projectTemplates/ProjectTemplate.kt | 26 +++++++++++++++++++ .../templates/ReactJsClientTemplate.kt | 2 +- .../templates/SimpleJsClientTemplate.kt | 2 +- 8 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg rename libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/{simpleJsClient => jsClient}/index.html.vm (100%) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java index 071c8ff3784..4e80cfc618a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java @@ -78,5 +78,6 @@ public interface KotlinIcons { Icon MAC_OS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/macOS.svg"); Icon WINDOWS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/windows.svg"); Icon NODE_JS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/nodejs.svg"); + Icon REACT_JS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/react.svg"); } } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt index 1f7d2945cdb..6008c0b0768 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt @@ -85,6 +85,7 @@ private val ProjectTemplate.icon: Icon FullStackWebApplicationProjectTemplate -> KotlinIcons.Wizard.WEB NativeApplicationProjectTemplate -> KotlinIcons.Wizard.NATIVE FrontendApplicationProjectTemplate -> KotlinIcons.Wizard.JS + ReactApplicationProjectTemplate -> KotlinIcons.Wizard.REACT_JS MultiplatformMobileApplicationProjectTemplate -> KotlinIcons.Wizard.MULTIPLATFORM_MOBILE MultiplatformMobileLibraryProjectTemplate -> KotlinIcons.Wizard.MULTIPLATFORM_MOBILE_LIBRARY NodeJsApplicationProjectTemplate -> KotlinIcons.Wizard.NODE_JS diff --git a/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg b/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg new file mode 100644 index 00000000000..223b071308d --- /dev/null +++ b/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties index 4da8fb2b0e9..43e324e2789 100644 --- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties +++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties @@ -129,6 +129,9 @@ project.template.native.console.description=Application with Kotlin/Native that project.template.browser.title=Browser Application project.template.browser.description=A blank application targeting the browser +project.template.react.title=React Application +project.template.react.description=React application targeting Browser + project.template.nodejs.title=Node.JS Application project.template.nodejs.description=A blank application targeting Node.js diff --git a/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/index.html.vm b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/jsClient/index.html.vm similarity index 100% rename from libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/index.html.vm rename to libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/jsClient/index.html.vm 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 0ab91676b4f..c8e4de5e8e4 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 @@ -77,6 +77,7 @@ sealed class ProjectTemplate : DisplayableSettingItem { MultiplatformLibraryProjectTemplate, NativeApplicationProjectTemplate, FrontendApplicationProjectTemplate, + ReactApplicationProjectTemplate, FullStackWebApplicationProjectTemplate, NodeJsApplicationProjectTemplate ) @@ -298,6 +299,31 @@ object FrontendApplicationProjectTemplate : ProjectTemplate() { ) } +object ReactApplicationProjectTemplate : ProjectTemplate() { + override val title = KotlinNewProjectWizardBundle.message("project.template.react.title") + override val description = KotlinNewProjectWizardBundle.message("project.template.react.description") + override val id = "reactApplication" + + @NonNls + override val suggestedProjectName = "myKotlinJsApplication" + override val projectKind = ProjectKind.Js + + override val setsPluginSettings: List> + get() = listOf( + KotlinPlugin.modules.reference withValue listOf( + Module( + "js", + BrowserJsSinglePlatformModuleConfigurator, + template = ReactJsClientTemplate(), + sourcesets = SourcesetType.ALL.map { type -> + Sourceset(type, dependencies = emptyList()) + }, + subModules = emptyList() + ) + ) + ) +} + object MultiplatformMobileApplicationProjectTemplate : ProjectTemplate() { override val title = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.title") override val description = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.description") diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt index abc6a4feb83..2460ee427d1 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt @@ -52,7 +52,7 @@ class ReactJsClientTemplate : JsClientTemplate() { buildList { val hasKtorServNeighbourTarget = hasKtorServNeighbourTarget(module) if (!hasKtorServNeighbourTarget) { - +(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main) + +(FileTemplateDescriptor("jsClient/index.html.vm") asResourceOf SourcesetType.main) } +(FileTemplateDescriptor("$id/reactClient.kt.vm", "client.kt".asPath()) asSrcOf SourcesetType.main) +(FileTemplateDescriptor("$id/reactComponent.kt.vm", "welcome.kt".asPath()) asSrcOf SourcesetType.main) 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 b41d7256588..7ccbb7c7398 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 @@ -57,7 +57,7 @@ class SimpleJsClientTemplate : JsClientTemplate() { buildList { val hasKtorServNeighbourTarget = hasKtorServNeighbourTarget(module) if (!hasKtorServNeighbourTarget) { - +(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main) + +(FileTemplateDescriptor("jsClient/index.html.vm") asResourceOf SourcesetType.main) } if (useKotlinxHtml.reference.settingValue()) { +(FileTemplateDescriptor("$id/client.kt.vm") asSrcOf SourcesetType.main)