mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-16 11:15:58 +08:00
feat: [SIG-572]: allow number of lines changing in the logs list view (#4737)
* feat: [SIG-572]: allow number of lines changing in the logs list view * feat: [SIG-572]: allow number of lines changing in the logs list view * feat: added options to change row values in table view * fix: build issues
This commit is contained in:
parent
f34a49e19c
commit
ae0d685b29
@ -37,12 +37,18 @@ const convert = new Convert();
|
|||||||
interface LogFieldProps {
|
interface LogFieldProps {
|
||||||
fieldKey: string;
|
fieldKey: string;
|
||||||
fieldValue: string;
|
fieldValue: string;
|
||||||
|
linesPerRow?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
type LogSelectedFieldProps = LogFieldProps &
|
type LogSelectedFieldProps = Omit<LogFieldProps, 'linesPerRow'> &
|
||||||
Pick<AddToQueryHOCProps, 'onAddToQuery'>;
|
Pick<AddToQueryHOCProps, 'onAddToQuery'>;
|
||||||
|
|
||||||
function LogGeneralField({ fieldKey, fieldValue }: LogFieldProps): JSX.Element {
|
function LogGeneralField({
|
||||||
|
fieldKey,
|
||||||
|
fieldValue,
|
||||||
|
linesPerRow = 1,
|
||||||
|
}: LogFieldProps): JSX.Element {
|
||||||
|
console.log('fieldKey:', fieldKey, linesPerRow);
|
||||||
const html = useMemo(
|
const html = useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
__html: convert.toHtml(dompurify.sanitize(fieldValue)),
|
__html: convert.toHtml(dompurify.sanitize(fieldValue)),
|
||||||
@ -55,7 +61,11 @@ function LogGeneralField({ fieldKey, fieldValue }: LogFieldProps): JSX.Element {
|
|||||||
<Text ellipsis type="secondary" className="log-field-key">
|
<Text ellipsis type="secondary" className="log-field-key">
|
||||||
{`${fieldKey} : `}
|
{`${fieldKey} : `}
|
||||||
</Text>
|
</Text>
|
||||||
<LogText dangerouslySetInnerHTML={html} className="log-value" />
|
<LogText
|
||||||
|
dangerouslySetInnerHTML={html}
|
||||||
|
className="log-value"
|
||||||
|
linesPerRow={linesPerRow > 1 ? linesPerRow : undefined}
|
||||||
|
/>
|
||||||
</TextContainer>
|
</TextContainer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -92,6 +102,7 @@ type ListLogViewProps = {
|
|||||||
onSetActiveLog: (log: ILog) => void;
|
onSetActiveLog: (log: ILog) => void;
|
||||||
onAddToQuery: AddToQueryHOCProps['onAddToQuery'];
|
onAddToQuery: AddToQueryHOCProps['onAddToQuery'];
|
||||||
activeLog?: ILog | null;
|
activeLog?: ILog | null;
|
||||||
|
linesPerRow: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
function ListLogView({
|
function ListLogView({
|
||||||
@ -100,6 +111,7 @@ function ListLogView({
|
|||||||
onSetActiveLog,
|
onSetActiveLog,
|
||||||
onAddToQuery,
|
onAddToQuery,
|
||||||
activeLog,
|
activeLog,
|
||||||
|
linesPerRow,
|
||||||
}: ListLogViewProps): JSX.Element {
|
}: ListLogViewProps): JSX.Element {
|
||||||
const flattenLogData = useMemo(() => FlatLogData(logData), [logData]);
|
const flattenLogData = useMemo(() => FlatLogData(logData), [logData]);
|
||||||
|
|
||||||
@ -179,7 +191,11 @@ function ListLogView({
|
|||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<LogContainer>
|
<LogContainer>
|
||||||
<LogGeneralField fieldKey="Log" fieldValue={flattenLogData.body} />
|
<LogGeneralField
|
||||||
|
fieldKey="Log"
|
||||||
|
fieldValue={flattenLogData.body}
|
||||||
|
linesPerRow={linesPerRow}
|
||||||
|
/>
|
||||||
{flattenLogData.stream && (
|
{flattenLogData.stream && (
|
||||||
<LogGeneralField fieldKey="Stream" fieldValue={flattenLogData.stream} />
|
<LogGeneralField fieldKey="Stream" fieldValue={flattenLogData.stream} />
|
||||||
)}
|
)}
|
||||||
@ -222,4 +238,8 @@ ListLogView.defaultProps = {
|
|||||||
activeLog: null,
|
activeLog: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
LogGeneralField.defaultProps = {
|
||||||
|
linesPerRow: 1,
|
||||||
|
};
|
||||||
|
|
||||||
export default ListLogView;
|
export default ListLogView;
|
||||||
|
@ -2,6 +2,10 @@ import { Color } from '@signozhq/design-tokens';
|
|||||||
import { Card, Typography } from 'antd';
|
import { Card, Typography } from 'antd';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
interface LogTextProps {
|
||||||
|
linesPerRow?: number;
|
||||||
|
}
|
||||||
|
|
||||||
export const Container = styled(Card)<{
|
export const Container = styled(Card)<{
|
||||||
$isActiveLog: boolean;
|
$isActiveLog: boolean;
|
||||||
$isDarkMode: boolean;
|
$isDarkMode: boolean;
|
||||||
@ -23,7 +27,7 @@ export const Container = styled(Card)<{
|
|||||||
|
|
||||||
export const Text = styled(Typography.Text)`
|
export const Text = styled(Typography.Text)`
|
||||||
&&& {
|
&&& {
|
||||||
min-width: 1.5rem;
|
min-width: 2.5rem;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
@ -41,11 +45,19 @@ export const LogContainer = styled.div`
|
|||||||
gap: 6px;
|
gap: 6px;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const LogText = styled.div`
|
export const LogText = styled.div<LogTextProps>`
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
${({ linesPerRow }): string =>
|
||||||
|
linesPerRow
|
||||||
|
? `-webkit-line-clamp: ${linesPerRow};
|
||||||
|
line-clamp: ${linesPerRow};
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
white-space: normal; `
|
||||||
|
: 'white-space: nowrap;'};
|
||||||
|
};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const SelectedLog = styled.div`
|
export const SelectedLog = styled.div`
|
||||||
|
@ -120,38 +120,36 @@ export default function LogsFormatOptionsMenu({
|
|||||||
|
|
||||||
{selectedItem && (
|
{selectedItem && (
|
||||||
<>
|
<>
|
||||||
{selectedItem === 'raw' && (
|
<>
|
||||||
<>
|
<div className="horizontal-line" />
|
||||||
<div className="horizontal-line" />
|
<div className="max-lines-per-row">
|
||||||
<div className="max-lines-per-row">
|
<div className="title"> max lines per row </div>
|
||||||
<div className="title"> max lines per row </div>
|
<div className="raw-format max-lines-per-row-input">
|
||||||
<div className="raw-format max-lines-per-row-input">
|
<button
|
||||||
<button
|
type="button"
|
||||||
type="button"
|
className="periscope-btn"
|
||||||
className="periscope-btn"
|
onClick={decrementMaxLinesPerRow}
|
||||||
onClick={decrementMaxLinesPerRow}
|
>
|
||||||
>
|
{' '}
|
||||||
{' '}
|
<Minus size={12} />{' '}
|
||||||
<Minus size={12} />{' '}
|
</button>
|
||||||
</button>
|
<InputNumber
|
||||||
<InputNumber
|
min={1}
|
||||||
min={1}
|
max={10}
|
||||||
max={10}
|
value={maxLinesPerRow}
|
||||||
value={maxLinesPerRow}
|
onChange={handleLinesPerRowChange}
|
||||||
onChange={handleLinesPerRowChange}
|
/>
|
||||||
/>
|
<button
|
||||||
<button
|
type="button"
|
||||||
type="button"
|
className="periscope-btn"
|
||||||
className="periscope-btn"
|
onClick={incrementMaxLinesPerRow}
|
||||||
onClick={incrementMaxLinesPerRow}
|
>
|
||||||
>
|
{' '}
|
||||||
{' '}
|
<Plus size={12} />{' '}
|
||||||
<Plus size={12} />{' '}
|
</button>
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</div>
|
||||||
)}
|
</>
|
||||||
|
|
||||||
<div className="selected-item-content-container active">
|
<div className="selected-item-content-container active">
|
||||||
{!addNewColumn && <div className="horizontal-line" />}
|
{!addNewColumn && <div className="horizontal-line" />}
|
||||||
|
@ -71,6 +71,7 @@ function LiveLogsList({ logs }: LiveLogsListProps): JSX.Element {
|
|||||||
key={log.id}
|
key={log.id}
|
||||||
logData={log}
|
logData={log}
|
||||||
selectedFields={selectedFields}
|
selectedFields={selectedFields}
|
||||||
|
linesPerRow={options.maxLines}
|
||||||
onAddToQuery={onAddToQuery}
|
onAddToQuery={onAddToQuery}
|
||||||
onSetActiveLog={onSetActiveLog}
|
onSetActiveLog={onSetActiveLog}
|
||||||
/>
|
/>
|
||||||
|
@ -90,6 +90,7 @@ function LogsExplorerList({
|
|||||||
onAddToQuery={onAddToQuery}
|
onAddToQuery={onAddToQuery}
|
||||||
onSetActiveLog={onSetActiveLog}
|
onSetActiveLog={onSetActiveLog}
|
||||||
activeLog={activeLog}
|
activeLog={activeLog}
|
||||||
|
linesPerRow={options.maxLines}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -74,6 +74,7 @@ function LogsTable(props: LogsTableProps): JSX.Element {
|
|||||||
key={log.id}
|
key={log.id}
|
||||||
logData={log}
|
logData={log}
|
||||||
selectedFields={selected}
|
selectedFields={selected}
|
||||||
|
linesPerRow={linesPerRow}
|
||||||
onAddToQuery={onAddToQuery}
|
onAddToQuery={onAddToQuery}
|
||||||
onSetActiveLog={onSetActiveLog}
|
onSetActiveLog={onSetActiveLog}
|
||||||
/>
|
/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user