Added support for inOperators and dateTimeOperators

This commit is contained in:
Jeremy Rangel
2025-02-06 09:38:23 -08:00
parent 60006e6188
commit fe8d0ebd50
3 changed files with 68 additions and 31 deletions

View File

@ -1 +1 @@
<?php return array('dependencies' => array('react', 'wp-components', 'wp-element'), 'version' => '33ab959b55f1e87d13f0');
<?php return array('dependencies' => array('react', 'wp-components', 'wp-element'), 'version' => '52797c520f45e7063c70');

File diff suppressed because one or more lines are too long

View File

@ -29,7 +29,7 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
// State management
const [ruleType, setRuleType] = useState('post');
const [lockType, setLockType] = useState('has_subscription');
const [operator, setOperator] = useState('=');
const [operator, setOperator] = useState('');
const [metaKey, setMetaKey] = useState('');
const [roles, setRoles] = useState([]); // State to store user roles
const [taxonomies, setTaxonomies] = useState([]); // State to store taxonomies
@ -41,11 +41,12 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
const [postDateOperator, setPostDateOperator] = useState('=');
const [metaKeyOperator, setMetaKeyOperator] = useState('=');
const [metaValue, setMetaValue] = useState('');
const [userRegistered, setUserRegistered] = useState('');
const [userRegisteredOperator, setUserRegisteredOperator] = useState('=');
// Fetch user roles from the WordPress REST API
useEffect(() => {
if (lockType === 'has_role') {
if (lockType === 'role') {
fetch('/localcontentpro/wp-json/lcp-paywall/v1/user-roles') // Your custom REST API endpoint
.then((response) => response.json())
.then((data) => {
@ -53,11 +54,11 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
})
.catch((error) => console.error('Error fetching roles:', error));
}
}, [lockType]); // Fetch only when lockType is 'has_role'
}, [lockType]); // Fetch only when lockType is 'role'
// Fetch taxonomies for the current post type
useEffect(() => {
if ((lockType === 'in_term' || lockType === 'not_in_term') && postType) {
if (lockType === 'post_term' && postType) {
fetch(`/localcontentpro/wp-json/lcp-paywall/v1/taxonomies?post_type=${postType}`)
.then(response => response.json())
.then(data => {
@ -73,7 +74,7 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
// Fetch terms when lockType is in_term or not_in_term and a taxonomy is selected
useEffect(() => {
if ((lockType === 'in_term' || lockType === 'not_in_term') && metaKey) {
if (lockType === 'post_term' && metaKey) {
fetch(`/localcontentpro/wp-json/lcp-paywall/v1/terms?taxonomy=${metaKey}`)
.then(response => response.json())
.then(data => {
@ -89,31 +90,24 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
const postLockTypeOptions = [
{ value: 'post_content_length', label: 'Post Content Length' },
{ value: 'post_in', label: 'Post In' },
{value: 'post_not_in', label: 'Post Not In' },
{ value: 'post', label: 'Post' },
{ value: 'meta_value', label: 'Meta Value' },
{ value: 'in_term', label: 'In Term' },
{ value: 'not_in_term', label: 'Not In Term' },
{ value: 'older_than', label: 'Older Than' },
{ value: 'newer_than', label: 'Newer Than' },
{ value: 'author_in', label: 'Author In' },
{ value: 'author_not_in', label: 'Author Not In' },
{ value: 'post_term', label: 'Term' },
{ value: 'author', label: 'Author' },
{ value: 'post_date', label: 'Post Date' }
];
const userLockTypeOptions = [
{ label: 'Has Subscription', value: 'has_subscription' },
{ label: 'Is Logged In', value: 'is_logged_in' },
{ label: 'Role In', value: 'role_in' },
{ label: 'Role Not In', value: 'role_not_in' },
{ label: 'Meta Value', value: 'meta_value' }
{ label: 'Role In', value: 'role' },
{ label: 'Meta Value', value: 'meta_value' },
{ label: 'Registration Date', value: 'registration_date' },
];
const userDeviceLockTypeOptions = [
{ label: 'Browser In', value: 'browser_in' },
{ label: 'Browser Not In', value: 'browser_not_in' },
{ label: 'Operating System In', value: 'os_in' },
{ label: 'Operating System Not In', value: 'os_not_in' }
{ label: 'Browser', value: 'browser' },
{ label: 'Operating System', value: 'os' },
];
const comparisonOperators = [
@ -125,6 +119,15 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
{ label: '<=', value: '<=' },
];
const dateTimeComparisonOperators = [
{ label: 'Before', value: 'before' },
{ label: 'After', value: 'after' },
{ label: 'Between', value: 'between' },
];
const inOperators = [
{ label: 'In', value: 'in' },
{ label: 'Not In', value: 'not in' }
];
return (
<div
@ -173,16 +176,28 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
</>
)}
{lockType === 'has_role' && (
<SelectControl
value={metaKey}
options={roles}
onChange={setMetaKey}
/>
{lockType === 'role' && (
<>
<SelectControl
value={operator}
options={inOperators}
onChange={setOperator}
/>
<SelectControl
value={metaKey}
options={roles}
onChange={setMetaKey}
/>
</>
)}
{(lockType === 'in_term' || lockType === 'not_in_term') && (
{lockType === 'term' && (
<>
<SelectControl
value={operator}
options={inOperators}
onChange={setOperator}
/>
<SelectControl
value={metaKey}
options={taxonomies}
@ -219,7 +234,7 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
<>
<SelectControl
value={postDateOperator}
options={comparisonOperators}
options={dateTimeComparisonOperators}
onChange={setPostDateOperator}
/>
<DateTimePicker
@ -228,6 +243,28 @@ const DraggableItem = ({ id, index, moveItem, postType, children }) => {
/>
</>
)}
{lockType === 'registration_date' && (
<>
<SelectControl
value={userRegisteredOperator}
options={dateTimeComparisonOperators}
onChange={setUserRegisteredOperator}
/>
<DateTimePicker
value={userRegistered}
onChange={setUserRegistered}
/>
</>
)}
{lockType === 'author' && (
<>
<SelectControl
value={operator}
options={inOperators}
onChange={setOperator}
/>
</>
)}
</div>
{children}
</div>