diff --git a/ui/package.json b/ui/package.json index e27b729..4c8a36a 100644 --- a/ui/package.json +++ b/ui/package.json @@ -66,7 +66,7 @@ "puppeteer": "^17.1.3", "rimraf": "^3.0.2", "tree-kill": "^1.2.0", - "typescript": "4.0.2", + "typescript": "^5.9.2", "wait-on": "^5.3.0" }, "eslintConfig": { diff --git a/ui/src/application/AddApplicationDialog.tsx b/ui/src/application/AddApplicationDialog.tsx index dce6b92..b0ad8f7 100644 --- a/ui/src/application/AddApplicationDialog.tsx +++ b/ui/src/application/AddApplicationDialog.tsx @@ -89,7 +89,10 @@ export default class AddDialog extends Component { ); } - private handleChange(propertyName: string, event: React.ChangeEvent) { + private handleChange( + propertyName: 'description' | 'name', + event: React.ChangeEvent + ) { const state = this.state; state[propertyName] = event.target.value; this.setState(state); diff --git a/ui/src/application/UpdateApplicationDialog.tsx b/ui/src/application/UpdateApplicationDialog.tsx index ed04022..d5c7e88 100644 --- a/ui/src/application/UpdateApplicationDialog.tsx +++ b/ui/src/application/UpdateApplicationDialog.tsx @@ -101,7 +101,10 @@ export default class UpdateDialog extends Component { ); } - private handleChange(propertyName: string, event: React.ChangeEvent) { + private handleChange( + propertyName: 'name' | 'description', + event: React.ChangeEvent + ) { const state = this.state; state[propertyName] = event.target.value; this.setState(state); diff --git a/ui/src/client/AddClientDialog.tsx b/ui/src/client/AddClientDialog.tsx index 3249b60..7324993 100644 --- a/ui/src/client/AddClientDialog.tsx +++ b/ui/src/client/AddClientDialog.tsx @@ -63,7 +63,7 @@ export default class AddDialog extends Component { ); } - private handleChange(propertyName: string, event: React.ChangeEvent) { + private handleChange(propertyName: 'name', event: React.ChangeEvent) { const state = this.state; state[propertyName] = event.target.value; this.setState(state); diff --git a/ui/src/client/UpdateClientDialog.tsx b/ui/src/client/UpdateClientDialog.tsx index 214a7c2..316c079 100644 --- a/ui/src/client/UpdateClientDialog.tsx +++ b/ui/src/client/UpdateClientDialog.tsx @@ -78,8 +78,8 @@ export default class UpdateDialog extends Component { ); } - private handleChange(propertyName: string, event: React.ChangeEvent) { - const state = {}; + private handleChange(propertyName: 'name', event: React.ChangeEvent) { + const state = this.state; state[propertyName] = event.target.value; this.setState(state); } diff --git a/ui/src/message/MessagesStore.ts b/ui/src/message/MessagesStore.ts index 136d2a9..24ff431 100644 --- a/ui/src/message/MessagesStore.ts +++ b/ui/src/message/MessagesStore.ts @@ -136,15 +136,17 @@ export class MessagesStore { } }; - private getUnCached = (appId: number): Array => { - const appToImage = this.appStore + private getUnCached = (appId: number): Array => { + const appToImage: Partial> = this.appStore .getItems() .reduce((all, app) => ({...all, [app.id]: app.image}), {}); - return this.stateOf(appId, false).messages.map((message: IMessage) => ({ - ...message, - image: appToImage[message.appid] || null, - })); + return this.stateOf(appId, false).messages.map( + (message: IMessage): IMessage => ({ + ...message, + image: appToImage[message.appid], + }) + ); }; public get = createTransformer(this.getUnCached); diff --git a/ui/src/message/extras.ts b/ui/src/message/extras.ts index 724a744..976d575 100644 --- a/ui/src/message/extras.ts +++ b/ui/src/message/extras.ts @@ -7,9 +7,7 @@ export enum RenderMode { export const contentType = (extras?: IMessageExtras): RenderMode => { const type = extract(extras, 'client::display', 'contentType'); - const valid = Object.keys(RenderMode) - .map((k) => RenderMode[k]) - .some((mode) => mode === type); + const valid = Object.values(RenderMode).includes(type); return valid ? type : RenderMode.Plain; }; diff --git a/ui/src/tests/plugin.test.ts b/ui/src/tests/plugin.test.ts index 792136b..852d471 100644 --- a/ui/src/tests/plugin.test.ts +++ b/ui/src/tests/plugin.test.ts @@ -172,6 +172,9 @@ describe('plugin', () => { await inDetailPage(1, async () => { await page.waitForSelector('.displayer a'); const hook = await page.$eval('.displayer a', (el) => el.getAttribute('href')); + if (!hook) { + throw 'href not found'; + } await axios.get(hook); }); }); diff --git a/ui/src/tests/setup.ts b/ui/src/tests/setup.ts index 4f7e5bd..293b304 100644 --- a/ui/src/tests/setup.ts +++ b/ui/src/tests/setup.ts @@ -50,7 +50,9 @@ export const newTest = async (pluginsDir = ''): Promise => { close: async () => { await Promise.all([ browser.close(), - new Promise((resolve) => kill(gotifyInstance.pid!, 'SIGKILL', () => resolve())), + new Promise((resolve) => + kill(gotifyInstance.pid!, 'SIGKILL', () => resolve(undefined)) + ), ]); rimraf.sync(gotifyFile, {maxBusyTries: 8}); }, diff --git a/ui/src/tests/utils.ts b/ui/src/tests/utils.ts index 75c73c2..8330cf9 100644 --- a/ui/src/tests/utils.ts +++ b/ui/src/tests/utils.ts @@ -59,7 +59,7 @@ export const waitForExists = async (page: Page, selector: string, text: string): export const clearField = async (element: ElementHandle | Page, selector: string) => { const elementHandle = await element.$(selector); if (!elementHandle) { - throw "element handle not set" + throw 'element handle not set'; } await elementHandle.click(); await elementHandle.focus(); diff --git a/ui/src/user/AddEditUserDialog.tsx b/ui/src/user/AddEditUserDialog.tsx index 731fabf..fdf93d8 100644 --- a/ui/src/user/AddEditUserDialog.tsx +++ b/ui/src/user/AddEditUserDialog.tsx @@ -110,13 +110,13 @@ export default class AddEditDialog extends Component { ); } - private handleChange(propertyName: string, event: ChangeEvent) { + private handleChange(propertyName: 'name' | 'pass', event: ChangeEvent) { const state = this.state; state[propertyName] = event.target.value; this.setState(state); } - private handleChecked(propertyName: string, event: ChangeEvent) { + private handleChecked(propertyName: 'admin', event: ChangeEvent) { const state = this.state; state[propertyName] = event.target.checked; this.setState(state); diff --git a/ui/src/user/Register.tsx b/ui/src/user/Register.tsx index 7e0dfa4..b5309f5 100644 --- a/ui/src/user/Register.tsx +++ b/ui/src/user/Register.tsx @@ -96,7 +96,7 @@ export default class RegistrationDialog extends Component { ); } - private handleChange(propertyName: string, event: ChangeEvent) { + private handleChange(propertyName: keyof IState, event: ChangeEvent) { const state = this.state; state[propertyName] = event.target.value; this.setState(state); diff --git a/ui/yarn.lock b/ui/yarn.lock index 11b5256..fac81a5 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -3827,10 +3827,10 @@ typeface-roboto@1.1.13: resolved "https://registry.yarnpkg.com/typeface-roboto/-/typeface-roboto-1.1.13.tgz#9c4517cb91e311706c74823e857b4bac9a764ae5" integrity sha512-YXvbd3a1QTREoD+FJoEkl0VQNJoEjewR2H11IjVv4bp6ahuIcw0yyw/3udC4vJkHw3T3cUh85FTg8eWef3pSaw== -typescript@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" - integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== +typescript@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== ua-parser-js@^0.7.30: version "0.7.31"