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/no-non-null-assertion': 0, // disabled temporarily
'@typescript-eslint/explicit-function-return-type': 0, '@typescript-eslint/explicit-function-return-type': 0,
'@typescript-eslint/explicit-module-boundary-types': 0, // re-enable up for discussion '@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, camelcase: 0,
'class-methods-use-this': 0, 'class-methods-use-this': 0,
'func-names': 0, 'func-names': 0,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -65,18 +65,19 @@ export default function ColumnConfigControl<T extends ColumnConfig>({
height, height,
...props ...props
}: ColumnConfigControlProps<T>) { }: ColumnConfigControlProps<T>) {
const { colnames: _colnames, coltypes: _coltypes } = columnsPropsObject || {}; const { colnames: sourceColnames, coltypes: sourceColtypes } =
columnsPropsObject || {};
let colnames: string[] = []; let colnames: string[] = [];
let coltypes: GenericDataType[] = []; let coltypes: GenericDataType[] = [];
if (appliedColumnNames.length === 0) { if (appliedColumnNames.length === 0) {
colnames = _colnames || []; colnames = sourceColnames || [];
coltypes = _coltypes || []; coltypes = sourceColtypes || [];
} else { } else {
const appliedCol = new Set(appliedColumnNames); const appliedCol = new Set(appliedColumnNames);
_colnames?.forEach((col, idx) => { sourceColnames?.forEach((col, idx) => {
if (appliedCol.has(col)) { if (appliedCol.has(col)) {
colnames.push(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 // Fallback to slack v1 if slack v2 is not compatible
setUseSlackV1(true); setUseSlackV1(true);
}) })

View File

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

View File

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

View File

@@ -329,7 +329,9 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
const loadDatabaseOptions = useMemo( 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({ const query = rison.encode_uri({
filters: [ filters: [
{ {
@@ -357,21 +359,20 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
); );
const loadSchemaOptions = useMemo( const loadSchemaOptions = useMemo(
() => () => () => {
(input = '', page: number, pageSize: number) => { if (!currentDatabaseId) {
if (!currentDatabaseId) { return Promise.resolve({ data: [], totalCount: 0 });
return Promise.resolve({ data: [], totalCount: 0 }); }
} return SupersetClient.get({
return SupersetClient.get({ endpoint: `/api/v1/database/${currentDatabaseId}/schemas/?q=(upload_allowed:!t)`,
endpoint: `/api/v1/database/${currentDatabaseId}/schemas/?q=(upload_allowed:!t)`, }).then(response => {
}).then(response => { const list = response.json.result.map((item: string) => ({
const list = response.json.result.map((item: string) => ({ value: item,
value: item, label: item,
label: item, }));
})); return { data: list, totalCount: response.json.count };
return { data: list, totalCount: response.json.count }; });
}); },
},
[currentDatabaseId], [currentDatabaseId],
); );
@@ -546,7 +547,7 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
} }
}, [show]); }, [show]);
const validateUpload = (_: any, value: string) => { const validateUpload = () => {
if (fileList.length === 0) { if (fileList.length === 0) {
return Promise.reject(t('Uploading a file is required')); return Promise.reject(t('Uploading a file is required'));
} }
@@ -561,7 +562,7 @@ const UploadDataModal: FunctionComponent<UploadDataModalProps> = ({
return Promise.resolve(); return Promise.resolve();
}; };
const validateDatabase = (_: any, value: string) => { const validateDatabase = () => {
if (!currentDatabaseId) { if (!currentDatabaseId) {
return Promise.reject(t('Selecting a database is required')); 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)); addSuccessToast(t('Tagged %s %ss', tagged.length, resourceName));
}) })
.catch(err => { .catch(() => {
addDangerToast(t('Failed to tag items')); addDangerToast(t('Failed to tag items'));
}); });

View File

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

View File

@@ -48,6 +48,8 @@ function UserInfoModal({
const handleFormSubmit = async (values: FormValues) => { const handleFormSubmit = async (values: FormValues) => {
try { try {
const { confirm_password, ...payload } = values; 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({ await SupersetClient.put({
endpoint: `/api/v1/me/`, endpoint: `/api/v1/me/`,
jsonPayload: { ...payload }, jsonPayload: { ...payload },

View File

@@ -22,6 +22,8 @@ import { FormValues } from './types';
export const createUser = async (values: FormValues) => { export const createUser = async (values: FormValues) => {
const { confirmPassword, ...payload } = values; 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) { if (payload.active == null) {
payload.active = false; payload.active = false;
} }

View File

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

View File

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

View File

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

View File

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

View File

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