Skip to content

Commit 00355b2

Browse files
committed
feat: implement package deletion button
1 parent c68d8ba commit 00355b2

File tree

2 files changed

+73
-29
lines changed

2 files changed

+73
-29
lines changed

examples/gauge/Components/InterfaceSample.tsx

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class InterfaceSample extends DisplayComponent<InterfaceSampleProps> {
2424

2525
private readonly activeDatabase = Subject.create<PackageInfo | null>(null)
2626
private readonly databases = ArraySubject.create<PackageInfo>([])
27+
private readonly resetPackageList = Subject.create<boolean>(false)
2728
private readonly mainPageIndex = Subject.create(0)
2829
private readonly selectedDatabaseIndex = Subject.create(0)
2930
private readonly selectedDatabase = Subject.create<PackageInfo | null>(null)
@@ -65,6 +66,7 @@ export class InterfaceSample extends DisplayComponent<InterfaceSampleProps> {
6566
<Dashboard
6667
activeDatabase={this.activeDatabase}
6768
databases={this.databases}
69+
reloadPackageList={this.resetPackageList}
6870
selectedDatabase={this.selectedDatabase}
6971
selectedDatabaseIndex={this.selectedDatabaseIndex}
7072
setSelectedDatabase={database => this.selectedDatabase.set(database)}
@@ -111,30 +113,22 @@ export class InterfaceSample extends DisplayComponent<InterfaceSampleProps> {
111113
this.loadingRef.instance.style.display = "none"
112114
})
113115

114-
// this.executeIcaoButtonRef.instance.addEventListener("click", () => {
115-
// console.time("query")
116-
// this.navigationDataInterface
117-
// .get_arrivals_at_airport(this.icaoInputRef.instance.value)
118-
// .then(procedures => {
119-
// console.info(procedures)
120-
// this.outputRef.instance.textContent = JSON.stringify(procedures, null, 2)
121-
// })
122-
// .catch(e => console.error(e))
123-
// .finally(() => console.timeEnd("query"))
124-
// })
125-
126-
// this.loadDbRef.instance.addEventListener("click", () => this.handleLoadDbClick())
127-
128-
// this.executeSqlButtonRef.instance.addEventListener("click", () => {
129-
// console.time("query")
130-
// this.navigationDataInterface
131-
// .execute_sql(this.sqlInputRef.instance.value, [])
132-
// .then(result => {
133-
// console.info(result)
134-
// this.outputRef.instance.textContent = JSON.stringify(result, null, 2)
135-
// })
136-
// .catch(e => console.error(e))
137-
// .finally(() => console.timeEnd("query"))
138-
// })
116+
this.resetPackageList.map(async val => {
117+
if (!val) {
118+
return
119+
}
120+
121+
const pkgs = await this.navigationDataInterface.list_available_packages(true)
122+
123+
const activePackage = await this.navigationDataInterface.get_active_package()
124+
125+
this.activeDatabase.set(activePackage)
126+
this.selectedDatabase.set(activePackage)
127+
this.selectedDatabaseIndex.set(pkgs.findIndex(pkg => pkg.uuid === activePackage?.uuid))
128+
129+
this.databases.set(pkgs)
130+
131+
this.resetPackageList.set(false)
132+
})
139133
}
140134
}

examples/gauge/Components/Pages/Dashboard/Dashboard.tsx

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
FSComponent,
55
MappedSubject,
66
MappedSubscribable,
7+
MutableSubscribable,
78
Subscribable,
89
SubscribableArray,
910
VNode,
@@ -14,6 +15,7 @@ import { Button, InterfaceNavbarItemV2, InterfaceSwitch } from "../../Utils"
1415

1516
interface DashboardProps extends ComponentProps {
1617
databases: SubscribableArray<PackageInfo>
18+
reloadPackageList: MutableSubscribable<boolean>
1719
selectedDatabase: Subscribable<PackageInfo | null>
1820
selectedDatabaseIndex: Subscribable<number>
1921
setSelectedDatabase: (database: PackageInfo) => void
@@ -61,6 +63,42 @@ export class Dashboard extends DisplayComponent<DashboardProps> {
6163
.set_active_package(selectedDatabase.uuid)
6264
.then(_res => {})
6365
.catch(err => console.error(err))
66+
67+
this.props.reloadPackageList.set(true)
68+
}
69+
70+
private deleteSelected() {
71+
const prevSelectedDatabase = this.props.selectedDatabase.get()
72+
73+
if (prevSelectedDatabase === null || this.props.databases.length <= 1) {
74+
return
75+
}
76+
77+
let pkg
78+
79+
try {
80+
if (this.props.selectedDatabaseIndex.get() === 0) {
81+
pkg = this.props.databases.get(1)
82+
} else {
83+
pkg = this.props.databases.get(0)
84+
}
85+
} catch {
86+
return
87+
}
88+
89+
if (this.showActiveDatabase.get()) {
90+
this.props.interface
91+
.set_active_package(pkg.uuid)
92+
.then(_res => {})
93+
.catch(err => console.error(err))
94+
}
95+
96+
this.props.interface
97+
.delete_package(prevSelectedDatabase.uuid)
98+
.then(_res => {})
99+
.catch(err => console.error(err))
100+
101+
this.props.reloadPackageList.set(true)
64102
}
65103

66104
render(): VNode {
@@ -78,9 +116,17 @@ export class Dashboard extends DisplayComponent<DashboardProps> {
78116
/>
79117
</div>
80118
</div>
81-
<Button onClick={() => this.setDatabase()} class="p-4 bg-blue-400 hover:bg-blue-800">
82-
<p class="text-2xl">Select Database</p>
83-
</Button>
119+
<div class="flex flex-row">
120+
<Button onClick={() => this.setDatabase()} class="p-4 bg-blue-400 hover:bg-blue-800 flex-grow w-full">
121+
<p class="text-2xl">Select Database</p>
122+
</Button>
123+
<Button
124+
onClick={() => this.deleteSelected()}
125+
class="bg-red-900 hover:bg-red-500 w-[25%] flex items-center justify-center"
126+
>
127+
<span class="text-5xl">X</span>
128+
</Button>
129+
</div>
84130
</div>
85131
<ActiveDatabase selectedDatabase={this.props.selectedDatabase} showActiveDatabase={this.showActiveDatabase} />
86132
</div>
@@ -110,8 +156,12 @@ class ActiveDatabase extends DisplayComponent<ActiveDatabaseProps> {
110156
[1, <p class="text-3xl mb-4">Selected Database</p>],
111157
]}
112158
/>
113-
<div class="mt-2 flex-grow bg-ng-background-700">
159+
<div class="mt-2 flex-grow bg-ng-background-700 overflow-auto">
114160
<div class="p-4 flex flex-col align-middle items-start flex-start space-y-6 vertical">
161+
<div class="flex flex-row space-x-2">
162+
<span class="text-2xl">UUID:</span>
163+
<span class="text-xl text-gray-400">{this.props.selectedDatabase.map(s => s?.uuid)}</span>
164+
</div>
115165
<div class="flex flex-col space-y-2">
116166
<p class="text-3xl">Bundled</p>
117167
<p class="text-2xl text-gray-400">{this.props.selectedDatabase.map(s => s?.is_bundled)}</p>

0 commit comments

Comments
 (0)