Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Action Request updates + misc fixes #2818

Open
wants to merge 6 commits into
base: next/minor
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions container-runtime/src/Adapters/Systems/SystemForEmbassy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,7 @@ export class SystemForEmbassy implements System {
([key, value]): T.Dependencies => {
const dependency = this.manifest.dependencies?.[key]
if (!dependency) return []
// if from manifest.dependencies
if (value == null) {
const versionRange = dependency.version
if (dependency.requirement.type === "required") {
Expand All @@ -721,14 +722,20 @@ export class SystemForEmbassy implements System {
},
]
}
return [
{
kind: "exists",
id: key,
versionRange,
},
]
// current dep since default in config
if (dependency.requirement.type === "opt-out") {
return [
{
id: key,
versionRange,
kind: "exists",
},
]
}
// if opt-in, not a current dep, only changed through config
return []
}
// if from rawDepends (ie. config)
const versionRange = dependency.version
const kind = "running"
return [
Expand Down
4 changes: 2 additions & 2 deletions container-runtime/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ new RpcListener(getDependencies)

/**

So, this is going to be sent into a running comtainer along with any of the other node modules that are going to be needed and used.
So, this is going to be sent into a running container along with any of the other node modules that are going to be needed and used.

Once the container is started, we will go into a loading/ await state.
This is the init system, and it will always be running, and it will be waiting for a command to be sent to it.
Expand All @@ -38,5 +38,5 @@ There are

/**
TODO:
Should I seperate those adapter in/out?
Should I separate those adapter in/out?
*/
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
<ng-container
*ngIf="isInstalled(pkg) && status.primary !== 'backingUp' && status.primary !== 'error'"
>
<ion-item-divider
style="--background: unset; z-index: 11; position: relative"
>
Action Requests
</ion-item-divider>
<!-- ** action requests ** -->
<app-show-action-requests
[allPkgs]="pkgPlus.allPkgs"
Expand All @@ -35,6 +40,9 @@
<app-show-dependencies
*ngIf="pkgPlus.dependencies.length"
[dependencies]="pkgPlus.dependencies"
[allPkgs]="pkgPlus.allPkgs"
[pkg]="pkg"
[manifest]="pkgPlus.manifest"
></app-show-dependencies>
<!-- ** menu ** -->
<app-show-menu [buttons]="pkg | toButtons"></app-show-menu>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ export class AppShowPage {
fixText = 'Update'
fixAction = () => this.installDep(pkg, manifest, depId)
} else if (depError.type === 'actionRequired') {
errorText = 'Action Required (see above)'
errorText = 'Action Required (see below)'
} else if (depError.type === 'notRunning') {
errorText = 'Not running'
fixText = 'Start'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,45 +1,36 @@
<ng-container *ngIf="actionRequests.critical.length">
<ion-item-divider>Required Actions</ion-item-divider>
<ion-item
*ngFor="let request of actionRequests.critical"
button
(click)="handleAction(request)"
>
<ion-icon slot="start" name="warning-outline" color="warning"></ion-icon>
<ion-label>
<h2 class="highlighted">{{ request.actionName }}</h2>
<p *ngIf="request.dependency" class="dependency">
<span class="light">Service:</span>
<img [src]="request.dependency.icon" alt="" />
{{ request.dependency.title }}
</p>
<p>
<span class="light">Reason:</span>
{{ request.reason || 'no reason provided' }}
</p>
</ion-label>
</ion-item>
</ng-container>

<ng-container *ngIf="actionRequests.important.length">
<ion-item-divider>Requested Actions</ion-item-divider>
<ion-item
*ngFor="let request of actionRequests.important"
button
(click)="handleAction(request)"
>
<ion-icon slot="start" name="play-outline" color="warning"></ion-icon>
<ion-label>
<h2 class="highlighted">{{ request.actionName }}</h2>
<p *ngIf="request.dependency" class="dependency">
<span class="light">Service:</span>
<img [src]="request.dependency.icon" alt="" />
{{ request.dependency.title }}
</p>
<p>
<span class="light">Reason:</span>
{{ request.reason || 'no reason provided' }}
</p>
</ion-label>
</ion-item>
<ng-container *ngIf="actionRequests[pkgId]?.length">
<div class="indent">
<ion-item
class="line"
lines="none"
*ngFor="let request of actionRequests[pkgId]"
button
(click)="handleAction(request)"
>
<ion-icon
slot="start"
[name]="
request.severity === 'critical' ? 'warning-outline' : 'play-outline'
"
[color]="request.severity === 'critical' ? 'warning' : 'dark'"
></ion-icon>
<ion-label>
<h2 class="highlighted">{{ request.actionName }}</h2>
<p>
{{ request.reason || 'no reason provided' }} |
<span
class="severity"
[ngStyle]="{
color:
request.severity === 'critical'
? 'var(--ion-color-warning)'
: 'var(--ion-color-dark)'
}"
>
{{ request.severity === 'critical' ? 'Required' : 'Requested' }}
</span>
</p>
</ion-label>
</ion-item>
</div>
</ng-container>
Original file line number Diff line number Diff line change
@@ -1,16 +1,38 @@
.light {
color: var(--ion-color-dark);
ion-icon {
margin-right: 32px;
}

.highlighted {
color: var(--ion-color-dark);
font-weight: bold;
}

.dependency {
display: inline-flex;
img {
max-width: 16px;
margin: 0 2px 0 5px;
.severity {
font-variant-caps: all-small-caps;
font-weight: bold;
letter-spacing: 0.2px;
font-size: 16px;
}

.line {

&:after {
content: '';
display: block;
border-left: 1px solid var(--border-color);
border-bottom: 1px solid var(--border-color);
height: 100%;
width: 24px;
position: absolute;
left: -20px;
top: -33px;
}
}

.indent {
margin-left: 41px
}

:host ::ng-deep ion-item {
display: inline;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
import { T } from '@start9labs/start-sdk'
import { ActionService } from 'src/app/services/action.service'
import { DependencyInfo } from 'src/app/pages/apps-routes/app-show/app-show.page'
import { getDepDetails } from 'src/app/util/dep-info'

@Component({
Expand All @@ -19,22 +20,21 @@ export class AppShowActionRequestsComponent {
@Input()
manifest!: T.Manifest

get actionRequests() {
const critical: (T.ActionRequest & {
actionName: string
dependency: {
title: string
icon: string
} | null
})[] = []
const important: (T.ActionRequest & {
actionName: string
dependency: {
title: string
icon: string
} | null
})[] = []
@Input()
dep?: DependencyInfo

pkgId!: string

ngOnInit() {
this.pkgId = this.dep ? this.dep?.id : this.manifest.id
}

get actionRequests() {
const reqs: {
[key: string]: (T.ActionRequest & {
actionName: string
})[]
} = {}
Object.values(this.pkg.requestedActions)
.filter(r => r.active)
.forEach(r => {
Expand All @@ -49,17 +49,13 @@ export class AppShowActionRequestsComponent {
? null
: getDepDetails(this.pkg, this.allPkgs, r.request.packageId),
}

if (r.request.severity === 'critical') {
critical.push(toReturn)
} else {
important.push(toReturn)
if (!reqs[r.request.packageId]) {
reqs[r.request.packageId] = []
}
reqs[r.request.packageId].push(toReturn)
})

return { critical, important }
return reqs
}

constructor(private readonly actionService: ActionService) {}

async handleAction(request: T.ActionRequest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,37 @@
*ngFor="let dep of dependencies"
(click)="dep.action()"
>
<ion-thumbnail slot="start">
<img [src]="dep.icon" alt="" />
</ion-thumbnail>
<ion-label>
<h2 class="montserrat">
<ion-icon
*ngIf="!!dep.errorText"
class="icon"
slot="start"
name="warning-outline"
color="warning"
></ion-icon>
{{ dep.title }}
</h2>
<p>{{ dep.version }}</p>
<p>
<ion-text [color]="dep.errorText ? 'warning' : 'success'">
{{ dep.errorText || 'satisfied' }}
</ion-text>
</p>
</ion-label>
<div class="container">
<div class="dep-details">
<ion-thumbnail slot="start">
<img [src]="dep.icon" alt="" />
</ion-thumbnail>
<ion-label>
<h2 class="montserrat">
<ion-icon
*ngIf="!!dep.errorText"
class="icon"
slot="start"
name="warning-outline"
color="warning"
></ion-icon>
{{ dep.title }}
</h2>
<p>{{ dep.version }}</p>
<p>
<ion-text [color]="dep.errorText ? 'warning' : 'success'">
{{ dep.errorText || 'satisfied' }}
</ion-text>
</p>
</ion-label>
</div>
<app-show-action-requests
[allPkgs]="allPkgs"
[pkg]="pkg"
[dep]="dep"
[manifest]="manifest"
></app-show-action-requests>
</div>
<ion-button *ngIf="dep.actionText" slot="end" fill="clear">
{{ dep.actionText }}
<ion-icon slot="end" name="arrow-forward"></ion-icon>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@
.icon {
padding-right: 4px;
}

img {
position: relative;
z-index: 10;
}

.container {
display: flex;
flex-direction: column;
margin: 8px;
}

.dep-details {
display: flex;
align-items: center;
flex-direction: row;
gap: 1.2rem;
}

ion-label h2 {
display: flex;
align-items: center;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
import { DependencyInfo } from '../../app-show.page'
import { T } from '@start9labs/start-sdk'
import {
PackageDataEntry,
StateInfo,
} from 'src/app/services/patch-db/data-model'

@Component({
selector: 'app-show-dependencies',
Expand All @@ -10,4 +15,15 @@ import { DependencyInfo } from '../../app-show.page'
export class AppShowDependenciesComponent {
@Input()
dependencies: DependencyInfo[] = []

@Input()
allPkgs!: NonNullable<
T.AllPackageData & Record<string, PackageDataEntry<StateInfo>>
>

@Input()
pkg!: T.PackageDataEntry & { stateInfo: StateInfo }

@Input()
manifest!: T.Manifest
}
Loading