Skip to content

Commit 071cd4c

Browse files
committed
feat(new tool): Airport and Airline lookup
1 parent cb5b462 commit 071cd4c

File tree

6 files changed

+106
-7
lines changed

6 files changed

+106
-7
lines changed

components.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ declare module '@vue/runtime-core' {
1111
export interface GlobalComponents {
1212
'404.page': typeof import('./src/pages/404.page.vue')['default']
1313
About: typeof import('./src/pages/About.vue')['default']
14+
AirCodes: typeof import('./src/tools/air-codes/air-codes.vue')['default']
1415
App: typeof import('./src/App.vue')['default']
1516
AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default']
1617
'Base.layout': typeof import('./src/layouts/base.layout.vue')['default']
@@ -138,12 +139,14 @@ declare module '@vue/runtime-core' {
138139
NH1: typeof import('naive-ui')['NH1']
139140
NH3: typeof import('naive-ui')['NH3']
140141
NIcon: typeof import('naive-ui')['NIcon']
142+
NInput: typeof import('naive-ui')['NInput']
141143
NInputNumber: typeof import('naive-ui')['NInputNumber']
142144
NLabel: typeof import('naive-ui')['NLabel']
143145
NLayout: typeof import('naive-ui')['NLayout']
144146
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
145147
NMenu: typeof import('naive-ui')['NMenu']
146148
NScrollbar: typeof import('naive-ui')['NScrollbar']
149+
NSpace: typeof import('naive-ui')['NSpace']
147150
NSpin: typeof import('naive-ui')['NSpin']
148151
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
149152
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
@@ -159,6 +162,7 @@ declare module '@vue/runtime-core' {
159162
RouterLink: typeof import('vue-router')['RouterLink']
160163
RouterView: typeof import('vue-router')['RouterView']
161164
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
165+
SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default']
162166
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
163167
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
164168
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"@vueuse/core": "^10.3.0",
4848
"@vueuse/head": "^1.0.0",
4949
"@vueuse/router": "^10.0.0",
50+
"aircodes": "^1.3.16",
5051
"bcryptjs": "^2.4.3",
5152
"change-case": "^4.1.2",
5253
"colord": "^2.9.3",

pnpm-lock.yaml

Lines changed: 14 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tools/air-codes/air-codes.vue

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<script setup lang="ts">
2+
import { findAirline, findAirport } from 'aircodes';
3+
import SpanCopyable from '@/components/SpanCopyable.vue';
4+
5+
const airlineQuery = ref('');
6+
const airportQuery = ref('');
7+
const resultAirline = computed(() => airlineQuery.value === '' ? [] : findAirline(airlineQuery.value));
8+
const resultAirport = computed(() => airportQuery.value === '' ? [] : findAirport(airportQuery.value));
9+
</script>
10+
11+
<template>
12+
<div>
13+
<c-card title="Airline search" mb-1>
14+
<n-space>
15+
<n-form-item label="Airline query">
16+
<n-input v-model:value="airlineQuery" />
17+
</n-form-item>
18+
</n-space>
19+
20+
<n-divider />
21+
22+
<div v-for="airline in resultAirline" :key="airline.iata">
23+
<n-form-item label="IATA">
24+
<SpanCopyable :value="airline.iata" />
25+
</n-form-item>
26+
<n-form-item label="ICAO">
27+
<SpanCopyable :value="airline.icao" />
28+
</n-form-item>
29+
<n-form-item label="Name">
30+
<SpanCopyable :value="airline.name" />
31+
</n-form-item>
32+
<n-form-item label="Logo">
33+
<img width="100" :alt="airline.name" :src="airline.logo">
34+
</n-form-item>
35+
</div>
36+
</c-card>
37+
38+
<c-card title="Airport search">
39+
<n-space>
40+
<n-form-item label="Airport query">
41+
<n-input v-model:value="airportQuery" />
42+
</n-form-item>
43+
</n-space>
44+
45+
<n-divider />
46+
47+
<div v-for="airport in resultAirport" :key="airport.iata">
48+
<n-form-item label="IATA">
49+
<SpanCopyable :value="airport.iata" />
50+
</n-form-item>
51+
<n-form-item label="ICAO">
52+
<SpanCopyable :value="airport.icao" />
53+
</n-form-item>
54+
<n-form-item label="Name">
55+
<SpanCopyable :value="airport.name" />
56+
</n-form-item>
57+
<n-form-item label="City">
58+
<SpanCopyable :value="airport.city" />
59+
</n-form-item>
60+
<n-form-item label="State">
61+
<SpanCopyable :value="airport.state" />
62+
</n-form-item>
63+
<n-form-item label="Country">
64+
<SpanCopyable :value="airport.country" />
65+
</n-form-item>
66+
</div>
67+
</c-card>
68+
</div>
69+
</template>

src/tools/air-codes/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Plane } from '@vicons/tabler';
2+
import { defineTool } from '../tool';
3+
4+
export const tool = defineTool({
5+
name: 'Air Codes',
6+
path: '/air-codes',
7+
description: 'Get Airport and Airline info from name, ICAO code or IATA code',
8+
keywords: ['airport', 'airline', 'air', 'plane', 'icao', 'iata'],
9+
component: () => import('./air-codes.vue'),
10+
icon: Plane,
11+
createdAt: new Date('2024-04-20'),
12+
});

src/tools/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { tool as ulidGenerator } from './ulid-generator';
1414
import { tool as ibanValidatorAndParser } from './iban-validator-and-parser';
1515
import { tool as stringObfuscator } from './string-obfuscator';
1616
import { tool as textDiff } from './text-diff';
17+
import { tool as airCodes } from './air-codes';
1718
import { tool as emojiPicker } from './emoji-picker';
1819
import { tool as passwordStrengthAnalyser } from './password-strength-analyser';
1920
import { tool as yamlToToml } from './yaml-to-toml';
@@ -176,7 +177,11 @@ export const toolsByCategory: ToolCategory[] = [
176177
},
177178
{
178179
name: 'Data',
179-
components: [phoneParserAndFormatter, ibanValidatorAndParser],
180+
components: [
181+
phoneParserAndFormatter,
182+
ibanValidatorAndParser,
183+
airCodes,
184+
],
180185
},
181186
];
182187

0 commit comments

Comments
 (0)