argo-cd
63 строки · 2.5 Кб
1import {Checkbox} from 'argo-ui';
2import * as React from 'react';
3import {FieldApi, FormField as ReactFormField} from 'react-form';
4
5import {format, parse} from './kustomize-image';
6
7export const ImageTagFieldEditor = ReactFormField((props: {metadata: {value: string}; fieldApi: FieldApi; className: string}) => {
8const {
9fieldApi: {getValue, setValue}
10} = props;
11const origImage = parse(props.metadata.value);
12const val = getValue();
13const image = val ? parse(val) : {name: origImage.name};
14const mustBeDigest = (image.digest || '').indexOf(':') > -1;
15return (
16<div>
17<input
18style={{width: 'calc(50% - 1em)', marginRight: '1em'}}
19placeholder={origImage.name}
20className={props.className}
21value={image.newName || ''}
22onChange={el => {
23setValue(format({...image, newName: el.target.value}));
24}}
25/>
26<input
27style={{width: 'calc(50% - 12em)'}}
28className={props.className}
29onChange={el => {
30const forceDigest = el.target.value.indexOf(':') > -1;
31if (image.digest || forceDigest) {
32setValue(format({...image, newTag: null, digest: el.target.value}));
33} else {
34setValue(format({...image, newTag: el.target.value, digest: null}));
35}
36}}
37placeholder={origImage.newTag || origImage.digest}
38value={image.newTag || image.digest || ''}
39/>
40<div style={{width: '6em', display: 'inline-block'}}>
41<Checkbox
42checked={!!image.digest}
43id={`${image.name}_is-digest`}
44onChange={() => {
45const nextImg = {...image};
46if (mustBeDigest) {
47return;
48}
49if (nextImg.digest) {
50nextImg.newTag = nextImg.digest;
51nextImg.digest = null;
52} else {
53nextImg.digest = nextImg.newTag;
54nextImg.newTag = null;
55}
56setValue(format(nextImg));
57}}
58/>{' '}
59<label htmlFor={`${image.name}_is-digest`}> Digest?</label>
60</div>
61</div>
62);
63});
64