mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-03-14 14:38:29 +03:00
Close #1820 Squashed commit of the following: commit 5aadec2e6e126588313ff006d6f95223ba19a526 Merge: a4db6b4295f41285
Author: ArtemBaskal <a.baskal@adguard.com> Date: Wed Jul 15 11:15:31 2020 +0300 Merge branch 'master' into fix/1820 commit a4db6b42ab9cbf43d96c783a72a99e0a2c594108 Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 19:08:09 2020 +0300 Remove textarea comma splitting commit bb34797aac6602b405941dbd90fe6a81b663bb92 Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 18:21:18 2020 +0300 Fix client Access settings normalization commit ac4fb536514f54c5722077d78dbbd981c4e906a8 Merge: 0c758ddcb9fca8d0
Author: ArtemBaskal <a.baskal@adguard.com> Date: Tue Jul 14 18:14:38 2020 +0300 Merge branch 'master' into fix/1820 commit 0c758ddcd738136b92e6f947a8068ecc59f7ec25 Merge: 15650db3f5a1f311
Author: ArtemBaskal <a.baskal@adguard.com> Date: Fri Jul 3 11:22:00 2020 +0300 Merge branch 'master' into fix/1820 commit 15650db35323009001fd427a74a312705b54ac86 Author: ArtemBaskal <a.baskal@adguard.com> Date: Mon Jun 29 12:01:51 2020 +0300 '- client: Don't normalise disallowed domains'
95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { Field, reduxForm } from 'redux-form';
|
|
import { Trans, withTranslation } from 'react-i18next';
|
|
import flow from 'lodash/flow';
|
|
import { renderTextareaField } from '../../../../helpers/form';
|
|
import {
|
|
trimMultilineString,
|
|
removeEmptyLines,
|
|
} from '../../../../helpers/helpers';
|
|
import { FORM_NAME } from '../../../../helpers/constants';
|
|
|
|
const fields = [
|
|
{
|
|
id: 'allowed_clients',
|
|
title: 'access_allowed_title',
|
|
subtitle: 'access_allowed_desc',
|
|
normalizeOnBlur: removeEmptyLines,
|
|
},
|
|
{
|
|
id: 'disallowed_clients',
|
|
title: 'access_disallowed_title',
|
|
subtitle: 'access_disallowed_desc',
|
|
normalizeOnBlur: trimMultilineString,
|
|
},
|
|
{
|
|
id: 'blocked_hosts',
|
|
title: 'access_blocked_title',
|
|
subtitle: 'access_blocked_desc',
|
|
normalizeOnBlur: removeEmptyLines,
|
|
},
|
|
];
|
|
|
|
const Form = (props) => {
|
|
const {
|
|
handleSubmit, submitting, invalid, processingSet,
|
|
} = props;
|
|
|
|
const renderField = ({
|
|
id, title, subtitle, disabled = processingSet, normalizeOnBlur,
|
|
}) => <div key={id} className="form__group mb-5">
|
|
<label className="form__label form__label--with-desc" htmlFor={id}>
|
|
<Trans>{title}</Trans>
|
|
</label>
|
|
<div className="form__desc form__desc--top">
|
|
<Trans>{subtitle}</Trans>
|
|
</div>
|
|
<Field
|
|
id={id}
|
|
name={id}
|
|
component={renderTextareaField}
|
|
type="text"
|
|
className="form-control form-control--textarea font-monospace"
|
|
disabled={disabled}
|
|
normalizeOnBlur={normalizeOnBlur}
|
|
/>
|
|
</div>;
|
|
|
|
renderField.propTypes = {
|
|
id: PropTypes.string,
|
|
title: PropTypes.string,
|
|
subtitle: PropTypes.string,
|
|
disabled: PropTypes.bool,
|
|
normalizeOnBlur: PropTypes.func,
|
|
};
|
|
|
|
return (
|
|
<form onSubmit={handleSubmit}>
|
|
{fields.map(renderField)}
|
|
<div className="card-actions">
|
|
<div className="btn-list">
|
|
<button
|
|
type="submit"
|
|
className="btn btn-success btn-standard"
|
|
disabled={submitting || invalid || processingSet}
|
|
>
|
|
<Trans>save_config</Trans>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
);
|
|
};
|
|
|
|
Form.propTypes = {
|
|
handleSubmit: PropTypes.func.isRequired,
|
|
submitting: PropTypes.bool.isRequired,
|
|
invalid: PropTypes.bool.isRequired,
|
|
initialValues: PropTypes.object.isRequired,
|
|
processingSet: PropTypes.bool.isRequired,
|
|
t: PropTypes.func.isRequired,
|
|
textarea: PropTypes.bool,
|
|
};
|
|
|
|
export default flow([withTranslation(), reduxForm({ form: FORM_NAME.ACCESS })])(Form);
|