import { Button, SelectControl, } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import {useState,useEffect} from '@wordpress/element'; import Icon from "../utils/Icon"; import useFields from "./FieldsData"; import React from "react"; const PermissionsPolicy = (props) => { const {fields, updateField, updateSubField, setChangedField, saveFields} = useFields(); const [enablePermissionsPolicy, setEnablePermissionsPolicy] = useState(0); const [DataTable, setDataTable] = useState(null); const [theme, setTheme] = useState(null); const [rowsSelected, setRowsSelected] = useState([]); const [rowCleared, setRowCleared] = useState(false); useEffect( () => { import('react-data-table-component').then(({ default: DataTable, createTheme }) => { setDataTable(() => DataTable); setTheme(() => createTheme('really-simple-plugins', { divider: { default: 'transparent', }, }, 'light')); }); }, []); useEffect( () => { let field = fields.filter(field => field.id === 'enable_permissions_policy')[0]; setEnablePermissionsPolicy(field.value); }, [] ); const onChangeHandler = (value, clickedItem ) => { let field= props.field; if (typeof field.value === 'object') { updateField(field.id, Object.values(field.value)) } //the updateItemId allows us to update one specific item in a field set. updateSubField(field.id, clickedItem.id, value); setChangedField(field.id, value); saveFields(true, false); } const OnClickHandler = (selectedRows, value) => { let field= props.field; if (typeof field.value === 'object') { updateField(field.id, Object.values(field.value)) } selectedRows.forEach(row => { //the updateItemId allows us to update one specific item in a field set. updateSubField(field.id, row.id, value); setChangedField(field.id, value); }); saveFields(true, false); setRowCleared(true); setRowsSelected([]); // Reset rowCleared back to false after the DataTable has re-rendered setTimeout(() => setRowCleared(false), 0); } const togglePermissionsPolicyStatus = (e, enforce) => { e.preventDefault(); //look up permissions policy enable field //enable_permissions_policy let field = fields.filter(field => field.id === 'enable_permissions_policy')[0]; //enforce setting setEnablePermissionsPolicy(enforce); updateField(field.id, enforce); setChangedField(field.id, field.value); saveFields(true, false); } let field = props.field; let fieldValue = field.value; const buttons = [ 'button-secondary', 'button-primary', 'button-red', ]; //we add a button property to the options let options = props.options.map((option, index) => { option.button = buttons[index]; return option; }); columns = []; field.columns.forEach(function(item, i) { let newItem = { name: item.name, sortable: item.sortable, width: item.width, selector: row => row[item.column], } columns.push(newItem); }); let data = field.value; if (typeof data === 'object') { data = Object.values(data); } if (!Array.isArray(data) ) { data = []; } let disabled = false; let outputData = []; for (const item of data){ let itemCopy = {...item}; itemCopy.valueControl = onChangeHandler( fieldValue, item, 'value' ) } /> outputData.push(itemCopy); } const customStyles = { headCells: { style: { paddingLeft: '0', // override the cell padding for head cells paddingRight: '0', }, }, cells: { style: { paddingLeft: '0', // override the cell padding for data cells paddingRight: '0', }, }, }; function handleSelection(state) { setRowCleared(false); setRowsSelected(state.selectedRows); } if (!DataTable || !theme) return null; return (
{rowsSelected.length > 0 && (
{__("You have selected", "really-simple-ssl")} {rowsSelected.length} {__("rows", "really-simple-ssl")}
{options.map((option) => (
))}
)} { enablePermissionsPolicy!=1 && } { enablePermissionsPolicy==1 &&
{__("Enforced","really-simple-ssl")} { props.disabled && <>{ __("Permissions Policy is set outside Really Simple Security.", "really-simple-ssl")} } { !props.disabled && <>{__("Permissions Policy is enforced.", "really-simple-ssl")} } { !props.disabled && togglePermissionsPolicyStatus(e, false) }>{__("Disable", "really-simple-ssl") } }
} { props.disabled && enablePermissionsPolicy!=1 &&
{__("Disabled","really-simple-ssl")} {__("The Permissions Policy has been disabled.", "really-simple-ssl")}
}
) } export default PermissionsPolicy