Skip to content

Commit 424b39f

Browse files
authored
Added admin tab on organization view (#2872)
* Added admin tab on organization view
1 parent f9e84be commit 424b39f

7 files changed

Lines changed: 115 additions & 52 deletions

File tree

save-cosv-frontend/src/main/kotlin/com/saveourtool/save/cosv/frontend/components/basic/CosvOrganizationType.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ object CosvOrganizationType : OrganizationType {
77
override val listTab: Array<OrganizationMenuBar> = arrayOf(
88
OrganizationMenuBar.INFO,
99
OrganizationMenuBar.VULNERABILITIES,
10-
OrganizationMenuBar.SETTINGS
10+
OrganizationMenuBar.SETTINGS,
11+
OrganizationMenuBar.ADMIN,
1112
)
1213
}

save-frontend-common/src/main/kotlin/com/saveourtool/save/frontend/common/components/views/organization/OrganizationMenuBar.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ enum class OrganizationMenuBar(private val title: String? = null) {
1111
BENCHMARKS,
1212
CONTESTS,
1313
SETTINGS,
14+
ADMIN,
1415
;
1516

1617
/**

save-frontend-common/src/main/kotlin/com/saveourtool/save/frontend/common/components/views/organization/OrganizationSettingsMenu.kt

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ import com.saveourtool.save.validation.FrontendRoutes
1616
import org.w3c.fetch.Response
1717
import react.*
1818
import react.dom.html.ReactHTML.div
19-
import react.dom.html.ReactHTML.input
2019
import react.dom.html.ReactHTML.label
2120
import react.router.useNavigate
2221
import web.cssom.ClassName
23-
import web.html.InputType
2422

2523
private val organizationGitCredentialsManageCard = manageGitCredentialsCardComponent()
2624

@@ -140,53 +138,6 @@ private fun organizationSettingsMenu() = FC<OrganizationSettingsMenuProps> { pro
140138
}
141139
div {
142140
className = ClassName("card card-body mt-0 p-0")
143-
if (props.selfRole.isSuperAdmin()) {
144-
div {
145-
className = ClassName("d-sm-flex justify-content-center form-check pl-3 pr-3 pt-3")
146-
div {
147-
input {
148-
className = ClassName("form-check-input")
149-
type = InputType.checkbox
150-
value = props.organization.canCreateContests.toString()
151-
id = "canCreateContestsCheckbox"
152-
checked = props.organization.canCreateContests
153-
onChange = {
154-
props.onCanCreateContestsChange(!props.organization.canCreateContests)
155-
}
156-
}
157-
}
158-
div {
159-
label {
160-
className = ClassName("form-check-label")
161-
htmlFor = "canCreateContestsCheckbox"
162-
+"Can create contests"
163-
}
164-
}
165-
}
166-
167-
div {
168-
className = ClassName("d-sm-flex justify-content-center form-check pl-3 pr-3 pt-3")
169-
div {
170-
input {
171-
className = ClassName("form-check-input")
172-
type = InputType.checkbox
173-
value = props.organization.canBulkUpload.toString()
174-
id = "canBulkUploadCosvFilesCheckbox"
175-
checked = props.organization.canBulkUpload
176-
onChange = {
177-
props.onCanBulkUploadCosvFilesChange(!props.organization.canBulkUpload)
178-
}
179-
}
180-
}
181-
div {
182-
label {
183-
className = ClassName("form-check-label")
184-
htmlFor = "canBulkUploadCosvFilesCheckbox"
185-
+"Can bulk upload COSV files"
186-
}
187-
}
188-
}
189-
}
190141
div {
191142
className = ClassName("d-sm-flex align-items-center justify-content-center p-3")
192143
actionButton {

save-frontend-common/src/main/kotlin/com/saveourtool/save/frontend/common/components/views/organization/OrganizationView.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,17 @@ val organizationView: FC<OrganizationProps> = FC { props ->
200200
setProjects(projectsList)
201201
}
202202
}
203+
OrganizationMenuBar.ADMIN -> renderAdminTab {
204+
this.organization = organization
205+
this.onCanCreateContestsChange = { isCreateContests ->
206+
setCanCreateContests(isCreateContests)
207+
onCanCreateContestsChange()
208+
}
209+
this.onCanBulkUploadCosvFilesChange = { isCanBulkUpload ->
210+
setCanBulkUpload(isCanBulkUpload)
211+
onCanBulkUploadCosvFilesChange()
212+
}
213+
}
203214
}
204215
}
205216

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
@file:Suppress("FILE_NAME_MATCH_CLASS")
2+
3+
package com.saveourtool.save.frontend.common.components.views.organization
4+
5+
import com.saveourtool.save.entities.OrganizationDto
6+
import react.FC
7+
import react.Props
8+
import react.dom.html.ReactHTML.div
9+
import react.dom.html.ReactHTML.input
10+
import react.dom.html.ReactHTML.label
11+
import web.cssom.ClassName
12+
import web.html.InputType
13+
14+
val renderAdminTab: FC<RenderAdminTabProps> = FC { props ->
15+
16+
div {
17+
className = ClassName("row justify-content-center mb-2 text-gray-900")
18+
div {
19+
className = ClassName("col-4 mb-2 pl-0 pr-0 mr-2 ml-2")
20+
div {
21+
className = ClassName("text-xs text-center font-weight-bold text-primary text-uppercase mb-3")
22+
+"Main settings"
23+
}
24+
div {
25+
className = ClassName("card card-body mt-0 p-0")
26+
div {
27+
className = ClassName("d-sm-flex justify-content-center form-check pl-3 pr-3 pt-3")
28+
div {
29+
input {
30+
className = ClassName("form-check-input")
31+
type = InputType.checkbox
32+
value = props.organization.canCreateContests.toString()
33+
id = "canCreateContestsCheckbox"
34+
checked = props.organization.canCreateContests
35+
onChange = {
36+
props.onCanCreateContestsChange(!props.organization.canCreateContests)
37+
}
38+
}
39+
}
40+
div {
41+
label {
42+
className = ClassName("form-check-label")
43+
htmlFor = "canCreateContestsCheckbox"
44+
+"Can create contests"
45+
}
46+
}
47+
}
48+
49+
div {
50+
className = ClassName("d-sm-flex justify-content-center form-check pl-3 pr-3 pt-3")
51+
div {
52+
input {
53+
className = ClassName("form-check-input")
54+
type = InputType.checkbox
55+
value = props.organization.canBulkUpload.toString()
56+
id = "canBulkUploadCosvFilesCheckbox"
57+
checked = props.organization.canBulkUpload
58+
onChange = {
59+
props.onCanBulkUploadCosvFilesChange(!props.organization.canBulkUpload)
60+
}
61+
}
62+
}
63+
div {
64+
label {
65+
className = ClassName("form-check-label")
66+
htmlFor = "canBulkUploadCosvFilesCheckbox"
67+
+"Can bulk upload COSV files"
68+
}
69+
}
70+
}
71+
}
72+
}
73+
}
74+
}
75+
76+
/**
77+
* RenderInfoTab component props
78+
*/
79+
@Suppress("MISSING_KDOC_CLASS_ELEMENTS")
80+
external interface RenderAdminTabProps : Props {
81+
/**
82+
* Organization
83+
*/
84+
var organization: OrganizationDto
85+
86+
/**
87+
* Callback invoked in order to change canCreateContests flag
88+
*/
89+
var onCanCreateContestsChange: (Boolean) -> Unit
90+
91+
/**
92+
* Callback invoked in order to change canBulkUpload flag
93+
*/
94+
var onCanBulkUploadCosvFilesChange: (Boolean) -> Unit
95+
}

save-frontend-common/src/main/kotlin/com/saveourtool/save/frontend/common/components/views/organization/RenderOrganizationMenuBar.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ internal val renderOrganizationMenuBar: FC<RenderOrganizationMenuBarProps> = FC
9898
}
9999

100100
val listTabs = props.valuesOrganizationMenuBar.filter {
101-
it != OrganizationMenuBar.SETTINGS || props.selfRole.isHigherOrEqualThan(Role.ADMIN)
101+
// The Settings tab should only be seen by a person with the admin role or higher in this organization.
102+
// The Admin tab is seen only by super-admin
103+
(it != OrganizationMenuBar.SETTINGS || props.selfRole.isHigherOrEqualThan(Role.ADMIN)) &&
104+
(it != OrganizationMenuBar.ADMIN || props.selfRole.isSuperAdmin())
102105
}
103106

104107
div {

save-frontend/src/main/kotlin/com/saveourtool/save/frontend/utils/SaveOrganizationType.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ object SaveOrganizationType : OrganizationType {
99
OrganizationMenuBar.TOOLS,
1010
OrganizationMenuBar.BENCHMARKS,
1111
OrganizationMenuBar.CONTESTS,
12-
OrganizationMenuBar.SETTINGS
12+
OrganizationMenuBar.SETTINGS,
13+
OrganizationMenuBar.ADMIN,
1314
)
1415
}

0 commit comments

Comments
 (0)