Project

General

Profile

Download (4.7 KB) Statistics
| Branch: | Tag: | Revision:
import React from 'react';

import DonutChart from './common/charts/DonutChart';
import BarChart from './common/charts/BarChart';
import StatisticsChartsList from './statistics/StatisticsChartsList';
import PowerStatus from './hosts/powerStatus/';
import NotificationContainer from './notifications/';
import ToastsList from './ToastsList/';
import RelativeDateTime from './common/dates/RelativeDateTime';
import LongDateTime from './common/dates/LongDateTime';
import ShortDateTime from './common/dates/ShortDateTime';
import IsoDate from './common/dates/IsoDate';
import DateTime from './common/forms/DateTime/DateTime';
import StorageContainer from './hosts/storage/vmware/';
import PasswordStrength from './PasswordStrength';
import BreadcrumbBar from './BreadcrumbBar';
import FactChart from './factCharts';
import Pagination from './Pagination/Pagination';
import AutoComplete from './AutoComplete';
import SearchBar from './SearchBar';
import Layout from './Layout';
import EmptyState from './common/EmptyState';
import ComponentWrapper from './common/ComponentWrapper/ComponentWrapper';
import ChartBox from './statistics/ChartBox';
import ConfigReports from './ConfigReports/ConfigReports';
import DiffModal from './ConfigReports/DiffModal';
import { WrapperFactory } from './wrapperFactory';
import ModelsTable from './ModelsTable';
import TemplateGenerator from './TemplateGenerator';
import TemplateInput from './Template/TemplateInput';

// Pages
import AuditsPage from '../pages/AuditsPage/AuditsPage';

const componentRegistry = {
registry: {},

register({ name = null, type = null, store = true, data = true }) {
if (!name || !type) {
throw new Error('Component name or type is missing');
}
if (this.registry[name]) {
throw new Error(`Component name already taken: ${name}`);
}

this.registry[name] = { type, store, data };
return this.registry;
},

registerMultiple(componentObjs) {
return Object.values(componentObjs).forEach(obj => this.register(obj));
},

getComponent(name) {
if (!this.registry[name]) {
throw new Error(
`Component not found: ${name} among ${this.registeredComponents()}`
);
}

return this.registry[name];
},

wrapperFactory() {
return new WrapperFactory();
},

registeredComponents() {
return Object.keys(this.registry).join(', ');
},

defaultWrapper(component, data = null, store = null, flattenData = false) {
const factory = this.wrapperFactory();

factory.with('i18n');

if (store && component.store) {
factory.with('store', store);
}
if (data && component.data) {
factory.with('data', data, flattenData);
}
return factory.wrapper;
},

markup(
name,
{ data = null, store = null, wrapper = null, flattenData = false }
) {
const currentComponent = this.getComponent(name);
const componentWrapper =
wrapper ||
this.defaultWrapper(currentComponent, data, store, flattenData);

const WrappedComponent = componentWrapper(currentComponent.type);

return <WrappedComponent />;
},
};

const coreComponets = [
{ name: 'SearchBar', type: SearchBar },
{ name: 'AutoComplete', type: AutoComplete },
{ name: 'DonutChart', type: DonutChart },
{ name: 'StatisticsChartsList', type: StatisticsChartsList },
{ name: 'PowerStatus', type: PowerStatus },
{ name: 'NotificationContainer', type: NotificationContainer },
{ name: 'ToastNotifications', type: ToastsList, data: false },
{ name: 'StorageContainer', type: StorageContainer },
{ name: 'PasswordStrength', type: PasswordStrength },
{ name: 'BreadcrumbBar', type: BreadcrumbBar },
{ name: 'FactChart', type: FactChart },
{ name: 'Pagination', type: Pagination },
{ name: 'Layout', type: Layout },
{ name: 'EmptyState', type: EmptyState },
{ name: 'BarChart', type: BarChart },
{ name: 'ChartBox', type: ChartBox },
{ name: 'ComponentWrapper', type: ComponentWrapper },
{ name: 'ConfigReports', type: ConfigReports },
{ name: 'DiffModal', type: DiffModal },
{ name: 'TemplateInput', type: TemplateInput },

{
name: 'RelativeDateTime',
type: RelativeDateTime,
data: true,
store: false,
},
{
name: 'LongDateTime',
type: LongDateTime,
data: true,
store: false,
},
{
name: 'ShortDateTime',
type: ShortDateTime,
data: true,
store: false,
},
{
name: 'IsoDate',
type: IsoDate,
data: true,
store: false,
},
{ name: 'DateTime', type: DateTime, store: false },
{ name: 'ModelsTable', type: ModelsTable },

// Pages
{ name: 'AuditsPage', type: AuditsPage },

// Report templates
{ name: 'TemplateGenerator', type: TemplateGenerator },
];

componentRegistry.registerMultiple(coreComponets);

export default componentRegistry;
(1-1/4)