mirror of
https://github.com/SigNoz/signoz.git
synced 2026-05-23 10:19:32 -05:00
ab4f6adb19
* feat: logs explorer - new design * feat: update styles * feat: added new toolbar for logs explorer (#4336) * feat: logs list view changes (#4348) * feat: logs list view changes * fix: list view and toolbar styles * feat: side btns * feat: added auto refresh handler * feat: handle popover close for btn click date time * feat: extract the common log actions btn component * feat: update the button for log line actions * fix: event propagation from context button * feat: use styles from ui-library * Query builder design update (#4359) * feat: QB design update * fix: add functionality and light mode styles * fix: ts issues * fix: update all css color variables to correct names * fix: lint errors * feat: new table view for logs explorer list section (#4353) * feat: table view changes for logs list * feat: code refactor to support log line actions * feat: code refactor to support log line actions * fix: the positioning of the btns * feat: fix the table onclick * fix: header issue * fix: on hover * fix: type issue * fix: eslint error * fix: type errors (#4360) * feat: handle light theme for logs explorer design changes (#4363) * feat: handle light theme for list tables and dateTime selection * feat: handle light theme for popover * fix: address review comments * feat: date time custom time modal to render inside the new popover (#4366) * feat: single calender for range picker * fix: edgecases * feat: integrate date time selector across app * fix: remove dangling border after element removal * feat: handle qb design changes across the application * feat: handle light theme * feat: handle light theme * fix: virtuoso scroll refresh issue * feat: handle new typing changes for date time picker v2 (#4386) Co-authored-by: Yunus M <myounis.ar@live.com> * chore: styles improvement across new design (#4389) * fix: improve date time styles * feat: table view changes according to new design * fix: button visibility in clickhouse and promQL headers (#4390) * feat: change the tabs to new design buttons for query builder * Settings theme change (#4368) * feat: settings theme change * [Refactor]: New design for Log details page (#4362) New design for Log details page Co-authored-by: Vikrant Gupta <vikrant.thomso@gmail.com> Co-authored-by: Yunus M <myounis.ar@live.com> * feat: save view for new design (#4392) * feat: save view for new design * refactor: done with save view * feat: update styles for logs detail view (#4407) * feat: update styles for logs detail view * feat: update styles for logs detail view * feat: add raw view attributes in the logs list view (#4422) * feat: add raw view attributes in the logs list view * feat: add raw view attributes in the logs list view * fix: raw attributes * fix: logs UI improvements (#4426) * fix: remove fixed times from the date time picker v2 * fix: added old logs explorer CTA in new designs * feat: handle active logs indicator update * fix: address review comments * fix: old logs explorer page * fix: remove info text and add relative time buttons * fix: update logs explorer tab designs * fix: update logs explorer tab designs * fix: update logs explorer tab designs * refactor: New design for Save views. (#4435) * feat: [GH-4436]: date range enhancements (#4448) * feat: [GH-4436]: when selecting custom time range it should be from start of day to end of date * fix: custom time width and refresh text visibility issues (#4428) --------- Co-authored-by: Yunus M <myounis.ar@live.com> * feat: update ui (#4449) * feat: added loading and error states for logs design (#4452) * feat: added loading and error states for logs design * feat: added error states for table view and time series view * feat: handle error and loading states * feat: loading states * [Refactor]: Tab Switch deplay issue and UI improvement for Clickhouse (#4409) * fix: switching between logs display tabs (#4457) * [Feat]: View in Traces (#4450) * refactor: datetime selector beside run query removed add to dashboard * refactor: added tab for traces view details page * refactor: done with the save view in traces * fix: the gittery effect when navigatigating from views * refactor: view tab view title light mode support * refactor: removed console * fix: gittery effect when switch view from views tabs * refactor: separate traces routes * refactor: remove query params * chore: fix tsc issues * fix: jest config issues * fix: update TODO and remove extra braces * feat: handle loading states and incorporate ui feedback (#4479) * UI feedback updates (#4482) * feat: handle loading and fix ui issues * feat: ui updates * fix: logs explorer issues (#4483) * fix: logs explorer issues * fix: jest test cases * feat: support custom times unique to pages new design changes (#4485) * fix: loading states for list log view (#4486) * fix: logs search view query fix, logs details view - attribute tags alignment fix (#4489) * fix: delete empty file * fix: chart loading when scrolling logs (#4495) * fix: chart should not load when scrolling the logs as it is already fetched * fix: make the search bar as default rather than advanced options * fix: rename show context to show in context * fix: query range api not triggering on default select first load (#4498) * Refactor: Log Explorer UI changes. (#4502) * refactor: used selected view enum * refactor: updated hight of switch old button and tab border * refactor: import fixes * refactor: query builder border and button groups * refactor: removed hypen from refreshed * refactor: show delete button only when there is more than one query * refactor: sqaure up the query build button groups * refactor: updated css * fix: additional filter color button shadow * refactor: removed commented code and used selected panel enum * refactor: updated typecheck script * refactor: used enum selected view (#4504) * fix: retain the current query on date time change (#4510) * feat: added new icon for promQL and added tooltips for dashboards and alerts (#4512) * feat: added new icon for promQL and added tooltips for dashboards and alerts * fix: styles at 1440 px zoom * fix: rename clickhouse to clickHouse --------- Co-authored-by: Vikrant Gupta <54737045+Vikrant2520@users.noreply.github.com> Co-authored-by: Vikrant Gupta <vikrant.thomso@gmail.com> Co-authored-by: Rajat Dabade <rajat@signoz.io>
249 lines
6.2 KiB
TypeScript
249 lines
6.2 KiB
TypeScript
/* eslint-disable react-hooks/exhaustive-deps */
|
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
import './LogsFormatOptionsMenu.styles.scss';
|
|
|
|
import { Divider, Input, InputNumber, Tooltip } from 'antd';
|
|
import cx from 'classnames';
|
|
import { LogViewMode } from 'container/LogsTable';
|
|
import { OptionsMenuConfig } from 'container/OptionsMenu/types';
|
|
import useDebouncedFn from 'hooks/useDebouncedFunction';
|
|
import { Check, Minus, Plus, X } from 'lucide-react';
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
interface LogsFormatOptionsMenuProps {
|
|
title: string;
|
|
items: any;
|
|
selectedOptionFormat: any;
|
|
config: OptionsMenuConfig;
|
|
}
|
|
|
|
export default function LogsFormatOptionsMenu({
|
|
title,
|
|
items,
|
|
selectedOptionFormat,
|
|
config,
|
|
}: LogsFormatOptionsMenuProps): JSX.Element {
|
|
const { maxLines, format, addColumn } = config;
|
|
const [selectedItem, setSelectedItem] = useState(selectedOptionFormat);
|
|
const maxLinesNumber = (maxLines?.value as number) || 1;
|
|
const [maxLinesPerRow, setMaxLinesPerRow] = useState<number>(maxLinesNumber);
|
|
|
|
const [addNewColumn, setAddNewColumn] = useState(false);
|
|
|
|
const onChange = useCallback(
|
|
(key: LogViewMode) => {
|
|
if (!format) return;
|
|
|
|
format.onChange(key);
|
|
},
|
|
[format],
|
|
);
|
|
|
|
const handleMenuItemClick = (key: LogViewMode): void => {
|
|
setSelectedItem(key);
|
|
onChange(key);
|
|
setAddNewColumn(false);
|
|
};
|
|
|
|
const incrementMaxLinesPerRow = (): void => {
|
|
if (maxLinesPerRow < 10) {
|
|
setMaxLinesPerRow(maxLinesPerRow + 1);
|
|
}
|
|
};
|
|
|
|
const decrementMaxLinesPerRow = (): void => {
|
|
if (maxLinesPerRow > 1) {
|
|
setMaxLinesPerRow(maxLinesPerRow - 1);
|
|
}
|
|
};
|
|
|
|
const handleSearchValueChange = useDebouncedFn((event): void => {
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
const value = event?.target?.value || '';
|
|
|
|
if (addColumn && addColumn?.onSearch) {
|
|
addColumn?.onSearch(value);
|
|
}
|
|
}, 300);
|
|
|
|
const handleToggleAddNewColumn = (): void => {
|
|
setAddNewColumn(!addNewColumn);
|
|
};
|
|
|
|
// console.log('optionsMenuConfig', config);
|
|
|
|
const handleLinesPerRowChange = (maxLinesPerRow: number | null): void => {
|
|
if (
|
|
maxLinesPerRow &&
|
|
Number.isInteger(maxLinesNumber) &&
|
|
maxLinesPerRow > 1
|
|
) {
|
|
setMaxLinesPerRow(maxLinesPerRow);
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (maxLinesPerRow && config && config.maxLines?.onChange) {
|
|
config.maxLines.onChange(maxLinesPerRow);
|
|
}
|
|
}, [maxLinesPerRow]);
|
|
|
|
return (
|
|
<div
|
|
className={cx('nested-menu-container', addNewColumn ? 'active' : '')}
|
|
onClick={(event): void => {
|
|
// this is to restrict click events to propogate to parent
|
|
event.stopPropagation();
|
|
}}
|
|
>
|
|
<div className="menu-container">
|
|
<div className="title"> {title} </div>
|
|
|
|
<div className="menu-items">
|
|
{items.map(
|
|
(item: any): JSX.Element => (
|
|
<div
|
|
className="item"
|
|
key={item.label}
|
|
onClick={(): void => handleMenuItemClick(item.key)}
|
|
>
|
|
<div className={cx('item-label')}>
|
|
{item.label}
|
|
|
|
{selectedItem === item.key && <Check size={12} />}
|
|
</div>
|
|
</div>
|
|
),
|
|
)}
|
|
</div>
|
|
</div>
|
|
|
|
{selectedItem && (
|
|
<>
|
|
{selectedItem === 'raw' && (
|
|
<>
|
|
<div className="horizontal-line" />
|
|
<div className="max-lines-per-row">
|
|
<div className="title"> max lines per row </div>
|
|
<div className="raw-format max-lines-per-row-input">
|
|
<button
|
|
type="button"
|
|
className="periscope-btn"
|
|
onClick={decrementMaxLinesPerRow}
|
|
>
|
|
{' '}
|
|
<Minus size={12} />{' '}
|
|
</button>
|
|
<InputNumber
|
|
min={1}
|
|
max={10}
|
|
value={maxLinesPerRow}
|
|
onChange={handleLinesPerRowChange}
|
|
/>
|
|
<button
|
|
type="button"
|
|
className="periscope-btn"
|
|
onClick={incrementMaxLinesPerRow}
|
|
>
|
|
{' '}
|
|
<Plus size={12} />{' '}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</>
|
|
)}
|
|
|
|
<div className="selected-item-content-container active">
|
|
{!addNewColumn && <div className="horizontal-line" />}
|
|
|
|
{addNewColumn && (
|
|
<div className="add-new-column-header">
|
|
<div className="title">
|
|
{' '}
|
|
columns
|
|
<X size={14} onClick={handleToggleAddNewColumn} />{' '}
|
|
</div>
|
|
|
|
<Input
|
|
tabIndex={0}
|
|
type="text"
|
|
autoFocus
|
|
onFocus={addColumn?.onFocus}
|
|
onChange={handleSearchValueChange}
|
|
placeholder="Search..."
|
|
/>
|
|
</div>
|
|
)}
|
|
|
|
<div className="item-content">
|
|
{!addNewColumn && (
|
|
<div className="title">
|
|
columns
|
|
<Plus size={14} onClick={handleToggleAddNewColumn} />{' '}
|
|
</div>
|
|
)}
|
|
|
|
<div className="column-format">
|
|
{addColumn?.value?.map(({ key, id }) => (
|
|
<div className="column-name" key={id}>
|
|
<div className="name">
|
|
<Tooltip placement="left" title={key}>
|
|
{key}
|
|
</Tooltip>
|
|
</div>
|
|
<X
|
|
className="delete-btn"
|
|
size={14}
|
|
onClick={(): void => addColumn.onRemove(id as string)}
|
|
/>
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
{addColumn?.isFetching && (
|
|
<div className="loading-container"> Loading ... </div>
|
|
)}
|
|
|
|
{addNewColumn &&
|
|
addColumn &&
|
|
addColumn.value.length > 0 &&
|
|
addColumn.options &&
|
|
addColumn?.options?.length > 0 && (
|
|
<Divider className="column-divider" />
|
|
)}
|
|
|
|
{addNewColumn && (
|
|
<div className="column-format-new-options">
|
|
{addColumn?.options?.map(({ label, value }) => (
|
|
<div
|
|
className="column-name"
|
|
key={value}
|
|
onClick={(eve): void => {
|
|
console.log('coluimn name', label, value);
|
|
|
|
eve.stopPropagation();
|
|
|
|
if (addColumn && addColumn?.onSelect) {
|
|
addColumn?.onSelect(value, { label, disabled: false });
|
|
}
|
|
}}
|
|
>
|
|
<div className="name">
|
|
<Tooltip placement="left" title={label}>
|
|
{label}
|
|
</Tooltip>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
</div>
|
|
</div>
|
|
</>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|