Types
Link copied to clipboard
class Enum<Item, CellValue : Enum<CellValue>>(val items: EnumEntries<CellValue>, val mapper: @Composable (CellValue) -> String = { it.name }, val filter: (value: CellValue, filter: List<CellValue>) -> Boolean = { value, filter ->
filter.isEmpty() || filter.contains(value)
}, val multiSelect: Boolean = false, val labelAll: String = "ALL", initial: List<CellValue> = emptyList()) : Filter<Item, CellValue>
Link copied to clipboard
Link copied to clipboard
class List<Item, CellValue>(val items: List<CellValue>, val mapper: @Composable (CellValue) -> String = { it.toString() }, val filter: (value: CellValue, filter: List<CellValue>) -> Boolean = { value, filter ->
filter.isEmpty() || filter.contains(value)
}, val multiSelect: Boolean = false, val labelAll: String = "ALL", initial: List<CellValue> = emptyList()) : Filter<Item, CellValue>
Link copied to clipboard
class Number<Item, CellValue : Number>(val filter: (value: CellValue, filter: Filter.Number.State<CellValue>) -> Boolean = { value, filter ->
if (filter.value == null)
true
else {
val valid: Boolean = when (filter.type) {
FilterType.Equal -> value == filter.value
FilterType.NotEqual -> value != filter.value
FilterType.LargerOrEqual -> {
when (value) {
is Double -> (value as Double) >= (filter.value as Double)
is Float -> (value as Float) >= (filter.value as Float)
is Int -> (value as Int) >= (filter.value as Int)
is Long -> (value as Long) >= (filter.value as Long)
is Short -> (value as Short) >= (filter.value as Short)
is Byte -> (value as Byte) >= (filter.value as Byte)
else -> throw RuntimeException("Type not handled!")
}
}
FilterType.Larger -> {
when (value) {
is Double -> (value as Double) > (filter.value as Double)
is Float -> (value as Float) > (filter.value as Float)
is Int -> (value as Int) > (filter.value as Int)
is Long -> (value as Long) > (filter.value as Long)
is Short -> (value as Short) > (filter.value as Short)
is Byte -> (value as Byte) > (filter.value as Byte)
else -> throw RuntimeException("Type not handled!")
}
}
FilterType.SmallerOrEqual -> {
when (value) {
is Double -> (value as Double) <= (filter.value as Double)
is Float -> (value as Float) <= (filter.value as Float)
is Int -> (value as Int) <= (filter.value as Int)
is Long -> (value as Long) <= (filter.value as Long)
is Short -> (value as Short) <= (filter.value as Short)
is Byte -> (value as Byte) <= (filter.value as Byte)
else -> throw RuntimeException("Type not handled!")
}
}
FilterType.Smaller -> {
when (value) {
is Double -> (value as Double) < (filter.value as Double)
is Float -> (value as Float) < (filter.value as Float)
is Int -> (value as Int) < (filter.value as Int)
is Long -> (value as Long) < (filter.value as Long)
is Short -> (value as Short) < (filter.value as Short)
is Byte -> (value as Byte) < (filter.value as Byte)
else -> throw RuntimeException("Type not handled!")
}
}
FilterType.Contains -> value.toString().contains(filter.value.toString())
FilterType.ContainsNot -> !value.toString().contains(filter.value.toString())
FilterType.StartsWith -> value.toString().startsWith(filter.value.toString())
FilterType.EndsWith -> value.toString().endsWith(filter.value.toString())
}
valid
}
}, val instance: CellValue, initial: CellValue? = null) : Filter<Item, CellValue>
Link copied to clipboard
class Text<Item, CellValue>(val cellValueToString: (value: CellValue) -> String = { it.toString() }, val filter: (value: String, filter: Filter.Text.State) -> Boolean = { value, filter ->
if (filter.value.isEmpty())
true
else {
when (filter.type) {
FilterType.Equal -> value.equals(filter.value, filter.ignoreCase)
FilterType.NotEqual -> !value.equals(filter.value, filter.ignoreCase)
FilterType.StartsWith -> value.startsWith(filter.value, filter.ignoreCase)
FilterType.EndsWith -> value.endsWith(filter.value, filter.ignoreCase)
FilterType.Contains -> value.contains(filter.value, filter.ignoreCase)
FilterType.ContainsNot -> !value.contains(filter.value, filter.ignoreCase)
// numeric => not possible!
FilterType.LargerOrEqual,
FilterType.Larger,
FilterType.SmallerOrEqual,
FilterType.Smaller,
-> throw RuntimeException("Type not valid!")
}
}
}, initial: String = "") : Filter<Item, CellValue>