mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 04:01:58 +00:00
* update actions response types and partially implement in UI * further remove diagnostic ui * convert action response nested to array * prepare action res modal for Alex * ad dproperties action for Bitcoin * feat: add action success dialog (#2753) * feat: add action success dialog * mocks for string action res and hide properties from actions page --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> * return null * remove properties from backend * misc fixes * make severity separate argument * rename ActionRequest to ActionRequestOptions * add clearRequests * fix s9pk build * remove config and properties, introduce action requests * better ux, better moocks, include icons * fix dependency types * add variant for versionCompat * fix dep icon display and patch operation display * misc fixes * misc fixes * alpha 12 * honor provided input to set values in action * fix: show full descriptions of action success items (#2758) * fix type * fix: fix build:deps command on Windows (#2752) * fix: fix build:deps command on Windows * fix: add escaped quotes --------- Co-authored-by: Aiden McClelland <me@drbonez.dev> * misc db compatibility fixes --------- Co-authored-by: Alex Inkin <alexander@inkin.ru> Co-authored-by: Aiden McClelland <me@drbonez.dev> Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com>
106 lines
2.8 KiB
TypeScript
106 lines
2.8 KiB
TypeScript
import * as T from "../types"
|
|
import * as IST from "../actions/input/inputSpecTypes"
|
|
import { Action } from "./setupActions"
|
|
|
|
export type RunActionInput<Input> =
|
|
| Input
|
|
| ((prev?: { spec: IST.InputSpec; value: Input | null }) => Input)
|
|
|
|
export const runAction = async <
|
|
Input extends Record<string, unknown>,
|
|
>(options: {
|
|
effects: T.Effects
|
|
// packageId?: T.PackageId
|
|
actionId: T.ActionId
|
|
input?: RunActionInput<Input>
|
|
}) => {
|
|
if (options.input) {
|
|
if (options.input instanceof Function) {
|
|
const prev = await options.effects.action.getInput({
|
|
// packageId: options.packageId,
|
|
actionId: options.actionId,
|
|
})
|
|
const input = options.input(
|
|
prev
|
|
? { spec: prev.spec as IST.InputSpec, value: prev.value as Input }
|
|
: undefined,
|
|
)
|
|
return options.effects.action.run({
|
|
// packageId: options.packageId,
|
|
actionId: options.actionId,
|
|
input,
|
|
})
|
|
} else {
|
|
return options.effects.action.run({
|
|
// packageId: options.packageId,
|
|
actionId: options.actionId,
|
|
input: options.input,
|
|
})
|
|
}
|
|
} else {
|
|
return options.effects.action.run({
|
|
// packageId: options.packageId,
|
|
actionId: options.actionId,
|
|
})
|
|
}
|
|
}
|
|
type GetActionInputType<
|
|
A extends Action<T.ActionId, any, any, Record<string, unknown>>,
|
|
> = A extends Action<T.ActionId, any, any, infer I> ? I : never
|
|
|
|
type ActionRequestBase = {
|
|
reason?: string
|
|
replayId?: string
|
|
}
|
|
type ActionRequestInput<
|
|
T extends Action<T.ActionId, any, any, Record<string, unknown>>,
|
|
> = {
|
|
kind: "partial"
|
|
value: Partial<GetActionInputType<T>>
|
|
}
|
|
export type ActionRequestOptions<
|
|
T extends Action<T.ActionId, any, any, Record<string, unknown>>,
|
|
> = ActionRequestBase &
|
|
(
|
|
| {
|
|
when?: Exclude<
|
|
T.ActionRequestTrigger,
|
|
{ condition: "input-not-matches" }
|
|
>
|
|
input?: ActionRequestInput<T>
|
|
}
|
|
| {
|
|
when: T.ActionRequestTrigger & { condition: "input-not-matches" }
|
|
input: ActionRequestInput<T>
|
|
}
|
|
)
|
|
|
|
const _validate: T.ActionRequest = {} as ActionRequestOptions<any> & {
|
|
actionId: string
|
|
packageId: string
|
|
severity: T.ActionSeverity
|
|
}
|
|
|
|
export const requestAction = <
|
|
T extends Action<T.ActionId, any, any, Record<string, unknown>>,
|
|
>(options: {
|
|
effects: T.Effects
|
|
packageId: T.PackageId
|
|
action: T
|
|
severity: T.ActionSeverity
|
|
options?: ActionRequestOptions<T>
|
|
}) => {
|
|
const request = options.options || {}
|
|
const actionId = options.action.id
|
|
const req = {
|
|
...request,
|
|
actionId,
|
|
packageId: options.packageId,
|
|
action: undefined,
|
|
severity: options.severity,
|
|
replayId: request.replayId || `${options.packageId}:${actionId}`,
|
|
}
|
|
delete req.action
|
|
return options.effects.action.request(req)
|
|
}
|