Skip to content

Commit d4e68e5

Browse files
committed
Activate eslint no-unsafe-assignment
Enables the eslint no-unsafe-assignment. Does not fix every problem this rule surfaces, i.e. unchecked json parses, but it fixes some of them and therefore at least constitutes some progress.
1 parent 994b5b6 commit d4e68e5

31 files changed

Lines changed: 440 additions & 190 deletions

eslint.config.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export default [
2020
"@typescript-eslint/no-floating-promises": "off",
2121
"@typescript-eslint/no-misused-promises": "off",
2222
"@typescript-eslint/no-unsafe-argument": "off",
23-
"@typescript-eslint/no-unsafe-assignment": "off",
2423
"@typescript-eslint/no-unsafe-call": "off",
2524
"@typescript-eslint/no-unsafe-member-access": "off",
2625
"@typescript-eslint/no-unused-vars": "off",

src/components/events/partials/modals/DeleteEventsModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ const DeleteEventsModal = ({
116116
{/* Repeat for each presenter*/}
117117
{/* @ts-expect-error TS(7006): Parameter 'presenter' implicitly has an 'any' type... Remove this comment to see the full error message */}
118118
{event.presenters.map((presenter, key) => (
119+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
119120
<span className="metadata-entry" key={key}>
120121
{presenter}
121122
</span>

src/components/events/partials/modals/DeleteSeriesModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ const DeleteSeriesModal = ({
194194
{/*Repeat for each creator*/}
195195
{/* @ts-expect-error TS(7006): Parameter 'organizer' implicitly has an 'any' type */}
196196
{series.organizers.map((organizer, key) => (
197+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
197198
<span className="metadata-entry" key={key}>
198199
{organizer}
199200
</span>

src/components/events/partials/wizards/NewEventSummary.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ const NewEventSummary = <T extends RequiredFormProps>({
158158
{/* @ts-expect-error TS(7006): Parameter 'asset' implicitly has an 'any' type. */}
159159
{formik.values.uploadAssetsTrack.map((asset, key) =>
160160
asset.file ? (
161+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
161162
<tr key={key}>
162163
<td>
163164
{translateOverrideFallback(asset, t, "SHORT")}

src/components/events/partials/wizards/RenderWorkflowConfig.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,11 @@ const RenderRadio = <T extends RequiredFormProps>(
124124
};
125125

126126
const RenderNumber = <T extends RequiredFormProps>(
127-
{ field, formik } : { field: any, formik: FormikProps<T> }) => {
127+
{ field, formik } : { field: FieldSetField, formik: FormikProps<T> }) => {
128128
// validate that value of number is between max and min
129129
const validate = (value: string) => {
130130
let error;
131-
if (parseInt(value) > field.max || parseInt(value) < field.min) {
131+
if (field.max && field.min && (parseInt(value) > field.max || parseInt(value) < field.min)) {
132132
error = "out of range";
133133
}
134134
return error;

src/components/shared/TimeSeriesStatistics.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { useTranslation } from "react-i18next";
1616
import type { ChartOptions } from "chart.js";
1717
import { AsyncThunk } from "@reduxjs/toolkit";
1818
import { useAppDispatch } from "../../store";
19-
import { DataResolution, TimeMode } from "../../slices/statisticsSlice";
19+
import { DataResolution, Statistics, TimeMode } from "../../slices/statisticsSlice";
2020
import { ParseKeys } from "i18next";
2121

2222

@@ -48,7 +48,7 @@ const TimeSeriesStatistics = ({
4848
timeMode: TimeMode,
4949
dataResolution: DataResolution,
5050
statDescription: string,
51-
onChange: AsyncThunk<undefined, { id: string, providerId: string, from: string | Date, to: string | Date, dataResolution: DataResolution, timeMode: TimeMode, }, any>,
51+
onChange: AsyncThunk<Statistics[], { id: string, providerId: string, from: string | Date, to: string | Date, dataResolution: DataResolution, timeMode: TimeMode, }, any>,
5252
exportUrl: string,
5353
exportFileName: (statsTitle: string) => string,
5454
totalValue: number,

src/components/shared/modals/ResourceDetailsAccessPolicyTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const ResourceDetailsAccessPolicyTab = ({
6767
header: ParseKeys,
6868
policies: TransformedAcl[],
6969
policyTemplateId: number,
70-
fetchHasActiveTransactions?: AsyncThunk<any, string, any>
70+
fetchHasActiveTransactions?: AsyncThunk<{ active: boolean }, string, any>
7171
fetchAccessPolicies: AsyncThunk<any, string, any>,
7272
saveNewAccessPolicies: AsyncThunk<boolean, { id: string, policies: { acl: Acl }, override?: boolean }, any>
7373
descriptionText: ParseKeys,

src/components/shared/wizard/RenderField.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ const EditableBooleanValue = ({
146146
{...field}
147147
ref={ref}
148148
type="checkbox"
149-
checked={field.value}
149+
checked={field.value as boolean}
150150
autoFocus={isFirstField}
151151
/>
152152
);
@@ -214,7 +214,7 @@ const EditableSingleSelect = ({
214214
return (
215215
<DropDown
216216
ref={ref}
217-
value={field.value}
217+
value={field.value as string}
218218
text={text}
219219
options={metadataField.collection
220220
? metadataField.collection.map(item => ({ label: item.label ?? item.name, value: item.value, order: item.order }))
@@ -299,7 +299,7 @@ const EditableSingleValueTime = ({
299299
<div onClick={e => { e.stopPropagation(); }}>
300300
<DatePicker
301301
ref={ref}
302-
selected={typeof field.value === "string" ? parseISO(field.value) : field.value}
302+
selected={typeof field.value === "string" ? parseISO(field.value) : field.value as Date}
303303
onChange={value => setFieldValue(field.name, value)}
304304
showTimeSelect
305305
showTimeSelectOnly

src/components/shared/wizard/RenderMultiField.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const RenderMultiField = ({
2929
// Temporary storage for value user currently types in
3030
const [inputValue, setInputValue] = useState("");
3131

32-
const fieldValue = [...field.value];
32+
const fieldValue = [...field.value as string[]];
3333

3434
// Handle change of value user currently types in
3535
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {

src/components/shared/wizard/SelectContainer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import SearchContainer from "../SearchContainer";
88

99
type Item = {
1010
name: string
11+
id?: string
1112
[key: string]: unknown
1213
}
1314

@@ -38,7 +39,7 @@ const SelectContainer = ({
3839
const [defaultItems, setDefaultItems] = useState<Item[]>([]);
3940
// arrays an item can be part of depending on its state
4041
const [items, setItems] = useState<Item[]>([]);
41-
const [selectedItems, setSelectedItems] = useState(field.value);
42+
const [selectedItems, setSelectedItems] = useState<Item[]>(field.value);
4243
const [markedForAddition, setMarkedForAddition] = useState<string[]>([]);
4344
const [markedForRemoval, setMarkedForRemoval] = useState<string[]>([]);
4445

@@ -255,7 +256,6 @@ const SelectContainer = ({
255256
onChange={e => handleChangeRemove(e)}
256257
value={markedForRemoval}
257258
>
258-
{/* @ts-expect-error TS(7006): Parameter 'item' implicitly has an 'any' type. */}
259259
{selectedItems.map((item, key) => (
260260
<option key={key} value={item.name}>
261261
{item.name}

0 commit comments

Comments
 (0)