From f418231b6b2f5e030a0d2dcc390c314602b1f740 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 6 Apr 2024 09:22:10 -0700 Subject: Move modern to the top --- src/settings/components/BaseCommandView.jsx | 79 +++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/settings/components/BaseCommandView.jsx (limited to 'src/settings/components/BaseCommandView.jsx') diff --git a/src/settings/components/BaseCommandView.jsx b/src/settings/components/BaseCommandView.jsx new file mode 100644 index 00000000..bb70c3b9 --- /dev/null +++ b/src/settings/components/BaseCommandView.jsx @@ -0,0 +1,79 @@ +import React, { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; +import { + TextField, FormControlLabel, Checkbox, +} from '@mui/material'; +import { useTranslation } from '../../common/components/LocalizationProvider'; +import SelectField from '../../common/components/SelectField'; +import { prefixString } from '../../common/util/stringUtils'; +import useCommandAttributes from '../../common/attributes/useCommandAttributes'; + +const BaseCommandView = ({ deviceId, item, setItem }) => { + const t = useTranslation(); + + const textEnabled = useSelector((state) => state.session.server.textEnabled); + + const availableAttributes = useCommandAttributes(t); + + const [attributes, setAttributes] = useState([]); + + useEffect(() => { + if (item && item.type) { + setAttributes(availableAttributes[item.type] || []); + } else { + setAttributes([]); + } + }, [availableAttributes, item]); + + return ( + <> + setItem({ ...item, type: e.target.value, attributes: {} })} + endpoint={deviceId ? `/api/commands/types?${new URLSearchParams({ deviceId }).toString()}` : '/api/commands/types'} + keyGetter={(it) => it.type} + titleGetter={(it) => t(prefixString('command', it.type))} + label={t('sharedType')} + /> + {attributes.map(({ key, name, type }) => { + if (type === 'boolean') { + return ( + { + const updateItem = { ...item, attributes: { ...item.attributes } }; + updateItem.attributes[key] = e.target.checked; + setItem(updateItem); + }} + /> + )} + label={name} + /> + ); + } + return ( + { + const updateItem = { ...item, attributes: { ...item.attributes } }; + updateItem.attributes[key] = type === 'number' ? Number(e.target.value) : e.target.value; + setItem(updateItem); + }} + label={name} + /> + ); + })} + {textEnabled && ( + setItem({ ...item, textChannel: event.target.checked })} />} + label={t('commandSendSms')} + /> + )} + + ); +}; + +export default BaseCommandView; -- cgit v1.2.3