import { module } from 'angular';
import React from 'react';
import { react2angular } from 'react2angular';
import { ArtifactIcon } from './ArtifactIcon';
import type { IArtifactKindConfig } from '../../domain';
import { TetheredSelect } from '../../presentation';
import { withErrorBoundary } from '../../presentation/SpinErrorBoundary';
export interface IExpectedArtifactKindSelectorProps {
kinds: IArtifactKindConfig[];
selected: IArtifactKindConfig;
onChange: (_a: IArtifactKindConfig) => void;
showIcons?: boolean;
className?: string;
}
export interface IExpectedArtifactKindSelectorState {
selected?: IExpectedArtifactKindSelectorOption;
}
export interface IExpectedArtifactKindSelectorOption {
label: string;
description: string;
type: string;
value: string;
}
export class ExpectedArtifactKindSelector extends React.Component<
IExpectedArtifactKindSelectorProps,
IExpectedArtifactKindSelectorState
> {
public static defaultProps = {
showIcons: true,
};
constructor(props: IExpectedArtifactKindSelectorProps) {
super(props);
this.state = {
selected: this.optionFromKindConfig(props.selected),
};
}
private renderOption = (o: IExpectedArtifactKindSelectorOption) => {
return (
{this.props.showIcons && }
{o.label} - {o.description}
);
};
private onChange = (option: IExpectedArtifactKindSelectorOption) => {
const kind = this.props.kinds.find((k) => k.key === option.value);
this.setState({ selected: option });
this.props.onChange(kind);
};
private optionFromKindConfig = (ak: IArtifactKindConfig) => {
if (!ak) {
return null;
}
return {
label: ak.label,
description: ak.description,
type: ak.type,
value: ak.key,
};
};
public render() {
const options = this.props.kinds.map(this.optionFromKindConfig);
const value = this.state.selected;
return (
);
}
}
export const EXPECTED_ARTIFACT_KIND_SELECTOR_COMPONENT_REACT = 'spinnaker.core.artifacts.expected.kind.selector.react';
module(EXPECTED_ARTIFACT_KIND_SELECTOR_COMPONENT_REACT, []).component(
'expectedArtifactKindSelectorReact',
react2angular(withErrorBoundary(ExpectedArtifactKindSelector, 'expectedArtifactKindSelectorReact'), [
'kinds',
'selected',
'onChange',
'showIcons',
'className',
]),
);