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:
Vikrant Gupta 2024-03-22 13:40:55 +05:30 committed by GitHub
parent f34a49e19c
commit ae0d685b29
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 71 additions and 38 deletions

View File

@ -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;

View File

@ -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`

View File

@ -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" />}

View File

@ -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}
/> />

View File

@ -90,6 +90,7 @@ function LogsExplorerList({
onAddToQuery={onAddToQuery} onAddToQuery={onAddToQuery}
onSetActiveLog={onSetActiveLog} onSetActiveLog={onSetActiveLog}
activeLog={activeLog} activeLog={activeLog}
linesPerRow={options.maxLines}
/> />
); );
}, },

View File

@ -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}
/> />