feat: implement AddPolicyEngine component for dynamic policy creation and rule management
This commit is contained in:
@@ -822,8 +822,8 @@ export default function AddPolicyEngine() {
|
||||
// ─── Handlers ──────────────────────────────────────────────────────────────
|
||||
|
||||
// Returns the lowest priority (1-10) not already used by an existing rule.
|
||||
const findFreePriority = () => {
|
||||
const taken = rules.map(r => r.priority);
|
||||
const findFreePriority = (currentRules: Rule[]) => {
|
||||
const taken = currentRules.map(r => r.priority);
|
||||
for (let p = 1; p <= 10; p++) {
|
||||
if (!taken.includes(p)) return p;
|
||||
}
|
||||
@@ -831,21 +831,21 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleAddRule = () => {
|
||||
setRules([...rules, {
|
||||
setRules(prevRules => [...prevRules, {
|
||||
id: crypto.randomUUID(),
|
||||
category: '',
|
||||
priority: findFreePriority(),
|
||||
priority: findFreePriority(prevRules),
|
||||
conditions: [{ id: crypto.randomUUID(), condition: '', operator: '', value: '', logic: 'AND' }],
|
||||
actions: [{ id: crypto.randomUUID(), actionCategoryId: '', actionTypeId: '', logic: 'AND', fieldValues: {} }]
|
||||
}]);
|
||||
};
|
||||
|
||||
const handleDeleteRule = (ruleId: string) => {
|
||||
setRules(rules.filter(r => r.id !== ruleId));
|
||||
setRules(prevRules => prevRules.filter(r => r.id !== ruleId));
|
||||
};
|
||||
|
||||
const handleUpdateRule = (ruleId: string, updates: Partial<Rule>) => {
|
||||
setRules(rules.map(r => r.id === ruleId ? { ...r, ...updates } : r));
|
||||
setRules(prevRules => prevRules.map(r => r.id === ruleId ? { ...r, ...updates } : r));
|
||||
};
|
||||
|
||||
// Priorities used by every OTHER rule — a rule may never land on one of these.
|
||||
@@ -871,7 +871,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleAddCondition = (ruleId: string) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return {
|
||||
...r,
|
||||
@@ -883,7 +883,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleUpdateCondition = (ruleId: string, conditionId: string, updates: Partial<Condition>) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return {
|
||||
...r,
|
||||
@@ -895,7 +895,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleDeleteCondition = (ruleId: string, conditionId: string) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return { ...r, conditions: r.conditions.filter(c => c.id !== conditionId) };
|
||||
}
|
||||
@@ -904,7 +904,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleAddAction = (ruleId: string) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return {
|
||||
...r,
|
||||
@@ -916,7 +916,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleUpdateAction = (ruleId: string, actionId: string, updates: Partial<Action>) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return {
|
||||
...r,
|
||||
@@ -928,7 +928,7 @@ export default function AddPolicyEngine() {
|
||||
};
|
||||
|
||||
const handleDeleteAction = (ruleId: string, actionId: string) => {
|
||||
setRules(rules.map(r => {
|
||||
setRules(prevRules => prevRules.map(r => {
|
||||
if (r.id === ruleId) {
|
||||
return { ...r, actions: r.actions.filter(a => a.id !== actionId) };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user