// External imports
import * as React from "react"
import {
AdvancedDataType,
Varchar,
DateTime,
StupidDate,
Float,
Integer,
cryptoHelper
} from "fawkes-server/build/support"
// Internal imports
import * as ce from "../../../../helpers/componentEnhancer"
import Icon from "../../icon"
export interface ParentProps {
value: CompatibleData
label?: string
placeholder?: string
infoIcon?: string
typeOverride?: string
}
interface StateProps { }
interface DispatchProps { }
interface LocalState { }
export type CompatibleData = Varchar | DateTime | StupidDate | Float | Integer
class AdvancedFormInputReadonly extends React.Component<
ParentProps & StateProps & DispatchProps & ce.EnhancedPropsPrivate,
LocalState
> {
controlClasses() {
const classes = ["control"]
if (this.props.infoIcon) classes.push("has-icons-left")
return classes.join(" ")
}
infoIcon() {
if (!this.props.infoIcon) return null
return (
)
}
inputProps(): object {
switch (this.props.value.type) {
case AdvancedDataType.Varchar:
return { type: this.props.typeOverride || "input" }
case AdvancedDataType.Float:
const decimalDigits = this.props.value.options["decimalDigits"]
const step = !isNaN(decimalDigits) ? Math.pow(10, -decimalDigits) : "any"
return { type: this.props.typeOverride || "number", step: step }
case AdvancedDataType.Integer:
return { type: this.props.typeOverride || "number", step: 1 }
case AdvancedDataType.StupidDate:
return { type: this.props.typeOverride || "date" }
case AdvancedDataType.DateTime:
return { type: this.props.typeOverride || "datetime-local" }
default:
return { type: this.props.typeOverride || "input" }
}
}
render() {
const inputId = cryptoHelper.createGuid()
return (
{this.props.label ? (
) : null}
{this.infoIcon()}
)
}
}
const stateMappings: ce.StateMappings = (s, props) => ({})
const dispatchMappings: ce.DispatchMappings = (d, props) => ({})
export default ((): React.ComponentType =>
ce.enhance(AdvancedFormInputReadonly, { stateMappings, dispatchMappings }))()