-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Init commit * more commit * Add more changes * Add tests * clean up code * Init queries UI * Add unit tests * Fix unsaved merge conflict * Fix tests and merge conflicts again * update snapshot * Fix snapshot * Reorder some props in tile * resolve comments * Fix tests * Fix tests and make design responsive * Remove snapshots * Update tests for tile input
- Loading branch information
1 parent
6de34e0
commit d38ba48
Showing
15 changed files
with
536 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
src/views/workflow-queries/workflow-queries-loader/workflow-queries-loader.styles.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { styled as createStyled } from 'baseui'; | ||
|
||
export const styled = { | ||
PageContainer: createStyled('div', ({ $theme }) => ({ | ||
display: 'flex', | ||
flexDirection: 'column', | ||
gap: $theme.sizing.scale900, | ||
[$theme.mediaQuery.medium]: { | ||
flexDirection: 'row', | ||
}, | ||
})), | ||
QueriesSidebar: createStyled('div', ({ $theme }) => ({ | ||
[$theme.mediaQuery.medium]: { | ||
flex: '1 0 300px', | ||
}, | ||
maxWidth: '450px', | ||
display: 'flex', | ||
flexDirection: 'column', | ||
rowGap: $theme.sizing.scale600, | ||
})), | ||
QueryResultView: createStyled('div', { | ||
flex: '1 0 300px', | ||
}), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
...flow-queries/workflow-queries-result-json/__tests__/workflow-queries-result-json.test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
import React from 'react'; | ||
|
||
import copy from 'copy-to-clipboard'; | ||
|
||
import { render, fireEvent, screen, act } from '@/test-utils/rtl'; | ||
|
||
import WorkflowQueriesResultJson from '../workflow-queries-result-json'; | ||
|
||
jest.mock('copy-to-clipboard', jest.fn); | ||
|
||
jest.mock('@/components/pretty-json/pretty-json', () => | ||
jest.fn(({ json }) => ( | ||
<div> | ||
<div>PrettyJson Mock</div> | ||
<div>{JSON.stringify(json)}</div> | ||
</div> | ||
)) | ||
); | ||
|
||
describe(WorkflowQueriesResultJson.name, () => { | ||
it('renders correctly with initial props', () => { | ||
setup({}); | ||
|
||
expect(screen.getByText('PrettyJson Mock')).toBeInTheDocument(); | ||
expect(screen.getByText(/dataJson/)).toBeInTheDocument(); | ||
}); | ||
|
||
it('copies JSON to clipboard', () => { | ||
const inputData = { input: 'dataJson' }; | ||
setup({ data: inputData }); | ||
|
||
const copyButton = screen.getByRole('button'); | ||
fireEvent.click(copyButton); | ||
|
||
expect(copy).toHaveBeenCalledWith(JSON.stringify(inputData, null, '\t')); | ||
}); | ||
|
||
it('show tooltip for 1 second and remove it', () => { | ||
jest.useFakeTimers(); | ||
|
||
setup({}); | ||
|
||
const copyButton = screen.getByRole('button'); | ||
fireEvent.click(copyButton); | ||
const visibleTooltip = screen.getByText('Copied'); | ||
expect(visibleTooltip).toBeInTheDocument(); | ||
|
||
act(() => { | ||
jest.advanceTimersByTime(1000 + 500); // hide + animation duration | ||
}); | ||
|
||
// Ensure the tooltip is hidden after 1000ms | ||
const hiddenTooltip = screen.queryByText('Copied'); | ||
expect(hiddenTooltip).not.toBeInTheDocument(); | ||
|
||
jest.useRealTimers(); | ||
}); | ||
}); | ||
|
||
function setup({ | ||
data = { input: 'dataJson' }, | ||
error = undefined, | ||
loading = false, | ||
}: { | ||
data?: any; | ||
error?: any; | ||
loading?: boolean; | ||
}) { | ||
render( | ||
<WorkflowQueriesResultJson data={data} error={error} loading={loading} /> | ||
); | ||
} |
14 changes: 14 additions & 0 deletions
14
...iews/workflow-queries/workflow-queries-result-json/workflow-queries-result-json.styles.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
import { styled as createStyled } from 'baseui'; | ||
|
||
export const styled = { | ||
ViewContainer: createStyled('div', ({ $theme }) => ({ | ||
display: 'flex', | ||
flexDirection: 'row', | ||
alignItems: 'flex-start', | ||
justifyContent: 'space-between', | ||
gap: $theme.sizing.scale600, | ||
padding: $theme.sizing.scale600, | ||
backgroundColor: $theme.colors.backgroundSecondary, | ||
borderRadius: $theme.borders.radius300, | ||
})), | ||
}; |
51 changes: 51 additions & 0 deletions
51
src/views/workflow-queries/workflow-queries-result-json/workflow-queries-result-json.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
'use client'; | ||
import React, { useEffect, useState } from 'react'; | ||
|
||
import { Button, KIND as BUTTON_KIND, SHAPE, SIZE } from 'baseui/button'; | ||
import { ACCESSIBILITY_TYPE, Tooltip } from 'baseui/tooltip'; | ||
import copy from 'copy-to-clipboard'; | ||
import { MdCopyAll } from 'react-icons/md'; | ||
|
||
import PrettyJson from '@/components/pretty-json/pretty-json'; | ||
|
||
import { styled } from './workflow-queries-result-json.styles'; | ||
import { type Props } from './workflow-queries-result-json.types'; | ||
|
||
export default function WorkflowQueriesResultJson(props: Props) { | ||
const [showTooltip, setShowTooltip] = useState(false); | ||
|
||
useEffect(() => { | ||
if (showTooltip) { | ||
const timer = setTimeout(() => { | ||
setShowTooltip(false); | ||
}, 1000); | ||
return () => clearTimeout(timer); | ||
} | ||
}, [showTooltip]); | ||
|
||
return ( | ||
<styled.ViewContainer> | ||
<PrettyJson json={props.data} /> | ||
<Tooltip | ||
animateOutTime={400} | ||
isOpen={showTooltip} | ||
showArrow | ||
placement="bottom" | ||
accessibilityType={ACCESSIBILITY_TYPE.tooltip} | ||
content={() => <>Copied</>} | ||
> | ||
<Button | ||
onClick={() => { | ||
copy(JSON.stringify(props.data, null, '\t')); | ||
setShowTooltip(true); | ||
}} | ||
size={SIZE.compact} | ||
shape={SHAPE.pill} | ||
kind={BUTTON_KIND.secondary} | ||
> | ||
<MdCopyAll /> | ||
</Button> | ||
</Tooltip> | ||
</styled.ViewContainer> | ||
); | ||
} |
6 changes: 6 additions & 0 deletions
6
...views/workflow-queries/workflow-queries-result-json/workflow-queries-result-json.types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
// TODO: add proper types here when adding queries | ||
export type Props = { | ||
data: any; | ||
error: any; | ||
loading: boolean; | ||
}; |
40 changes: 40 additions & 0 deletions
40
...rkflow-queries/workflow-queries-tile-input/__tests__/workflow-queries-tile-input.test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import React from 'react'; | ||
|
||
import { userEvent } from '@testing-library/user-event'; | ||
|
||
import { render, screen } from '@/test-utils/rtl'; | ||
|
||
import WorkflowQueriesTileInput from '../workflow-queries-tile-input'; | ||
|
||
describe(WorkflowQueriesTileInput.name, () => { | ||
afterEach(() => { | ||
jest.clearAllMocks(); | ||
}); | ||
|
||
it('renders correctly', () => { | ||
render(<WorkflowQueriesTileInput value="" onChange={jest.fn()} />); | ||
|
||
const textbox = screen.getByRole('textbox'); | ||
expect(textbox).toBeInTheDocument(); | ||
}); | ||
|
||
it('renders correctly with a non-empty value', () => { | ||
render( | ||
<WorkflowQueriesTileInput value="test value" onChange={jest.fn()} /> | ||
); | ||
|
||
const textbox = screen.getByRole('textbox'); | ||
expect(textbox).toHaveTextContent('test value'); | ||
}); | ||
|
||
it('calls onChange when typed into', async () => { | ||
const user = userEvent.setup(); | ||
const mockOnChange = jest.fn(); | ||
|
||
render(<WorkflowQueriesTileInput value="" onChange={mockOnChange} />); | ||
|
||
await user.type(screen.getByRole('textbox'), 'a'); | ||
|
||
expect(mockOnChange).toHaveBeenCalledWith('a'); | ||
}); | ||
}); |
13 changes: 13 additions & 0 deletions
13
src/views/workflow-queries/workflow-queries-tile-input/workflow-queries-tile-input.styles.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import { type Theme } from 'baseui'; | ||
import { type TextareaOverrides } from 'baseui/textarea'; | ||
import { type StyleObject } from 'styletron-react'; | ||
|
||
export const overrides = { | ||
textarea: { | ||
Input: { | ||
style: ({ $theme }: { $theme: Theme }): StyleObject => ({ | ||
...$theme.typography.MonoParagraphXSmall, | ||
}), | ||
}, | ||
} satisfies TextareaOverrides, | ||
}; |
16 changes: 16 additions & 0 deletions
16
src/views/workflow-queries/workflow-queries-tile-input/workflow-queries-tile-input.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import React from 'react'; | ||
|
||
import { Textarea } from 'baseui/textarea'; | ||
|
||
import { overrides } from './workflow-queries-tile-input.styles'; | ||
import { type Props } from './workflow-queries-tile-input.types'; | ||
|
||
export default function WorkflowQueriesTileInput(props: Props) { | ||
return ( | ||
<Textarea | ||
value={props.value} | ||
onChange={(e) => props.onChange(e.target.value)} | ||
overrides={overrides.textarea} | ||
/> | ||
); | ||
} |
4 changes: 4 additions & 0 deletions
4
src/views/workflow-queries/workflow-queries-tile-input/workflow-queries-tile-input.types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
export type Props = { | ||
value: string; | ||
onChange: (value: string) => void; | ||
}; |
Oops, something went wrong.