import React, { ReactElement, useCallback, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Icon, useModal } from '@ohif/ui'; import { Types } from '@ohif/core'; import DataSourceConfigurationModalComponent from './DataSourceConfigurationModalComponent'; function DataSourceConfigurationComponent({ servicesManager, extensionManager, }: withAppTypes): ReactElement { const { t } = useTranslation('DataSourceConfiguration'); const { show, hide } = useModal(); const { customizationService } = servicesManager.services; const [configurationAPI, setConfigurationAPI] = useState(); const [configuredItems, setConfiguredItems] = useState>(); const [dicomStoreConfiguredItems, setDicomStoreConfiguredItems] = useState(); useEffect(() => { let shouldUpdate = true; const dataSourceChangedCallback = async () => { const activeDataSourceDef = extensionManager.getActiveDataSourceDefinition(); if (!activeDataSourceDef.configuration.configurationAPI) { return; } // Tambahan untuk ambil defaultDicomStoreConfiguredItems dari config setDicomStoreConfiguredItems(activeDataSourceDef.configuration.defaultDicomStoreConfiguredItems); const { factory: configurationAPIFactory } = customizationService.get(activeDataSourceDef.configuration.configurationAPI) ?? {}; if (!configurationAPIFactory) { return; } const configAPI = configurationAPIFactory(activeDataSourceDef.sourceName); setConfigurationAPI(configAPI); // New configuration API means that the existing configured items must be cleared. setConfiguredItems(null); configAPI.getConfiguredItems().then(list => { if (shouldUpdate) { setConfiguredItems(list); } }); }; const sub = extensionManager.subscribe( extensionManager.EVENTS.ACTIVE_DATA_SOURCE_CHANGED, dataSourceChangedCallback ); dataSourceChangedCallback(); return () => { shouldUpdate = false; sub.unsubscribe(); }; }, []); const showConfigurationModal = useCallback(() => { show({ content: DataSourceConfigurationModalComponent, title: t('Configure Data Source'), contentProps: { configurationAPI, configuredItems, onHide: hide, }, }); }, [configurationAPI, configuredItems]); useEffect(() => { if (!configurationAPI || !configuredItems) { return; } // Tambahkan dicomStoreConfiguredItems ke configuredItems if (!configuredItems.some(item => item.id === dicomStoreConfiguredItems.id)) { setConfiguredItems(prevItems => [...prevItems, dicomStoreConfiguredItems]); } if (configuredItems.length !== configurationAPI.getItemLabels().length) { // Not the correct number of configured items, so show the modal to configure the data source. showConfigurationModal(); } }, [configurationAPI, configuredItems, showConfigurationModal]); return configuredItems ? (
{configuredItems.map((item, itemIndex) => { return (
{item.name}
{itemIndex !== configuredItems.length - 1 &&
|
}
); })}
) : ( <> ); } export default DataSourceConfigurationComponent;