Skip to content

Commit f9e84be

Browse files
authored
Split Organization view (#2868)
* Split Organization view
1 parent 057f959 commit f9e84be

44 files changed

Lines changed: 4721 additions & 71 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

save-cloud-common/src/commonMain/kotlin/com/saveourtool/save/validation/FrontendCosvRoutes.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ enum class FrontendCosvRoutes(val path: String) {
1616
ABOUT_US("about"),
1717
BAN("ban"),
1818
COOKIE("cookie"),
19+
CREATE_ORGANIZATION("create-organization"),
1920
ERROR_404("404"),
2021
MANAGE_ORGANIZATIONS("organizations"),
2122
NOT_FOUND("not-found"),
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.saveourtool.save.cosv.frontend.components.basic
2+
3+
import com.saveourtool.save.frontend.common.components.views.organization.OrganizationMenuBar
4+
import com.saveourtool.save.frontend.common.components.views.organization.OrganizationType
5+
6+
object CosvOrganizationType : OrganizationType {
7+
override val listTab: Array<OrganizationMenuBar> = arrayOf(
8+
OrganizationMenuBar.INFO,
9+
OrganizationMenuBar.VULNERABILITIES,
10+
OrganizationMenuBar.SETTINGS
11+
)
12+
}

save-cosv-frontend/src/main/kotlin/com/saveourtool/save/cosv/frontend/routing/BasicRouting.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66

77
package com.saveourtool.save.cosv.frontend.routing
88

9+
import com.saveourtool.save.cosv.frontend.components.basic.CosvOrganizationType
910
import com.saveourtool.save.cosv.frontend.components.views.vuln.*
1011
import com.saveourtool.save.cosv.frontend.components.views.vuln.toprating.topRatingView
1112
import com.saveourtool.save.cosv.frontend.components.views.vuln.vulnerabilityCollectionView
1213
import com.saveourtool.save.cosv.frontend.components.views.welcome.vulnWelcomeView
1314
import com.saveourtool.save.frontend.common.components.views.FallbackView
15+
import com.saveourtool.save.frontend.common.components.views.organization.createOrganizationView
16+
import com.saveourtool.save.frontend.common.components.views.organization.organizationView
1417
import com.saveourtool.save.frontend.common.components.views.registrationView
1518
import com.saveourtool.save.frontend.common.components.views.userprofile.userProfileView
1619
import com.saveourtool.save.frontend.common.components.views.usersettings.userSettingsView
@@ -29,6 +32,14 @@ import react.router.*
2932
val basicRouting: FC<UserInfoAwareMutablePropsWithChildren> = FC { props ->
3033
useUserStatusRedirects(props.userInfo?.status)
3134

35+
val organizationView = withRouter { location, params ->
36+
organizationView {
37+
organizationName = params["owner"]!!
38+
currentUserInfo = props.userInfo
39+
organizationType = CosvOrganizationType
40+
}
41+
}
42+
3243
val userProfileView = withRouter { _, params ->
3344
userProfileView {
3445
userName = params["name"]!!
@@ -68,6 +79,9 @@ val basicRouting: FC<UserInfoAwareMutablePropsWithChildren> = FC { props ->
6879
vulnerabilityView.create() to "$VULNERABILITY_SINGLE/:identifier",
6980
cosvSchemaView.create() to VULN_COSV_SCHEMA,
7081
topRatingView.create() to VULN_TOP_RATING,
82+
83+
createOrganizationView.create() to CREATE_ORGANIZATION,
84+
organizationView.create() to ":owner",
7185
userProfileView.create() to "$PROFILE/:name",
7286

7387
userSettingsView.create {
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
@file:Suppress(
2+
"FILE_NAME_MATCH_CLASS",
3+
"FILE_WILDCARD_IMPORTS",
4+
"WildcardImport",
5+
"HEADER_MISSING_IN_NON_SINGLE_CLASS_FILE",
6+
)
7+
8+
package com.saveourtool.save.frontend.common.components.basic
9+
10+
import com.saveourtool.save.frontend.common.components.basic.testsuiteselector.TestSuiteSelectorMode
11+
import com.saveourtool.save.testsuite.TestSuiteVersioned
12+
13+
import react.ChildrenBuilder
14+
import react.dom.html.ReactHTML.a
15+
import react.dom.html.ReactHTML.div
16+
import react.dom.html.ReactHTML.h5
17+
import react.dom.html.ReactHTML.p
18+
import react.dom.html.ReactHTML.small
19+
import web.cssom.ClassName
20+
21+
/**
22+
* @param testSuites
23+
* @param selectedTestSuites
24+
* @param displayMode if used not inside TestSuiteSelector, should be null, otherwise should be mode of TestSuiteSelector
25+
* @param onTestSuiteClick
26+
*/
27+
@Suppress("TOO_LONG_FUNCTION", "LongMethod")
28+
fun ChildrenBuilder.showAvailableTestSuites(
29+
testSuites: List<TestSuiteVersioned>,
30+
selectedTestSuites: List<TestSuiteVersioned>,
31+
displayMode: TestSuiteSelectorMode?,
32+
onTestSuiteClick: (TestSuiteVersioned) -> Unit,
33+
) {
34+
div {
35+
className = ClassName("list-group")
36+
testSuites.forEach { testSuite ->
37+
val active = if (testSuite in selectedTestSuites) {
38+
"active"
39+
} else {
40+
""
41+
}
42+
a {
43+
className = ClassName("btn list-group-item list-group-item-action $active")
44+
onClick = {
45+
onTestSuiteClick(testSuite)
46+
}
47+
div {
48+
className = ClassName("d-flex w-100 justify-content-between")
49+
h5 {
50+
className = ClassName("mb-1")
51+
+(testSuite.name)
52+
}
53+
small {
54+
+testSuite.language
55+
}
56+
}
57+
div {
58+
className = ClassName("clearfix mb-1")
59+
div {
60+
className = ClassName("float-left")
61+
p {
62+
+testSuite.description
63+
}
64+
}
65+
div {
66+
className = ClassName("float-right")
67+
if (displayMode.shouldDisplayVersion()) {
68+
small {
69+
asDynamic()["data-toggle"] = "tooltip"
70+
asDynamic()["data-placement"] = "bottom"
71+
title = "Hash of commit/branch name/tag name"
72+
+testSuite.version
73+
}
74+
}
75+
}
76+
}
77+
div {
78+
className = ClassName("clearfix")
79+
small {
80+
className = ClassName("float-left")
81+
asDynamic()["data-toggle"] = "tooltip"
82+
asDynamic()["data-placement"] = "bottom"
83+
title = "Test suite tags"
84+
+testSuite.tags
85+
}
86+
87+
small {
88+
className = ClassName("float-right")
89+
asDynamic()["data-toggle"] = "tooltip"
90+
asDynamic()["data-placement"] = "bottom"
91+
title = "Plugin type"
92+
+testSuite.plugins
93+
}
94+
}
95+
}
96+
}
97+
}
98+
}
99+
100+
private fun TestSuiteSelectorMode?.shouldDisplayVersion() = this != null && this != TestSuiteSelectorMode.BROWSER

0 commit comments

Comments
 (0)