argo-cd
38 строк · 1.9 Кб
1import * as React from 'react';
2import {FormFunctionProps} from 'react-form';
3import {CheckboxField} from '..';
4import * as models from '../../models';
5import {appInstanceName, appQualifiedName, ComparisonStatusIcon, HealthStatusIcon, OperationPhaseIcon} from '../../../applications/components/utils';
6import {AuthSettingsCtx} from '../../context';
7
8export const ApplicationSelector = ({apps, formApi}: {apps: models.Application[]; formApi: FormFunctionProps}) => {
9const useAuthSettingsCtx = React.useContext(AuthSettingsCtx);
10return (
11<>
12<label>
13Apps (<a onClick={() => apps.forEach((_, i) => formApi.setValue('app/' + i, true))}>all</a>/
14<a onClick={() => apps.forEach((app, i) => formApi.setValue('app/' + i, app.status.sync.status === models.SyncStatuses.OutOfSync))}>out of sync</a>/
15<a onClick={() => apps.forEach((_, i) => formApi.setValue('app/' + i, false))}>none</a>
16):
17</label>
18<div style={{marginTop: '0.4em'}}>
19{apps.map((app, i) => (
20<label key={appInstanceName(app)} style={{marginTop: '0.5em', cursor: 'pointer'}}>
21<CheckboxField field={`app/${i}`} />
22
23{app.isAppOfAppsPattern
24? `(App of Apps) ${appQualifiedName(app, useAuthSettingsCtx?.appsInAnyNamespaceEnabled)}`
25: appQualifiedName(app, useAuthSettingsCtx?.appsInAnyNamespaceEnabled)}
26
27<ComparisonStatusIcon status={app.status.sync.status} />
28
29<HealthStatusIcon state={app.status.health} />
30
31<OperationPhaseIcon app={app} />
32<br />
33</label>
34))}
35</div>
36</>
37);
38};
39