mirror of
https://github.com/apache/superset.git
synced 2026-05-10 18:35:40 +00:00
@@ -16,7 +16,6 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import { useMemo } from 'react';
|
||||
import pick from 'lodash/pick';
|
||||
import { shallowEqual, useSelector } from 'react-redux';
|
||||
import { SqlLabRootState, QueryEditor } from 'src/SqlLab/types';
|
||||
@@ -25,10 +24,7 @@ export default function useQueryEditor<T extends keyof QueryEditor>(
|
||||
sqlEditorId: string,
|
||||
attributes: ReadonlyArray<T>,
|
||||
) {
|
||||
const queryEditor = useSelector<
|
||||
SqlLabRootState,
|
||||
Pick<QueryEditor, T | 'id' | 'schema'>
|
||||
>(
|
||||
return useSelector<SqlLabRootState, Pick<QueryEditor, T | 'id'>>(
|
||||
({ sqlLab: { unsavedQueryEditor, queryEditors } }) =>
|
||||
pick(
|
||||
{
|
||||
@@ -36,32 +32,7 @@ export default function useQueryEditor<T extends keyof QueryEditor>(
|
||||
...(sqlEditorId === unsavedQueryEditor.id && unsavedQueryEditor),
|
||||
},
|
||||
['id'].concat(attributes),
|
||||
) as Pick<QueryEditor, T | 'id' | 'schema'>,
|
||||
) as Pick<QueryEditor, T | 'id'>,
|
||||
shallowEqual,
|
||||
);
|
||||
const { schema, schemaOptions } = useSelector<
|
||||
SqlLabRootState,
|
||||
Pick<QueryEditor, 'schema' | 'schemaOptions'>
|
||||
>(
|
||||
({ sqlLab: { unsavedQueryEditor, queryEditors } }) =>
|
||||
pick(
|
||||
{
|
||||
...queryEditors.find(({ id }) => id === sqlEditorId),
|
||||
...(sqlEditorId === unsavedQueryEditor.id && unsavedQueryEditor),
|
||||
},
|
||||
['schema', 'schemaOptions'],
|
||||
) as Pick<QueryEditor, T | 'schema' | 'schemaOptions'>,
|
||||
shallowEqual,
|
||||
);
|
||||
|
||||
const schemaOptionsMap = useMemo(
|
||||
() => new Set(schemaOptions?.map(({ value }) => value)),
|
||||
[schemaOptions],
|
||||
);
|
||||
|
||||
if ('schema' in queryEditor && schema && !schemaOptionsMap.has(schema)) {
|
||||
delete queryEditor.schema;
|
||||
}
|
||||
|
||||
return queryEditor as Pick<QueryEditor, T | 'id'>;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ test('includes id implicitly', () => {
|
||||
test('returns updated values from unsaved change', () => {
|
||||
const expectedSql = 'SELECT updated_column\nFROM updated_table\nWHERE';
|
||||
const { result } = renderHook(
|
||||
() => useQueryEditor(defaultQueryEditor.id, ['id', 'sql', 'schema']),
|
||||
() => useQueryEditor(defaultQueryEditor.id, ['id', 'sql']),
|
||||
{
|
||||
wrapper: createWrapper({
|
||||
useRedux: true,
|
||||
@@ -88,31 +88,5 @@ test('returns updated values from unsaved change', () => {
|
||||
},
|
||||
);
|
||||
expect(result.current.id).toEqual(defaultQueryEditor.id);
|
||||
expect(result.current.schema).toEqual(defaultQueryEditor.schema);
|
||||
expect(result.current.sql).toEqual(expectedSql);
|
||||
});
|
||||
|
||||
test('skips the deprecated schema option', () => {
|
||||
const expectedSql = 'SELECT updated_column\nFROM updated_table\nWHERE';
|
||||
const { result } = renderHook(
|
||||
() => useQueryEditor(defaultQueryEditor.id, ['schema']),
|
||||
{
|
||||
wrapper: createWrapper({
|
||||
useRedux: true,
|
||||
store: mockStore({
|
||||
...initialState,
|
||||
sqlLab: {
|
||||
...initialState.sqlLab,
|
||||
unsavedQueryEditor: {
|
||||
id: defaultQueryEditor.id,
|
||||
sql: expectedSql,
|
||||
schema: 'deprecated schema',
|
||||
},
|
||||
},
|
||||
}),
|
||||
}),
|
||||
},
|
||||
);
|
||||
expect(result.current.schema).not.toEqual(defaultQueryEditor.schema);
|
||||
expect(result.current.schema).toBeUndefined();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user