Files
start-os/web/projects/marketplace/src/pages/show/versions.component.ts
Aiden McClelland 377b7b12ce update/alpha.9 (#2988)
* import marketplac preview for sideload

* fix: improve state service (#2977)

* fix: fix sideload DI

* fix: update Angular

* fix: cleanup

* fix: fix version selection

* Bump node version to fix build for Angular

* misc fixes
- update node to v22
- fix chroot-and-upgrade access to prune-images
- don't self-migrate legacy packages
- #2985
- move dataVersion to volume folder
- remove "instructions.md" from s9pk
- add "docsUrl" to manifest

* version bump

* include flavor when clicking view listing from updates tab

* closes #2980

* fix: fix select button

* bring back ssh keys

* fix: drop 'portal' from all routes

* fix: implement longtap action to select table rows

* fix description for ssh page

* replace instructions with docsLink and refactor marketplace preview

* delete unused translations

* fix patchdb diffing algorithm

* continue refactor of marketplace lib show components

* Booting StartOS instead of Setting up your server on init

* misc fixes
- closes #2990
- closes #2987

* fix build

* docsUrl and clickable service headers

* don't cleanup after update until new service install succeeds

* update types

* misc fixes

* beta.35

* sdkversion, githash for sideload, correct logs for init, startos pubkey display

* bring back reboot button on install

* misc fixes

* beta.36

* better handling of setup and init for websocket errors

* reopen init and setup logs even on graceful closure

* better logging, misc fixes

* fix build

* dont let package stats hang

* dont show docsurl in marketplace if no docsurl

* re-add needs-config

* show error if init fails, shorten hover state on header icons

* fix operator precedemce

---------

Co-authored-by: Matt Hill <mattnine@protonmail.com>
Co-authored-by: Alex Inkin <alexander@inkin.ru>
Co-authored-by: Mariusz Kogen <k0gen@pm.me>
2025-07-18 18:31:12 +00:00

103 lines
2.6 KiB
TypeScript

import {
ChangeDetectionStrategy,
Component,
inject,
input,
output,
TemplateRef,
} from '@angular/core'
import { FormsModule } from '@angular/forms'
import { DialogService, i18nPipe, SharedPipesModule } from '@start9labs/shared'
import { TuiButton, TuiDialogContext } from '@taiga-ui/core'
import { TuiRadioList } from '@taiga-ui/kit'
import { filter } from 'rxjs'
import { MarketplaceItemComponent } from './item.component'
@Component({
selector: 'marketplace-versions',
template: `
<div class="background-border shadow-color-light box-shadow-lg">
<div class="box-container">
<h2 class="additional-detail-title">Versions</h2>
<marketplace-item
(click)="promptSelectVersion(versionSelect)"
data="Select another version"
icon="@tui.chevron-right"
label=""
class="select"
/>
<ng-template
#versionSelect
let-data="data"
let-completeWith="completeWith"
>
<tui-radio-list [items]="versions()" [(ngModel)]="data.version" />
<footer class="buttons">
<button
tuiButton
appearance="secondary"
(click)="completeWith(null)"
>
{{ 'Cancel' | i18n }}
</button>
<button
tuiButton
appearance="secondary"
(click)="completeWith(data.version)"
>
{{ 'Ok' | i18n }}
</button>
</footer>
</ng-template>
</div>
</div>
`,
styles: `
.box-container {
background-color: rgb(39 39 42);
border-radius: 0.75rem;
padding: 1.25rem 1.75rem;
}
.select {
border: 0;
// border-top-width: 1px;
border-bottom-width: 1px;
border-color: rgb(113 113 122);
border-style: solid;
cursor: pointer;
::ng-deep label {
cursor: pointer;
}
}
`,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
MarketplaceItemComponent,
TuiButton,
SharedPipesModule,
FormsModule,
TuiRadioList,
i18nPipe,
],
})
export class MarketplaceVersionsComponent {
private readonly dialog = inject(DialogService)
readonly version = input.required<string | null>()
readonly versions = input.required<string[]>()
onVersion = output<string>()
promptSelectVersion(template: TemplateRef<TuiDialogContext>) {
this.dialog
.openComponent<string>(template, {
label: 'All versions',
size: 's',
data: { version: this.version() },
})
.pipe(filter(Boolean))
.subscribe(selected => this.onVersion.emit(selected))
}
}