/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { PanelFormSection, CustomSelectorInput, PanelFormTextField, ListEditor, WarningIcon, } from '@finos/legend-art'; import { DataSpaceSupportEmail, DataSpaceSupportCombinedInfo, } from '@finos/legend-extension-dsl-data-space/graph'; import { observer } from 'mobx-react-lite'; import { dataSpace_email_setSupportInfoEmail, dataSpace_setDocumentationUrl, dataSpace_combined_setWebsite, dataSpace_combined_setFaqUrl, dataSpace_combined_addEmail, dataSpace_combined_deleteEmail, dataSpace_setSupportInfo, } from '../../stores/studio/DSL_DataSpace_GraphModifierHelper.js'; import { useEditorStore } from '@finos/legend-application-studio'; import { DataSpaceEditorState } from '../../stores/DataSpaceEditorState.js'; import { useState } from 'react'; export const DataSpaceSupportInfoSection = observer(() => { const editorStore = useEditorStore(); const dataSpaceState = editorStore.tabManagerState.getCurrentEditorState(DataSpaceEditorState); const dataSpace = dataSpaceState.dataSpace; // Event handlers const handleSupportInfoTypeChange = (option: { value: string }): void => { if (typeof option !== 'object' || !('value' in option)) { return; } const type = option.value; if ( type === 'email' && !(dataSpace.supportInfo instanceof DataSpaceSupportEmail) ) { const supportInfo = new DataSpaceSupportEmail(); if (dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) { supportInfo.address = dataSpace.supportInfo.emails?.[0] ?? ''; supportInfo.documentationUrl = dataSpace.supportInfo.documentationUrl; } dataSpace_setSupportInfo(dataSpace, supportInfo); } else if ( type === 'combined' && !(dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) ) { const supportInfo = new DataSpaceSupportCombinedInfo(); if ( dataSpace.supportInfo instanceof DataSpaceSupportEmail && dataSpace.supportInfo.address ) { supportInfo.emails = [dataSpace.supportInfo.address]; supportInfo.documentationUrl = dataSpace.supportInfo.documentationUrl; } dataSpace_setSupportInfo(dataSpace, supportInfo); } else { dataSpace_setSupportInfo(dataSpace, undefined); } }; const handleSupportInfoEmailAdd = (email: string): void => { if (dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) { dataSpace_combined_addEmail(dataSpace.supportInfo, email); } }; const handleSupportInfoEmailRemove = (email: string): void => { if (dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) { dataSpace_combined_deleteEmail(dataSpace.supportInfo, email); } }; // ListEditor component renderers const SupportEmailComponent = observer( (props: { item: string }): React.ReactElement => { const { item } = props; return (
{item}
); }, ); const NewSupportEmailComponent = observer( (props: { onFinishEditing: () => void }) => { const { onFinishEditing } = props; const [email, setEmail] = useState(''); return (
{ setEmail(event.target.value); }} />
); }, ); return (
Support Information
Configure support information for this Data Product.
{!(dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) && ( handleSupportInfoTypeChange(option) } value={{ label: dataSpace.supportInfo ? dataSpace.supportInfo instanceof DataSpaceSupportEmail ? 'Email' : 'Combined' : 'None', value: dataSpace.supportInfo ? dataSpace.supportInfo instanceof DataSpaceSupportEmail ? 'email' : 'combined' : 'none', }} darkMode={true} /> )} {dataSpace.supportInfo ? ( dataSpace.supportInfo instanceof DataSpaceSupportEmail ? ( { if (dataSpace.supportInfo instanceof DataSpaceSupportEmail) { dataSpace_email_setSupportInfoEmail( dataSpace.supportInfo, value ?? '', ); } }} placeholder="Enter email address" /> { if (dataSpace.supportInfo) { dataSpace_setDocumentationUrl( dataSpace.supportInfo, value ?? '', ); } }} placeholder="Enter documentation URL" /> ) : dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo ? (
element} ItemComponent={SupportEmailComponent} NewItemComponent={NewSupportEmailComponent} handleRemoveItem={handleSupportInfoEmailRemove} isReadOnly={dataSpaceState.isReadOnly} emptyMessage="No emails specified" /> {(dataSpace.supportInfo.emails === undefined || dataSpace.supportInfo.emails.length === 0) && (
At least one email is required
)} { if (dataSpace.supportInfo) { dataSpace_setDocumentationUrl( dataSpace.supportInfo, value ?? '', ); } }} placeholder="Enter documentation URL" /> { if ( dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo ) { dataSpace_combined_setWebsite( dataSpace.supportInfo, value ?? '', ); } }} placeholder="Enter website URL" /> { if ( dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo ) { dataSpace_combined_setFaqUrl( dataSpace.supportInfo, value ?? '', ); } }} placeholder="Enter FAQ URL" />
) : (
Unknown support info type
) ) : null}
); });