Compare commits

...

2 Commits

Author SHA1 Message Date
Evan Rusackas
9771ad601a A couple more tweaks 2025-07-21 09:40:39 -07:00
Evan Rusackas
6e5360b7ab chore(ts): removing unused variables 2025-07-18 15:15:26 -07:00
26 changed files with 72 additions and 88 deletions

View File

@@ -163,7 +163,7 @@ module.exports = {
'@typescript-eslint/no-non-null-assertion': 0, // disabled temporarily
'@typescript-eslint/explicit-function-return-type': 0,
'@typescript-eslint/explicit-module-boundary-types': 0, // re-enable up for discussion
'@typescript-eslint/no-unused-vars': 'warn', // downgrade to Warning severity for Jest v30 upgrade
'@typescript-eslint/no-unused-vars': 'error',
camelcase: 0,
'class-methods-use-this': 0,
'func-names': 0,

View File

@@ -33,7 +33,6 @@ export function Label(props: LabelProps) {
onClick,
children,
icon,
id,
...rest
} = props;

View File

@@ -27,8 +27,6 @@ const DEFAULT_TIMEZONE = {
value: 'Africa/Abidjan', // timezones are deduped by the first alphabetical value
};
const MIN_SELECT_WIDTH = '400px';
const offsetsToName = {
'-300-240': ['Eastern Standard Time', 'Eastern Daylight Time'],
'-360-300': ['Central Standard Time', 'Central Daylight Time'],
@@ -48,13 +46,11 @@ const offsetsToName = {
export type TimezoneSelectorProps = {
onTimezoneChange: (value: string) => void;
timezone?: string | null;
minWidth?: string;
};
export default function TimezoneSelector({
onTimezoneChange,
timezone,
minWidth = MIN_SELECT_WIDTH, // smallest size for current values
...rest
}: TimezoneSelectorProps) {
const { TIMEZONE_OPTIONS, TIMEZONE_OPTIONS_SORT_COMPARATOR, validTimezone } =
@@ -156,6 +152,7 @@ export default function TimezoneSelector({
value={validTimezone}
options={TIMEZONE_OPTIONS}
sortComparator={TIMEZONE_OPTIONS_SORT_COMPARATOR}
style={{ minWidth }}
{...rest}
/>
);

View File

@@ -265,11 +265,7 @@ const DeckMulti = (props: DeckMultiProps) => {
);
const loadLayers = useCallback(
(
formData: QueryFormData,
payload: JsonObject,
viewport?: Viewport,
): void => {
(formData: QueryFormData, payload: JsonObject): void => {
setViewport(getAdjustedViewport());
setSubSlicesLayers({});

View File

@@ -138,7 +138,6 @@ export default function TableChart<D extends DataRecord = DataRecord>(
defaultAlignPN: alignPositiveNegative,
showCellBars,
colorPositiveNegative,
totals,
columnColorFormatters,
allowRearrangeColumns,
basicColorFormatters,

View File

@@ -19,7 +19,7 @@
*/
import { ColDef } from 'ag-grid-community';
import { useCallback, useMemo } from 'react';
import { DataRecord, GenericDataType } from '@superset-ui/core';
import { GenericDataType } from '@superset-ui/core';
import { ColorFormatters } from '@superset-ui/chart-controls';
import { extent as d3Extent, max as d3Max } from 'd3-array';
import {
@@ -49,7 +49,6 @@ type UseColDefsProps = {
defaultAlignPN: boolean;
showCellBars: boolean;
colorPositiveNegative: boolean;
totals: DataRecord | undefined;
columnColorFormatters: ColorFormatters;
allowRearrangeColumns?: boolean;
basicColorFormatters?: { [Key: string]: BasicColorFormatterType }[];
@@ -136,7 +135,6 @@ export const useColDefs = ({
defaultAlignPN,
showCellBars,
colorPositiveNegative,
totals,
columnColorFormatters,
allowRearrangeColumns,
basicColorFormatters,

View File

@@ -336,13 +336,8 @@ const config: ControlPanelConfig = {
description: t(
'Stack in groups, where each group corresponds to a dimension',
),
shouldMapStateToProps: (
prevState,
state,
controlState,
chartState,
) => true,
mapStateToProps: (state, controlState, chartState) => {
shouldMapStateToProps: () => true,
mapStateToProps: state => {
const value: JsonArray = state.controls.groupby
.value as JsonArray;
const valueAsStringArr: string[][] = value.map(v => {

View File

@@ -42,7 +42,6 @@ import {
LocalStorageKeys,
setItem,
} from 'src/utils/localStorageHelpers';
import { noop } from 'lodash';
import TableElement from '../TableElement';
export interface SqlEditorLeftBarProps {
@@ -86,7 +85,7 @@ const SqlEditorLeftBar = ({
'schema',
]);
const [_emptyResultsWithSearch, setEmptyResultsWithSearch] = useState(false);
const [, setEmptyResultsWithSearch] = useState(false);
const [userSelectedDb, setUserSelected] = useState<DatabaseObject | null>(
null,
);
@@ -99,8 +98,6 @@ const SqlEditorLeftBar = ({
[allSelectedTables, dbId, schema],
);
noop(_emptyResultsWithSearch); // This is to avoid unused variable warning, can be removed if not needed
useEffect(() => {
const bool = new URLSearchParams(window.location.search).get('db');
const userSelected = getItem(

View File

@@ -23,7 +23,6 @@ import { ErrorAlert } from './ErrorAlert';
export function FrontendNetworkErrorMessage({
error,
subtitle,
compact,
}: ErrorMessageComponentProps) {
const { level, message } = error;

View File

@@ -35,7 +35,7 @@ interface TitleContainerProps {
const FILTER_TYPE = 'FILTER';
const Container = styled.div<TitleContainerProps>`
${({ isDragging, theme }) => `
${({ isDragging }) => `
opacity: ${isDragging ? 0.3 : 1};
cursor: ${isDragging ? 'grabbing' : 'pointer'};
width: 100%;

View File

@@ -138,12 +138,16 @@ export default function DataSourcePanel({
width,
}: Props) {
const [dropzones] = useContext(DropzoneContext);
const { columns: _columns, metrics, folders: _folders } = datasource;
const {
columns: datasourceColumns,
metrics,
folders: datasourceFolders,
} = datasource;
const allowedColumns = useMemo(() => {
const validators = Object.values(dropzones);
if (!Array.isArray(_columns)) return [];
return _columns.filter(column =>
if (!Array.isArray(datasourceColumns)) return [];
return datasourceColumns.filter(column =>
validators.some(validator =>
validator({
value: column as DndItemValue,
@@ -151,7 +155,7 @@ export default function DataSourcePanel({
}),
),
);
}, [dropzones, _columns]);
}, [dropzones, datasourceColumns]);
const allowedMetrics = useMemo(() => {
const validators = Object.values(dropzones);
@@ -234,11 +238,11 @@ export default function DataSourcePanel({
transformDatasourceWithFolders(
filteredMetrics,
sortedColumns,
_folders,
datasourceFolders,
allowedMetrics,
allowedColumns,
),
[_folders, filteredMetrics, sortedColumns],
[datasourceFolders, filteredMetrics, sortedColumns],
);
const showInfoboxCheck = () => {

View File

@@ -47,6 +47,7 @@ export const ExploreAlert = forwardRef(
ref: RefObject<HTMLDivElement>,
) => (
<ErrorAlert
ref={ref}
errorType={title}
message={bodyText}
type={type}

View File

@@ -65,18 +65,19 @@ export default function ColumnConfigControl<T extends ColumnConfig>({
height,
...props
}: ColumnConfigControlProps<T>) {
const { colnames: _colnames, coltypes: _coltypes } = columnsPropsObject || {};
const { colnames: sourceColnames, coltypes: sourceColtypes } =
columnsPropsObject || {};
let colnames: string[] = [];
let coltypes: GenericDataType[] = [];
if (appliedColumnNames.length === 0) {
colnames = _colnames || [];
coltypes = _coltypes || [];
colnames = sourceColnames || [];
coltypes = sourceColtypes || [];
} else {
const appliedCol = new Set(appliedColumnNames);
_colnames?.forEach((col, idx) => {
sourceColnames?.forEach((col, idx) => {
if (appliedCol.has(col)) {
colnames.push(col);
coltypes.push(_coltypes?.[idx] as GenericDataType);
coltypes.push(sourceColtypes?.[idx] as GenericDataType);
}
});
}

View File

@@ -307,7 +307,7 @@ export const NotificationMethod: FunctionComponent<NotificationMethodProps> = ({
}
}
})
.catch(e => {
.catch(() => {
// Fallback to slack v1 if slack v2 is not compatible
setUseSlackV1(true);
})

View File

@@ -58,7 +58,6 @@ interface AllEntitiesTableProps {
}
export default function AllEntitiesTable({
search = '',
setShowTagModal,
objects,
canEditTag,

View File

@@ -187,7 +187,7 @@ const AnnotationModal: FunctionComponent<AnnotationModalProps> = ({
setCurrentAnnotation(data);
};
const onDateChange = (dates: any, dateString: Array<string>) => {
const onDateChange = (dates: any) => {
if (!dates?.[0] || !dates?.[1]) {
const data = {
...currentAnnotation,

View File

@@ -329,7 +329,9 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
const loadDatabaseOptions = useMemo(
() =>
(input = '', page: number, pageSize: number) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
(input: string, page: number, pageSize: number) => {
// TODO: Implement search functionality using input parameter
const query = rison.encode_uri({
filters: [
{
@@ -357,21 +359,20 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
);
const loadSchemaOptions = useMemo(
() =>
(input = '', page: number, pageSize: number) => {
if (!currentDatabaseId) {
return Promise.resolve({ data: [], totalCount: 0 });
}
return SupersetClient.get({
endpoint: `/api/v1/database/${currentDatabaseId}/schemas/?q=(upload_allowed:!t)`,
}).then(response => {
const list = response.json.result.map((item: string) => ({
value: item,
label: item,
}));
return { data: list, totalCount: response.json.count };
});
},
() => () => {
if (!currentDatabaseId) {
return Promise.resolve({ data: [], totalCount: 0 });
}
return SupersetClient.get({
endpoint: `/api/v1/database/${currentDatabaseId}/schemas/?q=(upload_allowed:!t)`,
}).then(response => {
const list = response.json.result.map((item: string) => ({
value: item,
label: item,
}));
return { data: list, totalCount: response.json.count };
});
},
[currentDatabaseId],
);
@@ -546,7 +547,7 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
}
}, [show]);
const validateUpload = (_: any, value: string) => {
const validateUpload = () => {
if (fileList.length === 0) {
return Promise.reject(t('Uploading a file is required'));
}
@@ -561,7 +562,7 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
return Promise.resolve();
};
const validateDatabase = (_: any, value: string) => {
const validateDatabase = () => {
if (!currentDatabaseId) {
return Promise.reject(t('Selecting a database is required'));
}

View File

@@ -83,7 +83,7 @@ const BulkTagModal: FC<BulkTagModalProps> = ({
}
addSuccessToast(t('Tagged %s %ss', tagged.length, resourceName));
})
.catch(err => {
.catch(() => {
addDangerToast(t('Failed to tag items'));
});

View File

@@ -126,7 +126,7 @@ const TagModal: FC<TagModalProps> = ({
setChartsToTag(resourceMap[TaggableResources.Chart]);
setSavedQueriesToTag(resourceMap[TaggableResources.SavedQuery]);
},
(error: Response) => {
() => {
addDangerToast('Error Fetching Tagged Objects');
},
);

View File

@@ -48,6 +48,8 @@ function UserInfoModal({
const handleFormSubmit = async (values: FormValues) => {
try {
const { confirm_password, ...payload } = values;
// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-expressions
confirm_password; // Destructured to exclude from payload
await SupersetClient.put({
endpoint: `/api/v1/me/`,
jsonPayload: { ...payload },

View File

@@ -22,6 +22,8 @@ import { FormValues } from './types';
export const createUser = async (values: FormValues) => {
const { confirmPassword, ...payload } = values;
// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-expressions
confirmPassword; // Destructured to exclude from payload
if (payload.active == null) {
payload.active = false;
}

View File

@@ -154,7 +154,7 @@ function AllEntities() {
setObjects(objects);
setLoading(false);
},
(error: Response) => {
() => {
addDangerToast('Error Fetching Tagged Objects');
setLoading(false);
},
@@ -168,7 +168,7 @@ function AllEntities() {
setTag(tag);
setLoading(false);
},
(error: Response) => {
() => {
addDangerToast(t('Error Fetching Tagged Objects'));
setLoading(false);
},

View File

@@ -190,23 +190,21 @@ export default function ExplorePage() {
})()
: Promise.reject()
)
.then(
({ result: { id, url, owners, form_data: _, ...data } }) => {
const slice = {
...data,
datasource: err.extra?.datasource_name,
slice_id: id,
slice_url: url,
owners: owners?.map(({ id }) => id),
};
dispatch(
hydrateExplore({
...exploreData,
slice,
}),
);
},
)
.then(({ result: { id, url, owners, ...data } }) => {
const slice = {
...data,
datasource: err.extra?.datasource_name,
slice_id: id,
slice_url: url,
owners: owners?.map(({ id }) => id),
};
dispatch(
hydrateExplore({
...exploreData,
slice,
}),
);
})
.catch(() => {
dispatch(hydrateExplore(exploreData));
});

View File

@@ -285,11 +285,7 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
const columns = useMemo(
() => [
{
Cell: ({
row: {
original: { kind },
},
}: any) => null,
Cell: () => null,
accessor: 'kind_icon',
disableSortBy: true,
size: 'xs',

View File

@@ -147,7 +147,7 @@ function GroupsList({ user }: GroupsListProps) {
.then(() => {
deletedGroupsNames.push(group.name);
})
.catch(err => {
.catch(() => {
addDangerToast(t('Error deleting %s', group.name));
}),
),

View File

@@ -168,7 +168,7 @@ function UsersList({ user }: UsersListProps) {
.then(() => {
deletedUserNames.push(user.username);
})
.catch(err => {
.catch(() => {
addDangerToast(t('Error deleting %s', user.username));
}),
),