mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-14 17:02:49 +03:00
console: Only use json string editor for jsonb columns DSF-211
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/8396 Co-authored-by: Julian <843342+okjulian@users.noreply.github.com> GitOrigin-RevId: bce8e6483bf163aecfdc54dfe23c91439dafaf59
This commit is contained in:
parent
bf5f5a0e30
commit
e501b60a82
@ -6,6 +6,7 @@ import { within } from '@testing-library/dom';
|
|||||||
import {
|
import {
|
||||||
fireEvent,
|
fireEvent,
|
||||||
userEvent,
|
userEvent,
|
||||||
|
waitFor,
|
||||||
waitForElementToBeRemoved,
|
waitForElementToBeRemoved,
|
||||||
} from '@storybook/testing-library';
|
} from '@storybook/testing-library';
|
||||||
import { expect } from '@storybook/jest';
|
import { expect } from '@storybook/jest';
|
||||||
@ -16,6 +17,8 @@ import { usePermissionComparators } from '../hooks/usePermissionComparators';
|
|||||||
import { handlers } from './__tests__/fixtures/jsonb/handlers';
|
import { handlers } from './__tests__/fixtures/jsonb/handlers';
|
||||||
import { ReactQueryDecorator } from '../../../../../../storybook/decorators/react-query';
|
import { ReactQueryDecorator } from '../../../../../../storybook/decorators/react-query';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { Permissions } from './types';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
title: 'Features/Permissions/Form/Row Permissions Input',
|
title: 'Features/Permissions/Form/Row Permissions Input',
|
||||||
@ -611,7 +614,7 @@ export const JsonbColumns: ComponentStory<
|
|||||||
|
|
||||||
JsonbColumns.play = async ({ canvasElement }) => {
|
JsonbColumns.play = async ({ canvasElement }) => {
|
||||||
const canvas = within(canvasElement);
|
const canvas = within(canvasElement);
|
||||||
// Wait unti Loading is gone
|
// Wait until Loading is gone
|
||||||
await waitForElementToBeRemoved(() => canvas.getByText('Loading'), {
|
await waitForElementToBeRemoved(() => canvas.getByText('Loading'), {
|
||||||
timeout: 50000,
|
timeout: 50000,
|
||||||
});
|
});
|
||||||
@ -645,3 +648,106 @@ export const JsonbColumnsHasKeys: ComponentStory<
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const StringColumns: ComponentStory<
|
||||||
|
typeof RowPermissionsInput
|
||||||
|
> = args => {
|
||||||
|
const [permissions, setPermissions] = useState<Permissions>({
|
||||||
|
name: { _eq: '' },
|
||||||
|
});
|
||||||
|
const tables = usePermissionTables({
|
||||||
|
dataSourceName: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const comparators = usePermissionComparators();
|
||||||
|
|
||||||
|
if (!tables || isEmpty(comparators)) return <>Loading</>;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<RowPermissionsInput
|
||||||
|
onPermissionsChange={p => {
|
||||||
|
setPermissions(p);
|
||||||
|
}}
|
||||||
|
table={{ schema: 'public', name: 'Stuff' }}
|
||||||
|
tables={tables}
|
||||||
|
comparators={comparators}
|
||||||
|
permissions={{ name: { _eq: '' } }}
|
||||||
|
/>
|
||||||
|
{/* State debugger. Used to test the current permissions value */}
|
||||||
|
<div className="invisible" data-testid="permissions-state">
|
||||||
|
{JSON.stringify(permissions)}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Play function testing that string column with numbers inside are represented as text on the UI
|
||||||
|
// Prevents regression where they were treated as numbers
|
||||||
|
StringColumns.play = async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
// Wait until Loading is gone
|
||||||
|
await waitForElementToBeRemoved(() => canvas.getByText('Loading'), {
|
||||||
|
timeout: 50000,
|
||||||
|
});
|
||||||
|
|
||||||
|
// // Write a number in the input
|
||||||
|
await userEvent.type(canvas.getByTestId('name._eq-value-input'), '1337');
|
||||||
|
|
||||||
|
// Expect the input to have the number as text
|
||||||
|
await waitFor(async () => {
|
||||||
|
expect(await canvas.findByTestId('permissions-state')).toHaveTextContent(
|
||||||
|
'{"name":{"_eq":"1337"}}'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NumberColumns: ComponentStory<
|
||||||
|
typeof RowPermissionsInput
|
||||||
|
> = args => {
|
||||||
|
const [permissions, setPermissions] = useState<Permissions>({
|
||||||
|
id: { _eq: '' },
|
||||||
|
});
|
||||||
|
const tables = usePermissionTables({
|
||||||
|
dataSourceName: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const comparators = usePermissionComparators();
|
||||||
|
|
||||||
|
if (!tables || isEmpty(comparators)) return <>Loading</>;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<RowPermissionsInput
|
||||||
|
onPermissionsChange={p => {
|
||||||
|
setPermissions(p);
|
||||||
|
}}
|
||||||
|
table={{ schema: 'public', name: 'Stuff' }}
|
||||||
|
tables={tables}
|
||||||
|
comparators={comparators}
|
||||||
|
permissions={{ id: { _eq: '1234' } }}
|
||||||
|
/>
|
||||||
|
{/* State debugger. Used to test the current permissions value */}
|
||||||
|
<div className="invisible" data-testid="permissions-state">
|
||||||
|
{JSON.stringify(permissions)}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
NumberColumns.play = async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
// Wait until Loading is gone
|
||||||
|
await waitForElementToBeRemoved(() => canvas.getByText('Loading'), {
|
||||||
|
timeout: 50000,
|
||||||
|
});
|
||||||
|
|
||||||
|
// // Write a number in the input
|
||||||
|
await userEvent.type(canvas.getByTestId('id._eq-value-input'), '1337');
|
||||||
|
|
||||||
|
// Expect the input to have the number as text
|
||||||
|
// Note it's not a number but a string
|
||||||
|
await waitFor(async () => {
|
||||||
|
expect(await canvas.findByTestId('permissions-state')).toHaveTextContent(
|
||||||
|
'{"id":{"_eq":"12341337"}}'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -31,8 +31,7 @@ export const ValueInputType = ({
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (operator?.type === 'jsonb' && operator?.inputStructure === 'object') {
|
||||||
if (operator?.inputStructure === 'object') {
|
|
||||||
return (
|
return (
|
||||||
<ObjectValueInput
|
<ObjectValueInput
|
||||||
componentLevelId={componentLevelId}
|
componentLevelId={componentLevelId}
|
||||||
|
Loading…
Reference in New Issue
Block a user