UI Console Errors and Git Errors Fixes, + recommendations

Converted several variables to constants and removed unused function parameters in the AboutDialog component, addressing lint warnings

Introduced strict JSON interfaces in AlsaDeviceInfo to replace untyped “any” parameters and ensured returned arrays use constants

Simplified styling callbacks and defined props more strictly in App, while using constants for URL parsing

Updated the WithStyles helper to accept unknown argument lists and return types rather than “any”

Added a workflow step so CI runs npm run lint -- --fix inside the vite directory

Testing
This commit is contained in:
Extremesecrecy
2025-07-24 08:11:00 -07:00
parent b3853e1bdb
commit 1e9cd5eb13
11 changed files with 79 additions and 49 deletions
+5 -5
View File
@@ -62,14 +62,14 @@ const AboutDialog = class extends Component<AboutDialogProps, AboutDialogState>
.then(jackStatus => {
this.setState({ jackStatus: jackStatus });
})
.catch(_error => { /* ignore*/ });
.catch(() => { /* ignore*/ });
}
}
timerHandle?: number;
updateNotifications() {
let subscribed = this.mounted && this.props.open;
const subscribed = this.mounted && this.props.open;
if (subscribed !== this.subscribed) {
if (subscribed) {
this.timerHandle = setInterval(() => this.tick(), 1000);
@@ -116,12 +116,12 @@ const AboutDialog = class extends Component<AboutDialogProps, AboutDialogState>
this.mounted = false;
this.updateNotifications();
}
componentDidUpdate(prevProps: Readonly<AboutDialogProps>, prevState: Readonly<AboutDialogState>, snapshot: any): void {
componentDidUpdate(prevProps: Readonly<AboutDialogProps>, prevState: Readonly<AboutDialogState>, snapshot: unknown): void {
super.componentDidUpdate?.(prevProps, prevState, snapshot);
this.updateNotifications();
}
handleDialogClose(_e: SyntheticEvent) {
handleDialogClose() {
this.props.onClose();
}
@@ -129,7 +129,7 @@ const AboutDialog = class extends Component<AboutDialogProps, AboutDialogState>
render() {
let addressKey = 0;
let serverVersion = this.model.serverVersion?.serverVersion ?? "";
let nPos = serverVersion.indexOf(' ');
const nPos = serverVersion.indexOf(' ');
if (nPos !== -1) {
serverVersion = serverVersion.substring(nPos + 1);
}
+15 -3
View File
@@ -1,7 +1,19 @@
interface AlsaDeviceInfoJson {
cardId: number;
id: number;
name: string;
longName: string;
sampleRates: number[];
minBufferSize: number;
maxBufferSize: number;
supportsCapture?: boolean;
supportsPlayback?: boolean;
}
export default class AlsaDeviceInfo {
deserialize(input: any): AlsaDeviceInfo {
deserialize(input: AlsaDeviceInfoJson): AlsaDeviceInfo {
this.cardId = input.cardId;
this.id = input.id;
this.name = input.name;
@@ -13,9 +25,9 @@ export default class AlsaDeviceInfo {
this.supportsPlayback = input.supportsPlayback ? true : false;
return this;
}
static deserialize_array(input: any): AlsaDeviceInfo[]
static deserialize_array(input: AlsaDeviceInfoJson[]): AlsaDeviceInfo[]
{
let result: AlsaDeviceInfo[] = [];
const result: AlsaDeviceInfo[] = [];
for (let i = 0; i < input.length; ++i)
{
result.push(new AlsaDeviceInfo().deserialize(input[i]));
+8 -3
View File
@@ -22,14 +22,19 @@
* SOFTWARE.
*/
interface AlsaMidiDeviceInfoJson {
name: string;
description: string;
}
export class AlsaMidiDeviceInfo {
deserialize(input: any) : AlsaMidiDeviceInfo{
deserialize(input: AlsaMidiDeviceInfoJson) : AlsaMidiDeviceInfo{
this.name = input.name;
this.description = input.description;
return this;
}
static deserializeArray(input: any[]): AlsaMidiDeviceInfo[] {
let result: AlsaMidiDeviceInfo[] = [];
static deserializeArray(input: AlsaMidiDeviceInfoJson[]): AlsaMidiDeviceInfo[] {
const result: AlsaMidiDeviceInfo[] = [];
for (let i = 0; i < input.length; ++i) {
result[i] = new AlsaMidiDeviceInfo().deserialize(input[i]);
}
+16 -6
View File
@@ -17,15 +17,21 @@
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
interface AlsaSequencerPortSelectionJson {
id: string;
name: string;
sortOrder: number;
}
export class AlsaSequencerPortSelection {
deserialize(json: any) {
deserialize(json: AlsaSequencerPortSelectionJson) {
this.id = json.id;
this.name = json.name;
this.sortOrder = json.sortOrder;
return this;
};
static deserialize_array(input: any): AlsaSequencerPortSelection[] {
let result: AlsaSequencerPortSelection[] = [];
static deserialize_array(input: AlsaSequencerPortSelectionJson[]): AlsaSequencerPortSelection[] {
const result: AlsaSequencerPortSelection[] = [];
for (let i = 0; i < input.length; ++i) {
result[i] = new AlsaSequencerPortSelection().deserialize(input[i]);
}
@@ -36,13 +42,17 @@ export class AlsaSequencerPortSelection {
sortOrder: number = 0;
};
interface AlsaSequencerConfigurationJson {
connections: AlsaSequencerPortSelectionJson[];
}
export class AlsaSequencerConfiguration {
deserialize(input: any) {
deserialize(input: AlsaSequencerConfigurationJson) {
this.connections = AlsaSequencerPortSelection.deserialize_array(input.connections);
return this;
}
deserialize_array(input: any): AlsaSequencerConfiguration[] {
let result: AlsaSequencerConfiguration[] = [];
deserialize_array(input: AlsaSequencerConfigurationJson[]): AlsaSequencerConfiguration[] {
const result: AlsaSequencerConfiguration[] = [];
for (let i = 0; i < input.length; ++i) {
result[i] = new AlsaSequencerConfiguration().deserialize(input[i]);
}
+3 -1
View File
@@ -54,12 +54,13 @@ export class FakeAndroidHost implements AndroidHostInterface
return true;
}
setDisconnected(_isDisconnected: boolean): void {
void _isDisconnected;
}
showSponsorship() : void { }
launchExternalUrl(_url:string): boolean
{
void _url;
return false;
}
private theme = 1;
@@ -71,6 +72,7 @@ export class FakeAndroidHost implements AndroidHostInterface
}
setServerVersion(_serverVersion: string): void {
// No-op for fake host
void _serverVersion;
}
private keepScreenOn = false;
+6 -8
View File
@@ -154,7 +154,7 @@ const theme = createTheme(
/* make the selection state for MuiListItemButtons a smidgen darker (light theme only) */
MuiListItemButton: {
styleOverrides: {
root: ({ theme }) => ({
root: () => ({
'&.Mui-selected': {
backgroundColor: 'rgba(0, 0, 0, 0.2)', // Adjust for desired darkness
'&:hover': {
@@ -220,19 +220,17 @@ const theme = createTheme(
type AppThemeProps = {
};
type AppThemeProps = Record<string, never>;
function isTone3000Auth() {
let url = new URL(window.location.href);
let param = url.searchParams.get("api_key");
const url = new URL(window.location.href);
const param = url.searchParams.get("api_key");
return (param !== null && param !== "")
}
function isFontTest() {
let url = new URL(window.location.href);
let param = url.searchParams.get("fontTest");
const url = new URL(window.location.href);
const param = url.searchParams.get("fontTest");
return (param !== null)
}
+1 -2
View File
@@ -82,8 +82,7 @@ import { IDialogStackable, popDialogStack, pushDialogStack } from './DialogStack
interface AppProps extends WithStyles<typeof appStyles> {
};
type AppProps = WithStyles<typeof appStyles>;
const appStyles = ((theme: Theme) => (
{
+1 -1
View File
@@ -30,7 +30,7 @@ export function createStyles<T>(style: T): T {
}
export default
interface WithStyles<T extends (...args: any) => any> {
interface WithStyles<T extends (...args: unknown[]) => unknown> {
className?: string;
classes?: Partial<Record<keyof ReturnType<T>, string>>;
+3 -6
View File
@@ -54,9 +54,7 @@ interface ZoomedDialProps extends WithStyles<typeof styles> {
onSetValue(value: number): void
}
interface ZoomedDialState {
}
type ZoomedDialState = Record<string, never>;
const ZoomedDial = withStyles(
@@ -159,7 +157,7 @@ const ZoomedDial = withStyles(
}
onTouchStart(e: TouchEvent<SVGSVGElement>) {
onTouchStart() {
//must be defined to get onTouchMove
}
onTouchMove(e: TouchEvent<SVGSVGElement>) {
@@ -377,8 +375,7 @@ const ZoomedDial = withStyles(
}
onBodyPointerDownCapture(e_: any): any {
let e = e_ as PointerEvent;
onBodyPointerDownCapture(e: PointerEvent): any {
if (this.isExtraTouch(e)) {
this.captureElement!.setPointerCapture(e.pointerId);
this.capturedPointers.push(e.pointerId);
+13 -13
View File
@@ -94,21 +94,21 @@ const ZoomedUiControl = withTheme(withStyles(
if (!this.props.controlInfo) {
return 0;
} else {
let uiControl = this.props.controlInfo.uiControl;
let instanceId = this.props.controlInfo.instanceId;
const uiControl = this.props.controlInfo.uiControl;
const instanceId = this.props.controlInfo.instanceId;
if (instanceId === -2 && uiControl.symbol === "volume_db") {
return this.model.pedalboard.get()?.input_volume_db??0;
}
let pedalboardItem = this.model.pedalboard.get()?.getItem(instanceId);
let value: number = pedalboardItem?.getControlValue(uiControl.symbol) ?? 0;
const pedalboardItem = this.model.pedalboard.get()?.getItem(instanceId);
const value: number = pedalboardItem?.getControlValue(uiControl.symbol) ?? 0;
return value;
}
}
onSelectChanged(val: string | number) {
let v = Number.parseFloat(val.toString());
const v = Number.parseFloat(val.toString());
this.setState({ value: v });
if (this.props.controlInfo) {
this.model.setPedalboardControl(
@@ -119,7 +119,7 @@ const ZoomedUiControl = withTheme(withStyles(
}
onCheckChanged(checked: boolean): void {
let v = checked ? 1: 0;
const v = checked ? 1: 0;
this.setState({ value: v });
if (this.props.controlInfo) {
this.model.setPedalboardControl(
@@ -142,9 +142,9 @@ const ZoomedUiControl = withTheme(withStyles(
}
componentDidUpdate(oldProps: ZoomedUiControlProps, oldState: ZoomedUiControlState) {
componentDidUpdate(oldProps: ZoomedUiControlProps) {
if (this.hasControlChanged(oldProps, this.props)) {
let currentValue = this.getCurrentValue();
const currentValue = this.getCurrentValue();
if (this.state.value !== currentValue) {
this.setState({ value: this.getCurrentValue() });
}
@@ -204,10 +204,10 @@ const ZoomedUiControl = withTheme(withStyles(
}
}
onDoubleTap() {
let controlInfo = this.props.controlInfo;
const controlInfo = this.props.controlInfo;
if (!controlInfo) return;
let instanceId = controlInfo?.instanceId;
let uiControl = controlInfo?.uiControl
const instanceId = controlInfo?.instanceId;
const uiControl = controlInfo?.uiControl;
this.model.setPedalboardControl(instanceId,uiControl.symbol,uiControl.default_value);
}
@@ -216,9 +216,9 @@ const ZoomedUiControl = withTheme(withStyles(
if (!this.props.controlInfo) {
return false;
}
let uiControl = this.props.controlInfo.uiControl;
const uiControl = this.props.controlInfo.uiControl;
let displayValue = uiControl.formatDisplayValue(this.state.value) ?? "";
const displayValue = uiControl.formatDisplayValue(this.state.value) ?? "";
if (uiControl.isOnOffSwitch())
{
displayValue = this.state.value !== 0 ? "On": "Off";