File "index.js"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/better-wp-security/core/admin-pages/entries/firewall/pages/rule/index.js
File size: 3.38 KB
MIME-type: text/x-java
Charset: utf-8
/**
* External dependencies
*/
import { Link, useHistory, useParams } from 'react-router-dom';
/**
* WordPress dependencies
*/
import { __ } from '@wordpress/i18n';
import { arrowLeft as backIcon } from '@wordpress/icons';
import { Flex, FlexBlock, FlexItem } from '@wordpress/components';
import { useDispatch, useSelect } from '@wordpress/data';
import { gmdate } from '@wordpress/date';
/**
* Solid dependencies
*/
import { PageHeader, Surface, Button, Notice } from '@ithemes/ui';
/**
* Internal dependencies
*/
import { withNavigate } from '@ithemes/security-hocs';
import { getSelf } from '@ithemes/security-utils';
import { firewallStore } from '@ithemes/security.packages.data';
import { Page } from '../../components';
import { StyledRuleForm } from '../create-rule/styles';
export default function Rule() {
const { push } = useHistory();
const { id } = useParams();
const { item, self, isSaving, notFound, error } = useSelect( ( select ) => {
const _self = getSelf( select( firewallStore ).getItemById( id ) );
return {
item: _self && select( firewallStore ).getEditedItem( _self ),
self: _self,
isSaving: _self && select( firewallStore ).isSaving( _self ),
notFound: select( firewallStore ).hasResolutionFailed( 'getItemById', [ id ] ),
error: _self && select( firewallStore ).getLastSaveError( _self ),
};
}, [ id ] );
const { editItem, saveEditedItem } = useDispatch( firewallStore );
const onDeploy = async () => {
if ( item.paused_at ) {
await editItem( self, {
paused_at: null,
} );
}
return doSave();
};
const onDraft = async () => {
if ( ! item.paused_at ) {
await editItem( self, {
paused_at: gmdate( 'Y-m-d\\TH:i:s' ),
} );
}
await doSave();
};
const doSave = async () => {
try {
await saveEditedItem( self );
} catch ( e ) {
return;
}
push( '/rules' );
};
return (
<Page>
<Flex
gap={ 5 }
direction="column"
align="stretch"
justify="start"
expanded={ false }
as="form"
>
<FlexItem>
<Link
to="/rules"
component={ withNavigate( Button ) }
variant="tertiary"
icon={ backIcon }
text={ __( 'Back to Rules overview', 'better-wp-security' ) }
/>
</FlexItem>
{ error && (
<Notice
type="danger"
text={ error.message || __( 'Could not save rule.', 'better-wp-security' ) }
/>
) }
{ notFound && (
<Notice
type="warning"
text={ __( 'Firewall rule not found.', 'better-wp-security' ) }
/>
) }
{ item && (
<>
<Surface as={ FlexBlock }>
<PageHeader
hasBorder
title={ __( 'Edit Firewall Rule', 'better-wp-security' ) }
description={ __( 'Custom firewall rules let you block attackers or allow authorized traffic.', 'better-wp-security' ) }
/>
<StyledRuleForm value={ item } onChange={ ( next ) => editItem( self, next ) } />
</Surface>
<Flex justify="end">
<Button
variant="secondary"
text={ __( 'Save as Draft', 'better-wp-security' ) }
onClick={ onDraft }
disabled={ isSaving }
isBusy={ isSaving && item.paused_at }
/>
<Button
variant="primary"
text={ __( 'Deploy', 'better-wp-security' ) }
onClick={ onDeploy }
disabled={ isSaving }
isBusy={ isSaving && item.paused_at === null }
/>
</Flex>
</>
) }
</Flex>
</Page>
);
}