* chore: added code split for the analytics store * chore: done some refactor * refactor: update entity keys in analytics and translations * chore: updated the translations * refactor: simplify AnalyticsStoreV2 class by removing unnecessary constructor * feat: add AnalyticsStoreV2 class and interface for enhanced analytics functionality * feat: enhance WorkItemsModal and analytics store with isEpic functionality * feat: integrate isEpic state into TotalInsights and WorkItemsModal components * refactor: remove isEpic state from WorkItemsModalMainContent component * refactor: removed old analytics components and related services * refactor: new analytics * refactor: removed all nivo chart dependencies * chore: resolved coderabbit comments * fix: update processUrl to handle custom-work-items in peek view * feat: implement CSV export functionality in InsightTable component * feat: enhance analytics service with filter parameters and improve data handling in InsightTable * feat: add new translation keys for various statuses across multiple languages * [WEB-4246] fix: enhance analytics components to include 'isEpic' parameter for improved data fetching * chore: update yarn.lock to remove deprecated @nivo packages and clean up unused dependencies
98 lines
3.2 KiB
TypeScript
98 lines
3.2 KiB
TypeScript
import { useMemo } from "react";
|
|
import { observer } from "mobx-react";
|
|
import { Control, Controller, UseFormSetValue } from "react-hook-form";
|
|
import { Calendar, SlidersHorizontal } from "lucide-react";
|
|
// plane package imports
|
|
import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES, ChartYAxisMetric } from "@plane/constants";
|
|
import { useTranslation } from "@plane/i18n";
|
|
import { IAnalyticsParams } from "@plane/types";
|
|
import { cn } from "@plane/utils";
|
|
// plane web components
|
|
import { SelectXAxis } from "./select-x-axis";
|
|
import { SelectYAxis } from "./select-y-axis";
|
|
|
|
type Props = {
|
|
control: Control<IAnalyticsParams, unknown>;
|
|
setValue: UseFormSetValue<IAnalyticsParams>;
|
|
params: IAnalyticsParams;
|
|
workspaceSlug: string;
|
|
classNames?: string;
|
|
};
|
|
|
|
export const AnalyticsSelectParams: React.FC<Props> = observer((props) => {
|
|
const { control, params, classNames } = props;
|
|
const xAxisOptions = useMemo(
|
|
() => ANALYTICS_X_AXIS_VALUES.filter((option) => option.value !== params.group_by),
|
|
[params.group_by]
|
|
);
|
|
const groupByOptions = useMemo(
|
|
() => ANALYTICS_X_AXIS_VALUES.filter((option) => option.value !== params.x_axis),
|
|
[params.x_axis]
|
|
);
|
|
|
|
return (
|
|
<div className={cn("flex w-full justify-between", classNames)}>
|
|
<div className={`flex items-center gap-2`}>
|
|
<Controller
|
|
name="y_axis"
|
|
control={control}
|
|
render={({ field: { value, onChange } }) => (
|
|
<SelectYAxis
|
|
value={value}
|
|
onChange={(val: ChartYAxisMetric | null) => {
|
|
onChange(val);
|
|
}}
|
|
options={ANALYTICS_Y_AXIS_VALUES}
|
|
hiddenOptions={[ChartYAxisMetric.ESTIMATE_POINT_COUNT]}
|
|
/>
|
|
)}
|
|
/>
|
|
<Controller
|
|
name="x_axis"
|
|
control={control}
|
|
render={({ field: { value, onChange } }) => (
|
|
<SelectXAxis
|
|
value={value}
|
|
onChange={(val) => {
|
|
onChange(val);
|
|
}}
|
|
label={
|
|
<div className="flex items-center gap-2">
|
|
<Calendar className="h-3 w-3" />
|
|
<span className={cn("text-custom-text-200", value && "text-custom-text-100")}>
|
|
{xAxisOptions.find((v) => v.value === value)?.label || "Add Property"}
|
|
</span>
|
|
</div>
|
|
}
|
|
options={xAxisOptions}
|
|
/>
|
|
)}
|
|
/>
|
|
<Controller
|
|
name="group_by"
|
|
control={control}
|
|
render={({ field: { value, onChange } }) => (
|
|
<SelectXAxis
|
|
value={value}
|
|
onChange={(val) => {
|
|
onChange(val);
|
|
}}
|
|
label={
|
|
<div className="flex items-center gap-2">
|
|
<SlidersHorizontal className="h-3 w-3" />
|
|
<span className={cn("text-custom-text-200", value && "text-custom-text-100")}>
|
|
{groupByOptions.find((v) => v.value === value)?.label || "Add Property"}
|
|
</span>
|
|
</div>
|
|
}
|
|
options={groupByOptions}
|
|
placeholder="Group By"
|
|
allowNoValue
|
|
/>
|
|
)}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
});
|