openreplay/frontend/app/components/shared/ConditionSet/Conditions.tsx
Delirium 5e21d88e8c
feat(tracker): Msg buffering and conditional recording (#1775)
* feat(tracker) start message buffering support

* feat(tracker): buffered recordings

* feat(tracker): buffered recordings timedelay adjust

* fix(tracker): condition manager

* fix(tracker): conditions handlers

* fix(tracker): conditions

* fix(tracker): pre-fetch feature flags and conditions, fix naming and dnt check repeating

* fix(tracker): fix conditions fetch

* feat(tracker): test coverage for conditionsManager

* feat(tracker): some api connections

* feat(tracker): fix projid in session info

* feat(tracker): added fetch req status condition, partially added offline recording, type fixes

* fix(tracker): fix tests

* fix(tracker): fix network req c

* fix(tracker): fix conditions test

* feat(ui): conditional recording ui

* fix(tracker): fix prestart callbacks

* feat(ui): conditions ui and api stuff

* feat(ui): fix ?

* fix(tracker): map raw db response in tracker

* fix(tracker): fix condition processing, add cond name to trigger event, change unit tests

* fix(tracker): simplify mapping, rename functions

* fix(tracker): change toggler design, change network request condition

* fix(tracker): some formatting

* fix(tracker): reformat logging

* fix(ui): rm console log
2024-01-09 13:18:26 +01:00

94 lines
2.5 KiB
TypeScript

import React from 'react';
import { observer } from 'mobx-react-lite';
import { Conditions } from 'App/mstore/types/FeatureFlag';
import { toast } from 'react-toastify';
import ConditionSetComponent from './ConditionSet';
interface Props {
set: number;
conditions: Conditions;
removeCondition: (ind: number) => void;
index: number;
readonly?: boolean;
bottomLine1: string;
bottomLine2: string;
setChanged?: (changed: boolean) => void;
excludeFilterKeys?: string[];
isConditional?: boolean;
}
function ConditionSet({
set,
conditions,
removeCondition,
index,
readonly,
bottomLine1,
bottomLine2,
setChanged,
excludeFilterKeys,
isConditional,
}: Props) {
const [forceRender, forceRerender] = React.useState(false);
const onAddFilter = (filter: Record<string, any> = {}) => {
setChanged?.(true);
if (conditions.filter.filters.findIndex((f) => f.key === filter.key) !== -1) {
return toast.error('Filter already exists');
}
conditions.filter.addFilter(filter);
forceRerender(!forceRender);
};
const onUpdateFilter = (filterIndex: number, filter: any) => {
setChanged?.(true);
conditions.filter.updateFilter(filterIndex, filter);
forceRerender(!forceRender);
};
const onChangeEventsOrder = (_: any, { name, value }: any) => {
setChanged?.(true)
conditions.filter.updateKey(name, value);
forceRerender(!forceRender);
};
const onRemoveFilter = (filterIndex: number) => {
setChanged?.(true)
conditions.filter.removeFilter(filterIndex);
forceRerender(!forceRender);
};
const onPercentChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setChanged?.(true)
const value = e.target.value || '0';
if (value.length > 3) return;
if (parseInt(value, 10) > 100) return conditions.setRollout(100);
conditions.setRollout(parseInt(value, 10));
};
const changeName = (name: string) => {
setChanged?.(true);
conditions.name = name;
};
return (
<ConditionSetComponent
set={set}
changeName={changeName}
removeCondition={removeCondition}
index={index}
readonly={readonly}
onAddFilter={onAddFilter}
bottomLine1={bottomLine1}
bottomLine2={bottomLine2}
onPercentChange={onPercentChange}
excludeFilterKeys={excludeFilterKeys}
conditions={conditions}
onUpdateFilter={onUpdateFilter}
onRemoveFilter={onRemoveFilter}
onChangeEventsOrder={onChangeEventsOrder}
isConditional={isConditional}
/>
);
}
export default observer(ConditionSet);