import * as React from "react"; import { SpecialStatus } from "farmbot"; import { t } from "../i18next_wrapper"; interface SaveBtnProps { /** Callback */ onClick?: (e: React.MouseEvent<{}>) => void; status: SpecialStatus; dirtyText?: string; disabled?: boolean; /** Optional alternative to "SAVING" */ savingText?: string; /** Optional alternative to "SAVED" */ savedText?: string; /** Optional alternative color to green */ color?: string; /** Optional boolean for whether the button should be hidden or shown */ hidden?: boolean; } /** Animation during saving action */ const spinner = ; export function SaveBtn(props: SaveBtnProps) { const STATUS_TRANSLATION: Partial> = { [SpecialStatus.DIRTY]: "is-dirty", [SpecialStatus.SAVING]: "is-saving" }; const CAPTIONS: Partial> = { [SpecialStatus.DIRTY]: (props.dirtyText || t("Save") + " *"), [SpecialStatus.SAVING]: props.savingText || t("Saving") }; const { savedText, onClick, hidden, disabled } = props; const statusClass = STATUS_TRANSLATION[props.status || ""] || "is-saved"; const klass = `${props.color || "green"} ${statusClass} save-btn fb-button`; const spinnerEl = (props.status === SpecialStatus.SAVING) ? spinner : ""; return ; }