Skip to content

Commit de0772d

Browse files
authored
Refactor input settings (#907)
* Refactor input settings * Add color input
1 parent 0198c26 commit de0772d

File tree

91 files changed

+692
-632
lines changed

Some content is hidden

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

91 files changed

+692
-632
lines changed

backend/src/main/kotlin/hu/bme/sch/cmsch/admin/GenerateInput.kt

Lines changed: 57 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,43 @@ package hu.bme.sch.cmsch.admin
22

33
import hu.bme.sch.cmsch.model.RoleType
44

5-
const val INPUT_TYPE_TEXT = "text"
6-
const val INPUT_TYPE_NUMBER = "number"
7-
const val INPUT_TYPE_DATE = "date"
8-
const val INPUT_TYPE_SQL_DATE = "sql-date"
9-
const val INPUT_TYPE_TIME = "time"
10-
const val INPUT_TYPE_FLOAT = "float"
11-
const val INPUT_TYPE_FLOAT3 = "float3"
12-
const val INPUT_TYPE_BLOCK_TEXT = "textarea"
13-
const val INPUT_TYPE_BLOCK_TEXT_ANSWER = "textarea-answer"
14-
const val INPUT_TYPE_BLOCK_TEXT_MARKDOWN = "markdown"
15-
const val INPUT_TYPE_FILE = "file"
16-
const val INPUT_TYPE_SWITCH = "checkbox"
17-
const val INPUT_TYPE_HIDDEN = "hidden"
18-
const val INPUT_TYPE_BLOCK_SELECT = "select"
19-
const val INPUT_TYPE_PERMISSIONS = "permissions"
20-
const val INPUT_TYPE_PERMISSION_GROUPS = "permission-groups"
21-
const val INPUT_TYPE_ENTITY_SELECT = "entity-select"
22-
const val INPUT_TYPE_LIST_ENTITIES = "list-entities"
23-
const val INPUT_TYPE_IMAGE_PREVIEW = "image-preview"
24-
const val INPUT_TYPE_FILE_PREVIEW = "file-preview"
25-
const val INPUT_TYPE_FORM_EDITOR = "form-editor"
26-
const val INPUT_TYPE_BOOLEAN_LIST = "boolean-list"
27-
const val INPUT_TYPE_TASK_SUBMISSION_HISTORY = "task-submission-history"
28-
const val INPUT_TYPE_SECTION_SEPARATOR = "section-separator"
29-
const val INPUT_TYPE_DOCS = "docs"
30-
const val INPUT_TYPE_TOKEN_QR_TEXT_FIELD = "token-qr-text-field"
315

32-
const val INTERPRETER_INHERIT = "inherit"
33-
const val INTERPRETER_PATH = "path"
34-
const val INTERPRETER_SEARCH = "search"
35-
const val INTERPRETER_CUSTOM = "custom"
6+
enum class InputType(val value: String) {
7+
TEXT("text"),
8+
NUMBER("number"),
9+
DATE("date"),
10+
SQL_DATE("sql-date"),
11+
TIME("time"),
12+
FLOAT("float"),
13+
FLOAT3("float3"),
14+
BLOCK_TEXT("textarea"),
15+
COLOR("color"),
16+
BLOCK_TEXT_ANSWER("textarea-answer"),
17+
BLOCK_TEXT_MARKDOWN("markdown"),
18+
FILE("file"),
19+
SWITCH("checkbox"),
20+
HIDDEN("hidden"),
21+
BLOCK_SELECT("select"),
22+
PERMISSIONS("permissions"),
23+
PERMISSION_GROUPS("permission-groups"),
24+
ENTITY_SELECT("entity-select"),
25+
LIST_ENTITIES("list-entities"),
26+
IMAGE_PREVIEW("image-preview"),
27+
FILE_PREVIEW("file-preview"),
28+
FORM_EDITOR("form-editor"),
29+
BOOLEAN_LIST("boolean-list"),
30+
TASK_SUBMISSION_HISTORY("task-submission-history"),
31+
SECTION_SEPARATOR("section-separator"),
32+
DOCS("docs"),
33+
TOKEN_QR_TEXT_FIELD("token-qr-text-field");
34+
}
35+
36+
enum class InputInterpreter(val value: String) {
37+
INHERIT("inherit"),
38+
PATH("path"),
39+
SEARCH("search"),
40+
CUSTOM("custom"),
41+
}
3642

3743
const val STYLE_SECURE = "secure"
3844

@@ -41,25 +47,25 @@ const val ICON_SECURE = "encrypted"
4147
@Retention(AnnotationRetention.RUNTIME)
4248
@Target(AnnotationTarget.PROPERTY)
4349
annotation class GenerateInput(
44-
val type: String = INPUT_TYPE_TEXT,
45-
val min: Int = 0,
46-
val max: Int = Integer.MAX_VALUE,
47-
val maxLength: Int = 255,
48-
val label: String = "",
49-
val note: String = "",
50-
val placeholder: String = "",
51-
val autocomplete: String = "off",
52-
val defaultValue: String = "",
53-
val order: Int = 0,
54-
val visible: Boolean = true,
55-
val enabled: Boolean = true,
56-
val ignore: Boolean = false,
57-
val interpreter: String = INTERPRETER_INHERIT,
58-
val fileId: String = "0",
59-
val fileType: String = "image",
60-
val source: Array<String> = [],
61-
val entitySource: String = "Nothing",
62-
val minimumRole: RoleType = RoleType.STAFF,
63-
val icon: String = "",
64-
val style: String = "",
50+
val type: InputType = InputType.TEXT,
51+
val min: Int = 0,
52+
val max: Int = Integer.MAX_VALUE,
53+
val maxLength: Int = 255,
54+
val label: String = "",
55+
val note: String = "",
56+
val placeholder: String = "",
57+
val autocomplete: String = "off",
58+
val defaultValue: String = "",
59+
val order: Int = 0,
60+
val visible: Boolean = true,
61+
val enabled: Boolean = true,
62+
val ignore: Boolean = false,
63+
val interpreter: InputInterpreter = InputInterpreter.INHERIT,
64+
val fileId: String = "0",
65+
val fileType: String = "image",
66+
val source: Array<String> = [],
67+
val entitySource: String = "Nothing",
68+
val minimumRole: RoleType = RoleType.STAFF,
69+
val icon: String = "",
70+
val style: String = "",
6571
)
Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package hu.bme.sch.cmsch.admin
22

3-
const val OVERVIEW_TYPE_ID = "id"
4-
const val OVERVIEW_TYPE_TEXT = "text"
5-
const val OVERVIEW_TYPE_DATE = "date"
6-
const val OVERVIEW_TYPE_BOOLEAN = "boolean"
7-
const val OVERVIEW_TYPE_ICON = "icon"
8-
const val OVERVIEW_TYPE_TIME = "time"
9-
const val OVERVIEW_TYPE_NUMBER = "number"
10-
const val OVERVIEW_TYPE_IMAGE = "image"
3+
/**
4+
* For sorters: https://tabulator.info/docs/5.4/sort#func-builtin
5+
*/
6+
enum class OverviewType(val value: String, val sorter: String, val formatSettings: Array<Pair<String, Any>>) {
7+
ID("id", "number", arrayOf("width" to 100, "vertAlign" to "middle", "visible" to false)),
8+
TEXT("text", "string", arrayOf("vertAlign" to "middle")),
9+
DATE("date", "datetime", arrayOf("vertAlign" to "middle", "formatter" to "datetime")),
10+
COLOR("color", "string", arrayOf("formatter" to "color", "width" to 20)),
11+
BOOLEAN("boolean", "boolean", arrayOf("formatter" to "tickCross", "width" to 120)),
12+
ICON("icon", "string", arrayOf("vertAlign" to "middle", "formatter" to "enumIconsFormatter", "width" to 120)),
13+
TIME("time", "time", arrayOf("vertAlign" to "middle")),
14+
NUMBER("number", "number", arrayOf("vertAlign" to "middle")),
15+
IMAGE("image", "string", arrayOf("formatter" to "image", "width" to 120, "formatterParams" to mapOf("height" to "100px")));
16+
}
17+
1118

1219
@Retention(AnnotationRetention.RUNTIME)
1320
@Target(AnnotationTarget.PROPERTY)
@@ -16,57 +23,22 @@ annotation class GenerateOverview(
1623
val columnName: String = "",
1724
val centered: Boolean = false,
1825
val order: Int = 0,
19-
val renderer: String = OVERVIEW_TYPE_TEXT,
26+
val renderer: OverviewType = OverviewType.TEXT,
2027
val useForSearch: Boolean = true
2128
)
2229

2330
fun GenerateOverview.alignment(): String {
2431
return if (this.centered) "center" else "left"
2532
}
2633

27-
/**
28-
* https://tabulator.info/docs/5.4/sort#func-builtin
29-
*/
30-
fun GenerateOverview.sorter(): String {
31-
return when (this.renderer) {
32-
OVERVIEW_TYPE_ID -> "number"
33-
OVERVIEW_TYPE_TEXT -> "string"
34-
OVERVIEW_TYPE_DATE -> "datetime"
35-
OVERVIEW_TYPE_BOOLEAN -> "boolean"
36-
OVERVIEW_TYPE_TIME -> "time"
37-
OVERVIEW_TYPE_NUMBER -> "number"
38-
OVERVIEW_TYPE_ICON -> "string"
39-
else -> "string"
40-
}
41-
}
42-
4334
fun GenerateOverview.formatValue(value: Any?): Any =
44-
if (renderer == OVERVIEW_TYPE_IMAGE) {
35+
if (renderer == OverviewType.IMAGE) {
4536
if (value is String && value.isNotBlank())
4637
value
4738
else
4839
"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" // empty image
49-
} else if (renderer == OVERVIEW_TYPE_TEXT || renderer == OVERVIEW_TYPE_ICON) {
40+
} else if (renderer == OverviewType.TEXT || renderer == OverviewType.ICON ) {
5041
value ?: ""
5142
} else {
5243
value ?: 0
5344
}
54-
55-
fun GenerateOverview.extra(): Array<Pair<String, Any>> {
56-
return when (this.renderer) {
57-
OVERVIEW_TYPE_ID -> arrayOf("width" to 100, "vertAlign" to "middle", "visible" to false)
58-
OVERVIEW_TYPE_TEXT -> arrayOf("vertAlign" to "middle")
59-
OVERVIEW_TYPE_DATE -> arrayOf("vertAlign" to "middle", "formatter" to "datetime")
60-
OVERVIEW_TYPE_BOOLEAN -> arrayOf("formatter" to "tickCross", "width" to 120)
61-
OVERVIEW_TYPE_IMAGE -> arrayOf(
62-
"formatter" to "image",
63-
"width" to 120,
64-
"formatterParams" to mapOf("height" to "100px")
65-
)
66-
67-
OVERVIEW_TYPE_TIME -> arrayOf("vertAlign" to "middle")
68-
OVERVIEW_TYPE_NUMBER -> arrayOf("vertAlign" to "middle")
69-
OVERVIEW_TYPE_ICON -> arrayOf("vertAlign" to "middle", "formatter" to "enumIconsFormatter", "width" to 120)
70-
else -> emptyArray()
71-
}
72-
}

backend/src/main/kotlin/hu/bme/sch/cmsch/admin/OverviewBuilder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class OverviewBuilder<T : Any>(val type: KClass<T>) {
2424
"title" to it.second.columnName,
2525
"field" to it.first.name,
2626
"hozAlign" to it.second.alignment(),
27-
"sorter" to it.second.sorter(),
28-
*it.second.extra()
27+
"sorter" to it.second.renderer.sorter,
28+
*it.second.renderer.formatSettings
2929
)
3030
}
3131

backend/src/main/kotlin/hu/bme/sch/cmsch/component/admission/AdmissionByFormController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package hu.bme.sch.cmsch.component.admission
22

33
import com.fasterxml.jackson.databind.ObjectMapper
44
import hu.bme.sch.cmsch.admin.GenerateOverview
5-
import hu.bme.sch.cmsch.admin.OVERVIEW_TYPE_ID
5+
import hu.bme.sch.cmsch.admin.OverviewType
66
import hu.bme.sch.cmsch.component.form.FormRepository
77
import hu.bme.sch.cmsch.controller.admin.ControlAction
88
import hu.bme.sch.cmsch.controller.admin.SimpleEntityPage
@@ -29,7 +29,7 @@ import java.util.*
2929

3030
data class AdmissionFormEntry(
3131

32-
@property:GenerateOverview(renderer = OVERVIEW_TYPE_ID, columnName = "ID", order = -1)
32+
@property:GenerateOverview(renderer = OverviewType.ID, columnName = "ID", order = -1)
3333
override var id: Int = 0,
3434

3535
@property:GenerateOverview(columnName = "Form neve", order = 1)

backend/src/main/kotlin/hu/bme/sch/cmsch/component/admission/AdmissionEntryEntity.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ data class AdmissionEntryEntity(
2424
@GeneratedValue
2525
@field:JsonView(value = [ Edit::class ])
2626
@Column(nullable = false)
27-
@property:GenerateInput(type = INPUT_TYPE_HIDDEN, visible = true, ignore = true)
28-
@property:GenerateOverview(renderer = OVERVIEW_TYPE_ID, columnName = "ID", order = -1)
27+
@property:GenerateInput(type = InputType.HIDDEN, visible = true, ignore = true)
28+
@property:GenerateOverview(renderer = OverviewType.ID, columnName = "ID", order = -1)
2929
override var id: Int = 0,
3030

3131
@field:JsonView(value = [ Edit::class, Preview::class, FullDetails::class ])
@@ -37,28 +37,28 @@ data class AdmissionEntryEntity(
3737

3838
@Column(nullable = false)
3939
@field:JsonView(value = [ Edit::class ])
40-
@property:GenerateInput(type = INPUT_TYPE_NUMBER, order = 2, label = "Felhasználó ID-je", min = 0, defaultValue = "0")
40+
@property:GenerateInput(type = InputType.NUMBER, order = 2, label = "Felhasználó ID-je", min = 0, defaultValue = "0")
4141
@property:GenerateOverview(visible = false)
4242
@property:ImportFormat
4343
var userId: Int = 0,
4444

4545
@Column(nullable = false)
4646
@field:JsonView(value = [ Edit::class ])
47-
@property:GenerateInput(type = INPUT_TYPE_DATE, order = 4, label = "Időbélyeg", min = 0, defaultValue = "0")
48-
@property:GenerateOverview(columnName = "Frissült", order = 3, renderer = OVERVIEW_TYPE_DATE, centered = true)
47+
@property:GenerateInput(type = InputType.DATE, order = 4, label = "Időbélyeg", min = 0, defaultValue = "0")
48+
@property:GenerateOverview(columnName = "Frissült", order = 3, renderer = OverviewType.DATE, centered = true)
4949
@property:ImportFormat
5050
var timestamp: Long = 0L,
5151

5252
@Column(nullable = false)
5353
@field:JsonView(value = [ Edit::class ])
54-
@property:GenerateInput(type = INPUT_TYPE_NUMBER, order = 4, label = "Űrlap ID-je", min = 0, defaultValue = "0")
54+
@property:GenerateInput(type = InputType.NUMBER, order = 4, label = "Űrlap ID-je", min = 0, defaultValue = "0")
5555
@property:GenerateOverview(visible = false)
5656
@property:ImportFormat
5757
var formId: Int = 0,
5858

5959
@Column(nullable = false)
6060
@field:JsonView(value = [ Edit::class ])
61-
@property:GenerateInput(type = INPUT_TYPE_NUMBER, order = 5, label = "Beadás ID-je", min = 0, defaultValue = "0")
61+
@property:GenerateInput(type = InputType.NUMBER, order = 5, label = "Beadás ID-je", min = 0, defaultValue = "0")
6262
@property:GenerateOverview(visible = false)
6363
@property:ImportFormat
6464
var responseId: Int = 0,
@@ -67,7 +67,7 @@ data class AdmissionEntryEntity(
6767
@JdbcTypeCode(SqlTypes.VARCHAR)
6868
@Column(nullable = false)
6969
@field:JsonView(value = [ Edit::class ])
70-
@property:GenerateInput(type = INPUT_TYPE_BLOCK_SELECT, order = 6,
70+
@property:GenerateInput(type = InputType.BLOCK_SELECT, order = 6,
7171
label = "Belépési jogosultság",
7272
source = [ "BANNED", "CANNOT_ATTEND", "USER", "ORGANIZER", "VIP", "PERFORMER", "LEAD_ORGANIZER" ])
7373
@property:GenerateOverview(visible = false)
@@ -76,8 +76,8 @@ data class AdmissionEntryEntity(
7676

7777
@field:JsonView(value = [ Edit::class ])
7878
@Column(nullable = false)
79-
@property:GenerateInput(type = INPUT_TYPE_SWITCH, order = 7, label = "Beengedés engedélyezve")
80-
@property:GenerateOverview(columnName = "Engedélyezve", order = 2, centered = true, renderer = OVERVIEW_TYPE_BOOLEAN)
79+
@property:GenerateInput(type = InputType.SWITCH, order = 7, label = "Beengedés engedélyezve")
80+
@property:GenerateOverview(columnName = "Engedélyezve", order = 2, centered = true, renderer = OverviewType.BOOLEAN)
8181
@property:ImportFormat
8282
var allowed: Boolean = false,
8383

@@ -97,7 +97,7 @@ data class AdmissionEntryEntity(
9797

9898
@Column(nullable = false)
9999
@field:JsonView(value = [ Edit::class ])
100-
@property:GenerateInput(type = INPUT_TYPE_NUMBER, order = 10, label = "Beléptető ID-je", min = 0, defaultValue = "0")
100+
@property:GenerateInput(type = InputType.NUMBER, order = 10, label = "Beléptető ID-je", min = 0, defaultValue = "0")
101101
@property:GenerateOverview(visible = false)
102102
@property:ImportFormat
103103
var gateUserId: Int = 0,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/admission/TicketEntity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ data class TicketEntity(
2323
@GeneratedValue
2424
@field:JsonView(value = [ Edit::class ])
2525
@Column(nullable = false)
26-
@property:GenerateInput(type = INPUT_TYPE_HIDDEN, visible = true, ignore = true)
27-
@property:GenerateOverview(renderer = OVERVIEW_TYPE_ID, columnName = "ID", order = -1)
26+
@property:GenerateInput(type = InputType.HIDDEN, visible = true, ignore = true)
27+
@property:GenerateOverview(renderer = OverviewType.ID, columnName = "ID", order = -1)
2828
override var id: Int = 0,
2929

3030
@field:JsonView(value = [ Edit::class, Preview::class, FullDetails::class ])
@@ -43,7 +43,7 @@ data class TicketEntity(
4343

4444
@field:JsonView(value = [ Edit::class ])
4545
@Column(nullable = false)
46-
@property:GenerateInput(type = INPUT_TYPE_SWITCH, order = 3, label = "Profil QR kód használata")
46+
@property:GenerateInput(type = InputType.SWITCH, order = 3, label = "Profil QR kód használata")
4747
@property:GenerateOverview(visible = false)
4848
@property:ImportFormat
4949
var useCmschId: Boolean = false,
@@ -59,7 +59,7 @@ data class TicketEntity(
5959
@JdbcTypeCode(SqlTypes.VARCHAR)
6060
@Column(nullable = false)
6161
@field:JsonView(value = [ Edit::class ])
62-
@property:GenerateInput(type = INPUT_TYPE_BLOCK_SELECT, order = 5,
62+
@property:GenerateInput(type = InputType.BLOCK_SELECT, order = 5,
6363
label = "Belépési jogosultság",
6464
source = [ "BANNED", "CANNOT_ATTEND", "USER", "ORGANIZER", "VIP", "PERFORMER", "LEAD_ORGANIZER" ])
6565
@property:GenerateOverview(visible = false)

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/ApplicationComponent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class ApplicationComponent(
129129
)
130130

131131
val adminBrandColor = SettingProxy(componentSettingService, component,
132-
"adminBrandColor", "#00F460", type = SettingType.TEXT, serverSideOnly = true,
132+
"adminBrandColor", "#00F460", type = SettingType.COLOR, serverSideOnly = true,
133133
fieldName = "Admin menü színe", description = "Ez lesz az admin oldal színe"
134134
)
135135

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/ExtraMenuEntity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ data class ExtraMenuEntity(
1414
@Id
1515
@GeneratedValue
1616
@Column(nullable = false)
17-
@property:GenerateInput(type = INPUT_TYPE_HIDDEN, visible = true, ignore = true)
18-
@property:GenerateOverview(renderer = OVERVIEW_TYPE_ID, columnName = "ID", order = -1)
17+
@property:GenerateInput(type = InputType.HIDDEN, visible = true, ignore = true)
18+
@property:GenerateOverview(renderer = OverviewType.ID, columnName = "ID", order = -1)
1919
override var id: Int = 0,
2020

2121
@Column(nullable = false)
@@ -30,7 +30,7 @@ data class ExtraMenuEntity(
3030
var url: String = "",
3131

3232
@Column(nullable = false)
33-
@property:GenerateInput(type = INPUT_TYPE_SWITCH, order = 3, label = "Külső hivatkozás", note = "A menü külső címre továbbítson-e át")
33+
@property:GenerateInput(type = InputType.SWITCH, order = 3, label = "Külső hivatkozás", note = "A menü külső címre továbbítson-e át")
3434
@property:GenerateOverview(visible = false)
3535
var external: Boolean = false,
3636

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/MenuAdminController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper
44
import com.fasterxml.jackson.dataformat.csv.CsvMapper
55
import com.fasterxml.jackson.dataformat.csv.CsvSchema
66
import hu.bme.sch.cmsch.admin.GenerateOverview
7-
import hu.bme.sch.cmsch.admin.OVERVIEW_TYPE_ID
87
import hu.bme.sch.cmsch.admin.OverviewBuilder
8+
import hu.bme.sch.cmsch.admin.OverviewType
99
import hu.bme.sch.cmsch.controller.admin.ButtonAction
1010
import hu.bme.sch.cmsch.controller.admin.ControlAction
1111
import hu.bme.sch.cmsch.model.IdentifiableEntity
@@ -263,7 +263,7 @@ class MenuAdminController(
263263
}
264264

265265
class MenuSetupByRoleVirtualEntity(
266-
@property:GenerateOverview(renderer = OVERVIEW_TYPE_ID, columnName = "ID", order = -1)
266+
@property:GenerateOverview(renderer = OverviewType.ID, columnName = "ID", order = -1)
267267
override var id: Int = 0,
268268

269269
@property:GenerateOverview(columnName = "Role", order = 1)

0 commit comments

Comments
 (0)