mirror of
https://github.com/portainer/portainer.git
synced 2025-07-30 18:59:41 +02:00
feat(docker/services): show port ranges [EE-4012] (#10657)
Some checks failed
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
ci / build_images (map[arch:arm platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:s390x platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
/ triage (push) Has been cancelled
Lint / Run linters (push) Has been cancelled
Test / test-client (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:linux]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
Test / test-server (map[arch:arm64 platform:linux]) (push) Has been cancelled
ci / build_manifests (push) Has been cancelled
Some checks failed
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
ci / build_images (map[arch:arm platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:s390x platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
/ triage (push) Has been cancelled
Lint / Run linters (push) Has been cancelled
Test / test-client (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:linux]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
Test / test-server (map[arch:arm64 platform:linux]) (push) Has been cancelled
ci / build_manifests (push) Has been cancelled
This commit is contained in:
parent
4ca6292805
commit
d336a14e50
37 changed files with 1406 additions and 148 deletions
|
@ -0,0 +1,127 @@
|
|||
import { InputLabeled } from '@@/form-components/Input/InputLabeled';
|
||||
import { Checkbox } from '@@/form-components/Checkbox';
|
||||
|
||||
import { Range, isRange } from './types';
|
||||
|
||||
export function RangeOrNumberField({
|
||||
value,
|
||||
onChange,
|
||||
disabled,
|
||||
readOnly,
|
||||
id,
|
||||
label,
|
||||
}: {
|
||||
value: Range | number | undefined;
|
||||
onChange: (value: Range | number | undefined) => void;
|
||||
disabled?: boolean;
|
||||
readOnly?: boolean;
|
||||
id: string;
|
||||
label: string;
|
||||
}) {
|
||||
return (
|
||||
<div className="flex gap-2 items-center">
|
||||
<RangeCheckbox value={value} onChange={onChange} />
|
||||
{isRange(value) ? (
|
||||
<RangeInput
|
||||
value={value}
|
||||
onChange={onChange}
|
||||
label={label}
|
||||
disabled={disabled}
|
||||
readOnly={readOnly}
|
||||
id={id}
|
||||
/>
|
||||
) : (
|
||||
<InputLabeled
|
||||
size="small"
|
||||
placeholder="e.g. 80"
|
||||
className="w-1/2"
|
||||
label={label}
|
||||
disabled={disabled}
|
||||
readOnly={readOnly}
|
||||
id={id}
|
||||
value={value || ''}
|
||||
type="number"
|
||||
onChange={(e) => onChange(getNumber(e.target.valueAsNumber))}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function RangeInput({
|
||||
value,
|
||||
onChange,
|
||||
disabled,
|
||||
readOnly,
|
||||
id,
|
||||
label,
|
||||
}: {
|
||||
value: Range;
|
||||
onChange: (value: Range) => void;
|
||||
disabled?: boolean;
|
||||
readOnly?: boolean;
|
||||
id: string;
|
||||
label: string;
|
||||
}) {
|
||||
return (
|
||||
<div className="flex items-center gap-2">
|
||||
<label className="font-normal m-0">{label}</label>
|
||||
<InputLabeled
|
||||
label="from"
|
||||
size="small"
|
||||
value={value.start || ''}
|
||||
onChange={(e) =>
|
||||
handleChange({ start: getNumber(e.target.valueAsNumber) })
|
||||
}
|
||||
disabled={disabled}
|
||||
readOnly={readOnly}
|
||||
id={id}
|
||||
type="number"
|
||||
/>
|
||||
|
||||
<InputLabeled
|
||||
label="to"
|
||||
size="small"
|
||||
value={value.end || ''}
|
||||
onChange={(e) =>
|
||||
handleChange({ end: getNumber(e.target.valueAsNumber) })
|
||||
}
|
||||
disabled={disabled}
|
||||
readOnly={readOnly}
|
||||
id={id}
|
||||
type="number"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
function handleChange(range: Partial<Range>) {
|
||||
onChange({ ...value, ...range });
|
||||
}
|
||||
}
|
||||
|
||||
function getNumber(value: number) {
|
||||
return Number.isNaN(value) ? 0 : value;
|
||||
}
|
||||
|
||||
function RangeCheckbox({
|
||||
value,
|
||||
onChange,
|
||||
}: {
|
||||
value: Range | number | undefined;
|
||||
onChange: (value: Range | number | undefined) => void;
|
||||
}) {
|
||||
const isValueRange = isRange(value);
|
||||
return (
|
||||
<Checkbox
|
||||
label="range"
|
||||
checked={isValueRange}
|
||||
onChange={() => {
|
||||
if (!isValueRange) {
|
||||
onChange({ start: value || 0, end: value || 0 });
|
||||
} else {
|
||||
onChange(value.start);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue