import { module } from 'angular'; import React from 'react'; import { react2angular } from 'react2angular'; import type { IExpectedArtifact } from '../../domain'; import { TetheredSelect } from '../../presentation'; import { withErrorBoundary } from '../../presentation/SpinErrorBoundary'; import { UUIDGenerator } from '../../utils'; export interface IExpectedArtifactSourceOption { source: { expectedArtifacts: IExpectedArtifact[]; name: string; }; value?: string; label: string; } export interface IExpectedArtifactSourceSelectorProps { sources: IExpectedArtifactSourceOption[]; selected: IExpectedArtifactSourceOption; onChange: (o: IExpectedArtifactSourceOption) => void; className?: string; } export interface IExpectedArtifactSourceSelectorState { options: IExpectedArtifactSourceOption[]; } export class ExpectedArtifactSourceSelector extends React.Component< IExpectedArtifactSourceSelectorProps, IExpectedArtifactSourceSelectorState > { constructor(props: IExpectedArtifactSourceSelectorProps) { super(props); this.state = { options: props.sources.map((s) => { if (s.value) { return s; } else { return { ...s, value: UUIDGenerator.generateUuid() }; } }), }; } private renderOption = (option: IExpectedArtifactSourceOption) => { return {option.label}; }; private onChange = (option: IExpectedArtifactSourceOption) => { const source = this.props.sources.find((s) => s.source === option.source); this.props.onChange(source); }; public render() { return ( ); } } export const EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT = 'spinnaker.core.artifacts.expected.source.selector.react'; module(EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT, []).component( 'expectedArtifactSourceSelectorReact', react2angular(withErrorBoundary(ExpectedArtifactSourceSelector, 'expectedArtifactSourceSelectorReact'), [ 'sources', 'className', 'onChange', 'selected', ]), );