From 5aec65094687909adaf2a50e2687b14dca291d99 Mon Sep 17 00:00:00 2001 From: adro Date: Wed, 1 Nov 2023 09:28:29 +0100 Subject: [PATCH] Linting fixes and form style experiment - Also updated pnpm on my end for a hopefully clean lockfile --- client/package.json | 1 + client/pnpm-lock.yaml | 142 ++++++++---------- client/src/api.ts | 24 +-- client/src/components/NiceTable.vue | 15 +- client/src/components/TableView.vue | 4 +- .../src/components/inputs/DropdownInput.vue | 22 +-- client/src/components/inputs/EnumInput.vue | 3 + client/src/components/inputs/MultiSelect.vue | 8 +- client/src/components/inputs/NicerForm.vue | 5 + client/src/components/inputs/PillBar.vue | 2 +- client/src/components/inputs/SingleSelect.vue | 8 +- client/src/components/meta/PageHeader.vue | 7 +- client/src/main.ts | 10 +- .../pages/firewall/DestinationNATRules.vue | 2 +- client/src/pages/firewall/ForwardRules.vue | 2 +- client/src/pages/firewall/SourceNATRules.vue | 2 +- client/src/pages/index.vue | 16 +- client/src/pages/vpn/WireguardStatus.vue | 8 +- client/src/util.ts | 2 +- client/vite.config.ts | 18 +-- 20 files changed, 151 insertions(+), 150 deletions(-) diff --git a/client/package.json b/client/package.json index c1c2da0..dd8d462 100644 --- a/client/package.json +++ b/client/package.json @@ -90,6 +90,7 @@ "vue/max-attributes-per-line": "off", "vue/html-closing-bracket-newline": "off", "vue/no-dupe-keys": "off", + "vue/no-template-shadow": "off", "vue/singleline-html-element-content-newline": "off", "indent": [ "error", diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index 4492c5c..ef91296 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -66,14 +66,14 @@ devDependencies: '@typescript-eslint/parser': 6.9.1_i3vkbg2fztj7jno7sh3heeojya '@vitejs/plugin-vue': 4.4.0_vite@4.5.0+vue@3.3.7 '@vue-macros/reactivity-transform': 0.3.23_vue@3.3.7 - '@vue-macros/volar': 0.17.1_ft3qjyskndwnuyutiycxdowo3q + '@vue-macros/volar': 0.17.2_ft3qjyskndwnuyutiycxdowo3q eslint: 8.52.0 eslint-plugin-vue: 9.18.1_eslint@8.52.0 typescript: 5.2.2 unplugin-auto-import: 0.16.7_@vueuse+core@10.5.0 unplugin-icons: 0.17.1 unplugin-vue-components: 0.25.2_vue@3.3.7 - unplugin-vue-macros: 2.6.1_q64zeehrg4w2rr4xbfppgk6lgq + unplugin-vue-macros: 2.6.2_q64zeehrg4w2rr4xbfppgk6lgq vite: 4.5.0 vite-plugin-pages: 0.31.0_vite@4.5.0 vue-tsc: 1.8.22_typescript@5.2.2 @@ -645,42 +645,42 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@unhead/dom/1.8.1: - resolution: {integrity: sha512-cBGCXSeJVizG95dTudB069N0DMzWCHznbjYAJUv6sh0fwPUXUfKSHgf3h+Av3rkKeWEYguULN+bpnPOIfs7fJQ==} + /@unhead/dom/1.8.2: + resolution: {integrity: sha512-wyWf2bFItWvWHdfv8BlIyS7fcPYQBhJkwvkCjf3D7bnTXrd2ZyoUck07x3XApFiZavW8KD+A3S6jS39f/h4lBw==} dependencies: - '@unhead/schema': 1.8.1 - '@unhead/shared': 1.8.1 + '@unhead/schema': 1.8.2 + '@unhead/shared': 1.8.2 dev: false - /@unhead/schema/1.8.1: - resolution: {integrity: sha512-mR9i4BANtAug7gZEuyPkGYtVv2CF0wv8bqbPrt3OVSmpW0ts6bin1+ILM7HVKDpAOC7O1l4iyRrHOPocNPeVKQ==} + /@unhead/schema/1.8.2: + resolution: {integrity: sha512-bpCv8ualep2aqbhkBXUKfhYICi35+Pb1CBc5v6oJHHJgHKBIAbBQpbpi14amRMnRuSYDeSOCEM6SV8OJntcNDA==} dependencies: hookable: 5.5.3 zhead: 2.2.4 dev: false - /@unhead/shared/1.8.1: - resolution: {integrity: sha512-sFPx36i+InwneUJggwgobvta5KpE/Aj8SIOwHVMXZyj2w/TJshVpR+APFNKn3VMVlliZgl8UPLOROBDxAMXRDQ==} + /@unhead/shared/1.8.2: + resolution: {integrity: sha512-GDrUDN3x2anpNQQOgjmKjpi2ygNsBAwok9C6Z1YCeM2YtjF1lhqF9cTCXaapNEq81FkC0R0LTgnVxa/HJ4n3lQ==} dependencies: - '@unhead/schema': 1.8.1 + '@unhead/schema': 1.8.2 dev: false - /@unhead/ssr/1.8.1: - resolution: {integrity: sha512-SRP+eEQMw+eAGxyTpXDwWDEATY1N8YIpcZwYLJ8dqUaiEYUZTuigCvWv38MAJbT6Os9XSYioWuEwB95HAJwfKg==} + /@unhead/ssr/1.8.2: + resolution: {integrity: sha512-6x5O8z7QOWc3gD6+Zw7pgNSo4AmHqlYHp56JJ0eFSQPrvxFDdmC/ukebG3ATbFcwfCTyobm4IC25Kk4vMOYo0A==} dependencies: - '@unhead/schema': 1.8.1 - '@unhead/shared': 1.8.1 + '@unhead/schema': 1.8.2 + '@unhead/shared': 1.8.2 dev: false - /@unhead/vue/1.8.1_vue@3.3.7: - resolution: {integrity: sha512-qLxrbbr4+AJjlRsayPnIoaMN6p+qndmGNLLslrcfxq0w3qCUSfVbPA/02AD1vpEUlxXy4hHFnnhQzi0b7gEufg==} + /@unhead/vue/1.8.2_vue@3.3.7: + resolution: {integrity: sha512-EcXw7Q++GFcsaJhZ9s6SdRnyVGelOqfhY5/xOt7FfWnTkYGqBaOxWhTrIvNSThh58lkMnAxCr/azI/z6pBVNgw==} peerDependencies: vue: '>=2.7 || >=3' dependencies: - '@unhead/schema': 1.8.1 - '@unhead/shared': 1.8.1 + '@unhead/schema': 1.8.2 + '@unhead/shared': 1.8.2 hookable: 5.5.3 - unhead: 1.8.1 + unhead: 1.8.2 vue: 3.3.7_typescript@5.2.2 dev: false @@ -705,34 +705,34 @@ packages: vue: 3.3.7_typescript@5.2.2 dev: true - /@volar/language-core/1.10.4: - resolution: {integrity: sha512-Na69qA6uwVIdA0rHuOc2W3pHtVQQO8hCNim7FOaKNpRJh0oAFnu5r9i7Oopo5C4cnELZkPNjTrbmpcCTiW+CMQ==} + /@volar/language-core/1.10.10: + resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} dependencies: - '@volar/source-map': 1.10.4 + '@volar/source-map': 1.10.10 dev: true - /@volar/language-core/1.10.9: - resolution: {integrity: sha512-QXHMX7CeXLqXwvC7nbr6iZ3zrqgKdJ9f6g1B211eZBnvaBki2ds0+Kz8cprUiulVuMQEPJNhDfuh8Vym1gxHRQ==} + /@volar/language-core/1.10.7: + resolution: {integrity: sha512-6+WI7HGqWCsKJ/bms4V45WP7eDeoGxDtLjYPrHB7QkIWVkRLIeGPzzBoonZz9kERM+Kld3W89Y+IlICejVAKhA==} dependencies: - '@volar/source-map': 1.10.9 + '@volar/source-map': 1.10.7 dev: true - /@volar/source-map/1.10.4: - resolution: {integrity: sha512-RxZdUEL+pV8p+SMqnhVjzy5zpb1QRZTlcwSk4bdcBO7yOu4rtEWqDGahVCEj4CcXour+0yJUMrMczfSCpP9Uxg==} + /@volar/source-map/1.10.10: + resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} dependencies: muggle-string: 0.3.1 dev: true - /@volar/source-map/1.10.9: - resolution: {integrity: sha512-ul8yGO9nCxy6UedVuo0VsfKMLZzr39N1rgbtnYTGP5C554EDcUix6K/HDurhVdPHEDIw1yhXltLZZQKi3NrTvA==} + /@volar/source-map/1.10.7: + resolution: {integrity: sha512-anA254XO0lmmeu0p/kvgPOCkrVpqNIHWMvEkPX70PSk4ntg0iBzN/f0Kip6deXvibl6v14Q3Z8RihWrZwdZEEQ==} dependencies: muggle-string: 0.3.1 dev: true - /@volar/typescript/1.10.9: - resolution: {integrity: sha512-5jLB46mCQLJqLII/qDLgfyHSq1cesjwuJQIa2GNWd7LPLSpX5vzo3jfQLWc/gyo3up2fQFrlRJK2kgY5REtwuQ==} + /@volar/typescript/1.10.10: + resolution: {integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==} dependencies: - '@volar/language-core': 1.10.9 + '@volar/language-core': 1.10.10 path-browserify: 1.0.1 dev: true @@ -932,11 +932,11 @@ packages: - rollup dev: true - /@vue-macros/devtools/0.1.3_cnaluuumdmttzz4zpr3jp6tchm: - resolution: {integrity: sha512-aQRC9/TfmQajTMbZZ1BJn61rrraQztJqf64JdXRIpotbGR+xufLY/KIyTTB4SgL1pE1eW/ar5FaZTSjMqyVGIg==} + /@vue-macros/devtools/0.1.4_cnaluuumdmttzz4zpr3jp6tchm: + resolution: {integrity: sha512-md5WzjC4qgOOjnYKaqEfZknSeiEeGX13k/Hqi+aqvb+kIF0F6/5oxroqaPQemuNN/gUNMn8ZfA/JmcOYxGVFcQ==} engines: {node: '>=16.14.0'} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0-0 peerDependenciesMeta: vite: optional: true @@ -1107,8 +1107,8 @@ packages: - vue dev: true - /@vue-macros/volar/0.17.1_ft3qjyskndwnuyutiycxdowo3q: - resolution: {integrity: sha512-PBd3mieM2+zlhChUKto32DEEYz1diN6UhoAYaICxnVO6S4x1VkmxgTis52TuwtOFpgxgO/mXdlhdy0MgkUr+tg==} + /@vue-macros/volar/0.17.2_ft3qjyskndwnuyutiycxdowo3q: + resolution: {integrity: sha512-vvAdf4TEr7XpZJJ/yccfrQQ//lhWa7wsaO4/nGe3DdZEmdQ+opDYDS4MkD/K4kiZdA4/eiWcO/NVWY5bESdWhA==} engines: {node: '>=16.14.0'} peerDependencies: vue-tsc: ^1.6.0 @@ -1117,12 +1117,12 @@ packages: optional: true dependencies: '@rollup/pluginutils': 5.0.5 - '@volar/language-core': 1.10.4 + '@volar/language-core': 1.10.7 '@vue-macros/common': 1.8.0_vue@3.3.7 '@vue-macros/define-props': 1.0.21_yeap6wk4ldaear5sgzhiqg566e '@vue-macros/short-bind': 0.1.0_vue@3.3.7 '@vue-macros/short-vmodel': 1.3.0_vue@3.3.7 - '@vue/language-core': 1.8.20_typescript@5.2.2 + '@vue/language-core': 1.8.22_typescript@5.2.2 vue-tsc: 1.8.22_typescript@5.2.2 transitivePeerDependencies: - '@vue-macros/reactivity-transform' @@ -1169,25 +1169,6 @@ packages: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} dev: false - /@vue/language-core/1.8.20_typescript@5.2.2: - resolution: {integrity: sha512-vNJaqjCTSrWEr+erSq6Rq0CqDC8MOAwyxirxwK8esOxd+1LmAUJUTG2p7I84Mj1Izy5uHiHQAkRTVR2QxMBY+A==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@volar/language-core': 1.10.9 - '@volar/source-map': 1.10.9 - '@vue/compiler-dom': 3.3.7 - '@vue/shared': 3.3.7 - computeds: 0.0.1 - minimatch: 9.0.3 - muggle-string: 0.3.1 - typescript: 5.2.2 - vue-template-compiler: 2.7.15 - dev: true - /@vue/language-core/1.8.22_typescript@5.2.2: resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} peerDependencies: @@ -1196,8 +1177,8 @@ packages: typescript: optional: true dependencies: - '@volar/language-core': 1.10.9 - '@volar/source-map': 1.10.9 + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 '@vue/compiler-dom': 3.3.7 '@vue/shared': 3.3.7 computeds: 0.0.1 @@ -1262,10 +1243,10 @@ packages: peerDependencies: vue: '>=2.7 || >=3' dependencies: - '@unhead/dom': 1.8.1 - '@unhead/schema': 1.8.1 - '@unhead/ssr': 1.8.1 - '@unhead/vue': 1.8.1_vue@3.3.7 + '@unhead/dom': 1.8.2 + '@unhead/schema': 1.8.2 + '@unhead/ssr': 1.8.2 + '@unhead/vue': 1.8.2_vue@3.3.7 vue: 3.3.7_typescript@5.2.2 dev: false @@ -2930,6 +2911,7 @@ packages: /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false optional: true @@ -3066,12 +3048,12 @@ packages: /ufo/1.3.1: resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} - /unhead/1.8.1: - resolution: {integrity: sha512-hidjRl/irt/kvbJmyA+oED8xh+VnlQqfye3oxoZEuGr+JEKnU7keWNyiQxkSWpo9z5rwg52CKgCmY7oMuPMtmw==} + /unhead/1.8.2: + resolution: {integrity: sha512-f7Ha07cT+cgYav06tRNKxUrOZ722QtvYExn0McE68DYUGUM2boPCxXWlHcZXpSAbOj5OQI5AwQE5Xb3Qp2dWDQ==} dependencies: - '@unhead/dom': 1.8.1 - '@unhead/schema': 1.8.1 - '@unhead/shared': 1.8.1 + '@unhead/dom': 1.8.2 + '@unhead/schema': 1.8.2 + '@unhead/shared': 1.8.2 hookable: 5.5.3 dev: false @@ -3118,13 +3100,13 @@ packages: - rollup dev: true - /unplugin-combine/0.7.0_vite@4.5.0: - resolution: {integrity: sha512-Pxa8ovANAUN/bz/pzGN8xnTqFfSJndIJAttXS4/BdVq7mxtKB65RVa2UxAnLmEzgwvtefXAjZgyx9fk5Bv0vEA==} - engines: {node: '>=14.19.0'} + /unplugin-combine/0.8.0_vite@4.5.0: + resolution: {integrity: sha512-2a+Jf0gmX+N0aEjdPIGBSxtHcP+5izQus20+qmQFz43w2jh1ZhC2p3fKekBdDPj5ZQlO15bA+OLDkoOiiBz/BA==} + engines: {node: '>=16.14.0'} peerDependencies: esbuild: '>=0.13' - rollup: ^3.2.0 - vite: ^2.3.0 || ^3.0.0 || ^4.0.0 + rollup: ^3.2.0 || ^4.0.0 + vite: ^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 webpack: 4 || 5 peerDependenciesMeta: esbuild: @@ -3213,8 +3195,8 @@ packages: - vue dev: true - /unplugin-vue-macros/2.6.1_q64zeehrg4w2rr4xbfppgk6lgq: - resolution: {integrity: sha512-YHqCZgZPasdRwmmuautjXkV6uOQ0amg/qHnXyUMgLI8/FkgtfGx+QgeknXpLgiOC2PVXlsuCqbcGnHJ/N4VtUg==} + /unplugin-vue-macros/2.6.2_q64zeehrg4w2rr4xbfppgk6lgq: + resolution: {integrity: sha512-U3hyp5RVHKUmnu+OQy1BKE3bVoTQmFkxed7o4G3Zh6jZDT/Q22bF97Qs7/N1/cDHSenNa06PWBXX173FPeqR1Q==} engines: {node: '>=16.14.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -3230,7 +3212,7 @@ packages: '@vue-macros/define-props-refs': 1.1.10_vue@3.3.7 '@vue-macros/define-render': 1.4.3_vue@3.3.7 '@vue-macros/define-slots': 1.0.15_vue@3.3.7 - '@vue-macros/devtools': 0.1.3_cnaluuumdmttzz4zpr3jp6tchm + '@vue-macros/devtools': 0.1.4_cnaluuumdmttzz4zpr3jp6tchm '@vue-macros/export-expose': 0.0.13_vue@3.3.7 '@vue-macros/export-props': 0.3.18_vue@3.3.7 '@vue-macros/export-render': 0.1.1_vue@3.3.7 @@ -3245,7 +3227,7 @@ packages: '@vue-macros/short-emits': 1.4.10_vue@3.3.7 '@vue-macros/short-vmodel': 1.3.0_vue@3.3.7 unplugin: 1.5.0 - unplugin-combine: 0.7.0_vite@4.5.0 + unplugin-combine: 0.8.0_vite@4.5.0 unplugin-vue-define-options: 1.3.18_vue@3.3.7 vue: 3.3.7_typescript@5.2.2 transitivePeerDependencies: @@ -3447,7 +3429,7 @@ packages: peerDependencies: typescript: '*' dependencies: - '@volar/typescript': 1.10.9 + '@volar/typescript': 1.10.10 '@vue/language-core': 1.8.22_typescript@5.2.2 semver: 7.5.4 typescript: 5.2.2 diff --git a/client/src/api.ts b/client/src/api.ts index 6712627..973d523 100644 --- a/client/src/api.ts +++ b/client/src/api.ts @@ -1,6 +1,6 @@ // import WebSocketServer from 'ws'; import JsonRPC from 'simple-jsonrpc-js'; -import axios from "axios"; +import axios from 'axios'; import { useToast } from 'vue-toast-notification'; const $toast = useToast(); @@ -15,24 +15,24 @@ export function setup(_UnauthorizedCallback: () => void) { } export async function apiCall(method: string, params: Record): Promise{ - console.debug("Starting API Call..."); + console.debug('Starting API Call...'); try { const result = await jrpc.call(method, params); - console.debug("api call result", result); + console.debug('api call result', result); return { Data: result, Error: null}; } catch (ex: any){ if (ex.code === 401) { UnauthorizedCallback(); } else { - $toast.error(method+ ': ' + ex.message); - console.debug("api call epic fail", ex); + $toast.error(`${method }: ${ ex.message}`); + console.debug('api call epic fail', ex); } return { Data: null, Error: ex}; } } export async function authenticate(username: string, password: string): Promise { - const pResponse = axios.post("/login", { username, password }, {timeout: 10100}); + const pResponse = axios.post('/login', { username, password }, {timeout: 10100}); try { const response = await pResponse; // Dont log this as the user password is inside: console.debug(response); @@ -43,7 +43,7 @@ export async function authenticate(username: string, password: string): Promise< } export async function logout(): Promise { - const pResponse = axios.post("/logout", null, {timeout: 10100}); + const pResponse = axios.post('/logout', null, {timeout: 10100}); try { const response = await pResponse; return { data: response.data, error: null}; @@ -53,18 +53,18 @@ export async function logout(): Promise { } export async function checkAuthentication() { - const pResponse = axios.post("/session", null, {timeout: 10100}); + const pResponse = axios.post('/session', null, {timeout: 10100}); try { const response = await pResponse; - const last_hash = window.localStorage.getItem("commit_hash"); + const last_hash = window.localStorage.getItem('commit_hash'); if (last_hash) { if (last_hash !== response.data.commit_hash) { - console.log("Detected New Backend Version, Reloading..."); - window.localStorage.removeItem("commit_hash"); + console.log('Detected New Backend Version, Reloading...'); + window.localStorage.removeItem('commit_hash'); window.location.reload(); } - } else window.localStorage.setItem("commit_hash", response.data.commit_hash); + } else window.localStorage.setItem('commit_hash', response.data.commit_hash); return {auth: 2, error: null}; } catch (error: any) { if (error.response.status == 401) { diff --git a/client/src/components/NiceTable.vue b/client/src/components/NiceTable.vue index bfd3c09..e7dc787 100644 --- a/client/src/components/NiceTable.vue +++ b/client/src/components/NiceTable.vue @@ -26,9 +26,7 @@ const emit = defineEmits<{ (event: 'draggedRow', draggedRow: number, draggedOverRow: number): void, }>(); -if (selection == undefined) { - selection = []; -} +if (!selection) selection = []; const displayData = $computed(() => (sortSelf && sortBy !== '') ? data?.sort((a, b) => { @@ -53,8 +51,9 @@ function toggleSorting(columnName: string) { } function rowSelection(index: number) { + if (!selection) selection = []; if (shiftState) { - if (selection.length === 0) { + if (!selection?.length) { selection = [index]; } else { let last = selection[selection.length-1]; @@ -84,11 +83,11 @@ function rowSelection(index: number) { selection = [index]; } } - emit("selectionChanged"); + emit('selectionChanged'); } function atPath(value: any, path: string): any { - for (const segment of path.split(".")) { + for (const segment of path.split('.')) { value = value[segment]; } return value; @@ -102,7 +101,7 @@ function dragDropRow() { data.splice(draggedRow, 1); data.splice(draggedOverRow, 0, row); data = data; - emit("draggedRow", draggedRow, draggedOverRow); + emit('draggedRow', draggedRow, draggedOverRow); } // Reset drag data @@ -137,7 +136,7 @@ function dragDropRow() { @dragenter="() => draggedOverRow = index" @dragend="() => dragDropRow()" :class="{ - 'selected': selection.includes(index), + 'selected': (selection ?? []).includes(index), 'dragged-over-before': index === draggedOverRow && draggedOverRow < draggedRow, 'dragged-over-after': index === draggedOverRow && draggedOverRow > draggedRow, }"> diff --git a/client/src/components/TableView.vue b/client/src/components/TableView.vue index 7ab44ca..9b7a5db 100644 --- a/client/src/components/TableView.vue +++ b/client/src/components/TableView.vue @@ -20,7 +20,7 @@ const emit = defineEmits<{ }>(); async function draggedRow(draggedRow: number, draggedOverRow: number) { - emit("draggedRow", draggedRow, draggedOverRow); + emit('draggedRow', draggedRow, draggedOverRow); } @@ -31,6 +31,6 @@ async function draggedRow(draggedRow: number, draggedOverRow: number) {
Loading...
- + \ No newline at end of file diff --git a/client/src/components/inputs/DropdownInput.vue b/client/src/components/inputs/DropdownInput.vue index 0ae123b..249aa2f 100644 --- a/client/src/components/inputs/DropdownInput.vue +++ b/client/src/components/inputs/DropdownInput.vue @@ -29,11 +29,11 @@ const props = withDefaults(defineProps<{ placeholder?: string, }>(), { modelValue: null, - search: "", + search: '', options: () => ({}), multiple: false, searchProvider: null, - placeholder: "Search...", + placeholder: 'Search...', }); let { multiple, searchProvider, placeholder } = $(props); @@ -62,14 +62,14 @@ onMounted(() => { await performSearch(unknownKeys); knownKeys = Object.keys(options); unknownKeys = (val as Index[]).filter(key => !knownKeys.includes(key.toString())); - for (let key of unknownKeys) console.warn(`Unknown key in DropdownInput:`, key/*, options*/); + for (let key of unknownKeys) console.warn('Unknown key in DropdownInput:', key/*, options*/); return modelValue = (val as Index[]).filter(key => knownKeys.includes(key.toString())); } if (!knownKeys.includes(val.toString())) { await performSearch([val]); knownKeys = Object.keys(options); if (!knownKeys.includes(val.toString())) - return console.warn(`Unknown key in DropdownInput:`, val/*, options*/); + return console.warn('Unknown key in DropdownInput:', val/*, options*/); } modelValue = val; }, { deep: true, immediate: true }); @@ -150,9 +150,9 @@ function toggle(key: any) { function handleKeydown(e: KeyboardEvent) { switch (e.key) { - case "Backspace": - case "Delete": - if (!modelValue || search !== "" || !multiple) break; + case 'Backspace': + case 'Delete': + if (!modelValue || search !== '' || !multiple) break; if (navigated === 0) modelValue.pop(); else if (navigated > 0) navigated = 0; else { @@ -161,21 +161,21 @@ function handleKeydown(e: KeyboardEvent) { } modelValue = modelValue; break; - case "ArrowUp": + case 'ArrowUp': navigated--; if (-navigated > selCount) navigated = 0; e.preventDefault(); // Prevent cursor from moving to the front/back break; - case "ArrowDown": + case 'ArrowDown': navigated++; if (navigated > Object.entries(options).length) navigated = 0; e.preventDefault(); // Prevent cursor from moving to the front/back break; - case "Enter": + case 'Enter': if (!expanded) expand(); else if (navigated > 0) toggle(Object.entries(options)[navigated-1][0]); break; - case "Escape": + case 'Escape': if (navigated !== 0) navigated = 0; else expanded = false; break; diff --git a/client/src/components/inputs/EnumInput.vue b/client/src/components/inputs/EnumInput.vue index 61fa698..c29596d 100644 --- a/client/src/components/inputs/EnumInput.vue +++ b/client/src/components/inputs/EnumInput.vue @@ -81,4 +81,7 @@ watchEffect(() => { } .variant { padding: 0.25rem; gap: 0.25rem; } .selected { background-color: var(--cl-bg-sl); } +.enum-fields { + padding-left: 0px; +} \ No newline at end of file diff --git a/client/src/components/inputs/MultiSelect.vue b/client/src/components/inputs/MultiSelect.vue index 9022b45..cf4511a 100644 --- a/client/src/components/inputs/MultiSelect.vue +++ b/client/src/components/inputs/MultiSelect.vue @@ -1,7 +1,7 @@