Skip to content

Commit

Permalink
Improve typing
Browse files Browse the repository at this point in the history
  • Loading branch information
kgabryje committed Feb 6, 2025
1 parent 5c1ef36 commit 5c1daeb
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ describe('Datasource control', () => {
)
.first()
.focus();
cy.focused().clear();
cy.focused().type(`${newMetricName}{enter}`);
cy.focused().clear({ force: true });
cy.focused().type(`${newMetricName}{enter}`, { force: true });

cy.get('[data-test="datasource-modal-save"]').click();
cy.get('.antd5-modal-confirm-btns button').contains('OK').click();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* specific language governing permissions and limitations
* under the License.
*/
import { Maybe, QueryFormMetric } from '../../types';
import { Currency, Maybe, QueryFormMetric } from '../../types';
import { Column } from './Column';

export type Aggregate =
Expand Down Expand Up @@ -65,7 +65,7 @@ export interface Metric {
certification_details?: Maybe<string>;
certified_by?: Maybe<string>;
d3format?: Maybe<string>;
currency?: Maybe<string>;
currency?: Maybe<Currency>;
description?: Maybe<string>;
is_certified?: boolean;
verbose_name?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ describe('BigNumberWithTrendline', () => {
label: 'value',
metric_name: 'value',
d3format: '.2f',
currency: `{symbol: 'USD', symbolPosition: 'prefix' }`,
currency: { symbol: 'USD', symbolPosition: 'prefix' },
},
],
},
Expand Down
56 changes: 27 additions & 29 deletions superset-frontend/src/components/Datasource/DatasourceModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import Alert from 'src/components/Alert';
import Button from 'src/components/Button';
import {
isDefined,
Metric,
styled,
SupersetClient,
getClientErrorObject,
Expand All @@ -43,6 +42,7 @@ import {
fetchSyncedColumns,
updateColumns,
} from 'src/components/Datasource/utils';
import { DatasetObject } from '../../features/datasets/types';

const DatasourceEditor = AsyncEsmComponent(() => import('./DatasourceEditor'));

Expand Down Expand Up @@ -70,14 +70,16 @@ const StyledDatasourceModal = styled(Modal)`
interface DatasourceModalProps {
addSuccessToast: (msg: string) => void;
addDangerToast: (msg: string) => void;
datasource: any;
datasource: DatasetObject;
onChange: () => {};
onDatasourceSave: (datasource: object, errors?: Array<any>) => {};
onHide: () => {};
show: boolean;
}

function buildExtraJsonObject(item: Record<string, unknown>) {
function buildExtraJsonObject(
item: DatasetObject['metrics'][0] | DatasetObject['columns'][0],
) {
const certification =
item?.certified_by || item?.certification_details
? {
Expand All @@ -100,13 +102,7 @@ const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
show,
}) => {
const dispatch = useDispatch();
const [currentDatasource, setCurrentDatasource] = useState({
...datasource,
metrics: datasource?.metrics?.map((metric: Metric) => ({
...metric,
currency: JSON.parse(metric.currency || 'null'),
})),
});
const [currentDatasource, setCurrentDatasource] = useState(datasource);
const currencies = useSelector<
{
common: {
Expand Down Expand Up @@ -143,7 +139,7 @@ const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
extra: datasource.extra,
is_managed_externally: datasource.is_managed_externally,
external_url: datasource.external_url,
metrics: datasource?.metrics?.map((metric: Record<string, unknown>) => {
metrics: datasource?.metrics?.map((metric: DatasetObject['metrics'][0]) => {
const metricBody: any = {
expression: metric.expression,
description: metric.description,
Expand All @@ -163,22 +159,24 @@ const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
}
return metricBody;
}),
columns: datasource?.columns?.map((column: Record<string, unknown>) => ({
id: typeof column.id === 'number' ? column.id : undefined,
column_name: column.column_name,
type: column.type,
advanced_data_type: column.advanced_data_type,
verbose_name: column.verbose_name,
description: column.description,
expression: column.expression,
filterable: column.filterable,
groupby: column.groupby,
is_active: column.is_active,
is_dttm: column.is_dttm,
python_date_format: column.python_date_format || null,
uuid: column.uuid,
extra: buildExtraJsonObject(column),
})),
columns: datasource?.columns?.map(
(column: DatasetObject['columns'][0]) => ({
id: typeof column.id === 'number' ? column.id : undefined,
column_name: column.column_name,
type: column.type,
advanced_data_type: column.advanced_data_type,
verbose_name: column.verbose_name,
description: column.description,
expression: column.expression,
filterable: column.filterable,
groupby: column.groupby,
is_active: column.is_active,
is_dttm: column.is_dttm,
python_date_format: column.python_date_format || null,
uuid: column.uuid,
extra: buildExtraJsonObject(column),
}),
),
owners: datasource.owners.map(
(o: Record<string, number>) => o.value || o.id,
),
Expand Down Expand Up @@ -253,10 +251,10 @@ const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
}
};

const onDatasourceChange = (data: Record<string, any>, err: Array<any>) => {
const onDatasourceChange = (data: DatasetObject, err: Array<any>) => {
setCurrentDatasource({
...data,
metrics: data?.metrics.map((metric: Metric) => ({
metrics: data?.metrics.map((metric: DatasetObject['metrics'][0]) => ({
...metric,
is_certified: metric?.certified_by || metric?.certification_details,
})),
Expand Down
24 changes: 20 additions & 4 deletions superset-frontend/src/components/Datasource/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/
import { Children, cloneElement } from 'react';
import { nanoid } from 'nanoid';
import { SupersetClient, t } from '@superset-ui/core';
import { SupersetClient, tn } from '@superset-ui/core';
import rison from 'rison';

export function recurseReactClone(children, type, propExtender) {
Expand Down Expand Up @@ -91,14 +91,30 @@ export function updateColumns(prevCols, newCols, addSuccessToast) {
});
if (columnChanges.modified.length) {
addSuccessToast(
t('Modified columns: %s', columnChanges.modified.join(', ')),
tn(
'Modified 1 column in the virtual dataset',
'Modified %s columns in the virtual dataset',
columnChanges.modified.length,
),
);
}
if (columnChanges.removed.length) {
addSuccessToast(t('Removed columns: %s', columnChanges.removed.join(', ')));
addSuccessToast(
tn(
'Removed 1 column from the virtual dataset',
'Removed %s columns from the virtual dataset',
columnChanges.removed.length,
),
);
}
if (columnChanges.added.length) {
addSuccessToast(t('New columns added: %s', columnChanges.added.join(', ')));
addSuccessToast(
tn(
'Added 1 new column to the virtual dataset',
'Added %s new columns to the virtual dataset',
columnChanges.added.length,
),
);
}
return columnChanges;
}
Expand Down
24 changes: 20 additions & 4 deletions superset-frontend/src/features/datasets/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Currency } from '@superset-ui/core';
import { Currency, type DatasourceType } from '@superset-ui/core';
import { Owner } from '@superset-ui/chart-controls';

/**
* Licensed to the Apache Software Foundation (ASF) under one
Expand Down Expand Up @@ -32,37 +33,52 @@ export type ColumnObject = {
python_date_format?: string;
uuid?: string;
extra?: string;
certified_by?: string;
certification_details?: string;
warning_markdown?: string;
advanced_data_type?: string;
};

type MetricObject = {
id: number;
uuid: number;
expression?: string;
description?: string;
metric_name: string;
verbose_name?: string;
metric_type: string;
d3format?: string;
currency?: Currency;
warning_text?: string;
certified_by?: string;
certification_details?: string;
warning_markdown?: string;
};

export type DatasetObject = {
id: number;
table_name?: string;
sql?: string;
filter_select_enabled?: boolean;
fetch_values_predicate?: string;
schema?: string;
description?: string;
main_dttm_col?: string;
description: string | null;
main_dttm_col: string;
offset?: number;
default_endpoint?: string;
cache_timeout?: number;
is_sqllab_view?: boolean;
template_params?: string;
owners: number[];
owners: Owner[];
columns: ColumnObject[];
metrics: MetricObject[];
extra?: string;
is_managed_externally: boolean;
normalize_columns: boolean;
always_filter_main_dttm: boolean;
type: DatasourceType;
column_formats: Record<string, string>;
currency_formats: Record<string, Currency>;
datasource_name: string | null;
verbose_map: Record<string, string>;
};

0 comments on commit 5c1daeb

Please sign in to comment.