mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-14 18:03:38 +00:00
Minor: Automator feedback part 2 (#16115)
* Change ingestion pipeline unpause button to play Fixe the cron editor alignment Fix the alignment of beta tag on left menu bar * chore: Update language files with new translations and add "Play" translation * Move IngestionRunDetails modal to a common component for reuse * Add missing localization * localization changes for all languages
This commit is contained in:
parent
795879d776
commit
ac3f843d6d
@ -425,7 +425,7 @@ const TestSuitePipelineTab = ({ testSuite }: Props) => {
|
|||||||
<Tooltip
|
<Tooltip
|
||||||
title={
|
title={
|
||||||
editPermission
|
editPermission
|
||||||
? t('label.unpause')
|
? t('label.play')
|
||||||
: t('message.no-permission-for-action')
|
: t('message.no-permission-for-action')
|
||||||
}>
|
}>
|
||||||
<Button
|
<Button
|
||||||
@ -437,7 +437,7 @@ const TestSuitePipelineTab = ({ testSuite }: Props) => {
|
|||||||
onClick={() =>
|
onClick={() =>
|
||||||
handleEnableDisableIngestion(record.id || '')
|
handleEnableDisableIngestion(record.id || '')
|
||||||
}>
|
}>
|
||||||
{t('label.unpause')}
|
{t('label.play')}
|
||||||
</Button>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2024 Collate.
|
||||||
|
* 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 { PipelineStatus } from '../../../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
||||||
|
|
||||||
|
export interface IngestionRunDetailsModalProps {
|
||||||
|
pipelineStatus?: PipelineStatus;
|
||||||
|
handleCancel: () => void;
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2024 Collate.
|
||||||
|
* 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 { render, screen } from '@testing-library/react';
|
||||||
|
import React from 'react';
|
||||||
|
import { mockPipelineStatus } from '../../Settings/Services/Ingestion/Ingestion.mock';
|
||||||
|
import IngestionRunDetailsModal from './IngestionRunDetailsModal';
|
||||||
|
|
||||||
|
const mockHandleCancel = jest.fn();
|
||||||
|
|
||||||
|
describe('IngestionRunDetailsModal', () => {
|
||||||
|
it('should show no data placeholder when no step summary is not present', () => {
|
||||||
|
render(<IngestionRunDetailsModal handleCancel={mockHandleCancel} />);
|
||||||
|
|
||||||
|
expect(screen.getByText('No data')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show proper data in the table when step summary is present', () => {
|
||||||
|
render(
|
||||||
|
<IngestionRunDetailsModal
|
||||||
|
handleCancel={mockHandleCancel}
|
||||||
|
pipelineStatus={mockPipelineStatus}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
screen.getByTestId(
|
||||||
|
`step-summary-name-${mockPipelineStatus.status[0].name}`
|
||||||
|
)
|
||||||
|
).toBeInTheDocument();
|
||||||
|
expect(
|
||||||
|
screen.getByTestId(
|
||||||
|
`step-summary-name-${mockPipelineStatus.status[1].name}`
|
||||||
|
)
|
||||||
|
).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2024 Collate.
|
||||||
|
* 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 { Button, Modal, Typography } from 'antd';
|
||||||
|
import { ColumnType } from 'antd/lib/table';
|
||||||
|
import { ExpandableConfig } from 'antd/lib/table/interface';
|
||||||
|
import { startCase } from 'lodash';
|
||||||
|
import React, { useMemo, useState } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { NO_DATA } from '../../../constants/constants';
|
||||||
|
import { StepSummary } from '../../../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
||||||
|
import { formatDateTime } from '../../../utils/date-time/DateTimeUtils';
|
||||||
|
import { getEntityName } from '../../../utils/EntityUtils';
|
||||||
|
import Table from '../../common/Table/Table';
|
||||||
|
import ConnectionStepCard from '../../common/TestConnection/ConnectionStepCard/ConnectionStepCard';
|
||||||
|
import { IngestionRunDetailsModalProps } from './IngestionRunDetailsModal.interface';
|
||||||
|
|
||||||
|
function IngestionRunDetailsModal({
|
||||||
|
pipelineStatus,
|
||||||
|
handleCancel,
|
||||||
|
}: Readonly<IngestionRunDetailsModalProps>) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
|
||||||
|
|
||||||
|
const columns: ColumnType<StepSummary>[] = useMemo(
|
||||||
|
() => [
|
||||||
|
{
|
||||||
|
title: t('label.step'),
|
||||||
|
dataIndex: 'name',
|
||||||
|
render: (_, record: StepSummary) => (
|
||||||
|
<Typography.Text data-testid={`step-summary-name-${record.name}`}>
|
||||||
|
{getEntityName(record)}
|
||||||
|
</Typography.Text>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('label.record-plural'),
|
||||||
|
dataIndex: 'records',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('label.filtered'),
|
||||||
|
dataIndex: 'filtered',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('label.warning-plural'),
|
||||||
|
dataIndex: 'warnings',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('label.error-plural'),
|
||||||
|
dataIndex: 'errors',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: t('label.failure-plural'),
|
||||||
|
dataIndex: 'failures',
|
||||||
|
render: (failures: StepSummary['failures'], record: StepSummary) =>
|
||||||
|
(failures?.length ?? 0) > 0 ? (
|
||||||
|
<Button
|
||||||
|
data-testid={`log-${record.name}`}
|
||||||
|
size="small"
|
||||||
|
type="link"
|
||||||
|
onClick={() => setExpandedKeys([record.name])}>
|
||||||
|
{t('label.log-plural')}
|
||||||
|
</Button>
|
||||||
|
) : (
|
||||||
|
NO_DATA
|
||||||
|
),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[setExpandedKeys]
|
||||||
|
);
|
||||||
|
|
||||||
|
const expandable: ExpandableConfig<StepSummary> = useMemo(
|
||||||
|
() => ({
|
||||||
|
expandedRowRender: (record) => {
|
||||||
|
return (
|
||||||
|
record.failures?.map((failure) => (
|
||||||
|
<ConnectionStepCard
|
||||||
|
isTestingConnection={false}
|
||||||
|
key={failure.name}
|
||||||
|
testConnectionStep={{
|
||||||
|
name: failure.name,
|
||||||
|
mandatory: false,
|
||||||
|
description: failure.error,
|
||||||
|
}}
|
||||||
|
testConnectionStepResult={{
|
||||||
|
name: failure.name,
|
||||||
|
passed: false,
|
||||||
|
mandatory: false,
|
||||||
|
message: failure.error,
|
||||||
|
errorLog: failure.stackTrace,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)) ?? []
|
||||||
|
);
|
||||||
|
},
|
||||||
|
indentSize: 0,
|
||||||
|
expandIcon: () => null,
|
||||||
|
expandedRowKeys: expandedKeys,
|
||||||
|
rowExpandable: (record) => (record.failures?.length ?? 0) > 0,
|
||||||
|
}),
|
||||||
|
[expandedKeys]
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
centered
|
||||||
|
destroyOnClose
|
||||||
|
open
|
||||||
|
closable={false}
|
||||||
|
maskClosable={false}
|
||||||
|
okButtonProps={{ style: { display: 'none' } }}
|
||||||
|
title={t('label.run-status-at-timestamp', {
|
||||||
|
status: startCase(pipelineStatus?.pipelineState),
|
||||||
|
timestamp: formatDateTime(pipelineStatus?.timestamp),
|
||||||
|
})}
|
||||||
|
width="80%"
|
||||||
|
onCancel={handleCancel}>
|
||||||
|
<Table
|
||||||
|
bordered
|
||||||
|
columns={columns}
|
||||||
|
dataSource={pipelineStatus?.status ?? []}
|
||||||
|
expandable={expandable}
|
||||||
|
indentSize={0}
|
||||||
|
pagination={false}
|
||||||
|
rowKey="name"
|
||||||
|
size="small"
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default IngestionRunDetailsModal;
|
||||||
@ -74,6 +74,14 @@
|
|||||||
.left-panel-label {
|
.left-panel-label {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.service-beta-tag {
|
||||||
|
position: static;
|
||||||
|
sup {
|
||||||
|
margin-left: 8px;
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -11,26 +11,20 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Button, Popover, Skeleton, Space, Tag } from 'antd';
|
import { Popover, Skeleton, Space, Tag } from 'antd';
|
||||||
import Modal from 'antd/lib/modal/Modal';
|
|
||||||
import { ColumnType } from 'antd/lib/table';
|
|
||||||
import { ExpandableConfig } from 'antd/lib/table/interface';
|
|
||||||
import classNamesFunc from 'classnames';
|
import classNamesFunc from 'classnames';
|
||||||
import { isEmpty, startCase } from 'lodash';
|
import { isEmpty, isUndefined, startCase } from 'lodash';
|
||||||
import React, {
|
import React, {
|
||||||
FunctionComponent,
|
FunctionComponent,
|
||||||
useCallback,
|
useCallback,
|
||||||
useEffect,
|
useEffect,
|
||||||
useMemo,
|
|
||||||
useState,
|
useState,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { NO_DATA } from '../../../../../constants/constants';
|
|
||||||
import { PIPELINE_INGESTION_RUN_STATUS } from '../../../../../constants/pipeline.constants';
|
import { PIPELINE_INGESTION_RUN_STATUS } from '../../../../../constants/pipeline.constants';
|
||||||
import {
|
import {
|
||||||
IngestionPipeline,
|
IngestionPipeline,
|
||||||
PipelineStatus,
|
PipelineStatus,
|
||||||
StepSummary,
|
|
||||||
} from '../../../../../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
} from '../../../../../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
||||||
import { getRunHistoryForPipeline } from '../../../../../rest/ingestionPipelineAPI';
|
import { getRunHistoryForPipeline } from '../../../../../rest/ingestionPipelineAPI';
|
||||||
import {
|
import {
|
||||||
@ -38,8 +32,7 @@ import {
|
|||||||
getCurrentMillis,
|
getCurrentMillis,
|
||||||
getEpochMillisForPastDays,
|
getEpochMillisForPastDays,
|
||||||
} from '../../../../../utils/date-time/DateTimeUtils';
|
} from '../../../../../utils/date-time/DateTimeUtils';
|
||||||
import Table from '../../../../common/Table/Table';
|
import IngestionRunDetailsModal from '../../../../Modals/IngestionRunDetailsModal/IngestionRunDetailsModal';
|
||||||
import ConnectionStepCard from '../../../../common/TestConnection/ConnectionStepCard/ConnectionStepCard';
|
|
||||||
import './ingestion-recent-run.style.less';
|
import './ingestion-recent-run.style.less';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@ -63,79 +56,6 @@ export const IngestionRecentRuns: FunctionComponent<Props> = ({
|
|||||||
const [recentRunStatus, setRecentRunStatus] = useState<PipelineStatus[]>([]);
|
const [recentRunStatus, setRecentRunStatus] = useState<PipelineStatus[]>([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [selectedStatus, setSelectedStatus] = useState<PipelineStatus>();
|
const [selectedStatus, setSelectedStatus] = useState<PipelineStatus>();
|
||||||
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
|
|
||||||
const columns: ColumnType<StepSummary>[] = useMemo(
|
|
||||||
() => [
|
|
||||||
{
|
|
||||||
title: t('label.step'),
|
|
||||||
dataIndex: 'name',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: t('label.record-plural'),
|
|
||||||
dataIndex: 'records',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: t('label.filtered'),
|
|
||||||
dataIndex: 'filtered',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: t('label.warning-plural'),
|
|
||||||
dataIndex: 'warnings',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: t('label.error-plural'),
|
|
||||||
dataIndex: 'errors',
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
title: t('label.failure-plural'),
|
|
||||||
dataIndex: 'failures',
|
|
||||||
render: (failures: StepSummary['failures'], record: StepSummary) =>
|
|
||||||
(failures?.length ?? 0) > 0 ? (
|
|
||||||
<Button
|
|
||||||
size="small"
|
|
||||||
type="link"
|
|
||||||
onClick={() => setExpandedKeys([record.name])}>
|
|
||||||
{t('label.log-plural')}
|
|
||||||
</Button>
|
|
||||||
) : (
|
|
||||||
NO_DATA
|
|
||||||
),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
[setExpandedKeys]
|
|
||||||
);
|
|
||||||
const expandable: ExpandableConfig<StepSummary> = useMemo(
|
|
||||||
() => ({
|
|
||||||
expandedRowRender: (record) => {
|
|
||||||
return (
|
|
||||||
record.failures?.map((failure) => (
|
|
||||||
<ConnectionStepCard
|
|
||||||
isTestingConnection={false}
|
|
||||||
key={failure.name}
|
|
||||||
testConnectionStep={{
|
|
||||||
name: failure.name,
|
|
||||||
mandatory: false,
|
|
||||||
description: failure.error,
|
|
||||||
}}
|
|
||||||
testConnectionStepResult={{
|
|
||||||
name: failure.name,
|
|
||||||
passed: false,
|
|
||||||
mandatory: false,
|
|
||||||
message: failure.error,
|
|
||||||
errorLog: failure.stackTrace,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
)) ?? []
|
|
||||||
);
|
|
||||||
},
|
|
||||||
indentSize: 0,
|
|
||||||
expandIcon: () => null,
|
|
||||||
expandedRowKeys: expandedKeys,
|
|
||||||
rowExpandable: (record) => (record.failures?.length ?? 0) > 0,
|
|
||||||
}),
|
|
||||||
[expandedKeys]
|
|
||||||
);
|
|
||||||
|
|
||||||
const fetchPipelineStatus = useCallback(async () => {
|
const fetchPipelineStatus = useCallback(async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
@ -167,10 +87,11 @@ export const IngestionRecentRuns: FunctionComponent<Props> = ({
|
|||||||
}, [ingestion, ingestion?.fullyQualifiedName]);
|
}, [ingestion, ingestion?.fullyQualifiedName]);
|
||||||
|
|
||||||
const handleRunStatusClick = (status: PipelineStatus) => {
|
const handleRunStatusClick = (status: PipelineStatus) => {
|
||||||
setExpandedKeys([]);
|
|
||||||
setSelectedStatus(status);
|
setSelectedStatus(status);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleModalCancel = () => setSelectedStatus(undefined);
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return <Skeleton.Input size="small" />;
|
return <Skeleton.Input size="small" />;
|
||||||
}
|
}
|
||||||
@ -232,29 +153,12 @@ export const IngestionRecentRuns: FunctionComponent<Props> = ({
|
|||||||
})
|
})
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Modal
|
{!isUndefined(selectedStatus) && (
|
||||||
centered
|
<IngestionRunDetailsModal
|
||||||
destroyOnClose
|
handleCancel={handleModalCancel}
|
||||||
closeIcon={<></>}
|
pipelineStatus={selectedStatus}
|
||||||
maskClosable={false}
|
|
||||||
okButtonProps={{ style: { display: 'none' } }}
|
|
||||||
open={Boolean(selectedStatus)}
|
|
||||||
title={`Run status: ${startCase(
|
|
||||||
selectedStatus?.pipelineState
|
|
||||||
)} at ${formatDateTime(selectedStatus?.timestamp)}`}
|
|
||||||
width="80%"
|
|
||||||
onCancel={() => setSelectedStatus(undefined)}>
|
|
||||||
<Table
|
|
||||||
bordered
|
|
||||||
columns={columns}
|
|
||||||
dataSource={selectedStatus?.status ?? []}
|
|
||||||
expandable={expandable}
|
|
||||||
indentSize={0}
|
|
||||||
pagination={false}
|
|
||||||
rowKey="name"
|
|
||||||
size="small"
|
|
||||||
/>
|
/>
|
||||||
</Modal>
|
)}
|
||||||
</Space>
|
</Space>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -203,7 +203,7 @@ function PipelineActions({
|
|||||||
disabled={getIngestionPermission(record.name)}
|
disabled={getIngestionPermission(record.name)}
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => onPauseUnpauseClick(recordId)}>
|
onClick={() => onPauseUnpauseClick(recordId)}>
|
||||||
{getLoadingStatus(currPauseId, record.id, t('label.unpause'))}
|
{getLoadingStatus(currPauseId, record.id, t('label.play'))}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
<Divider className="border-gray" type="vertical" />
|
<Divider className="border-gray" type="vertical" />
|
||||||
|
|||||||
@ -507,14 +507,16 @@ const CronEditor: FC<CronEditorProp> = (props) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <div data-testid="schedule-description">{retString}</div>;
|
return retString ? (
|
||||||
|
<div data-testid="schedule-description">{retString}</div>
|
||||||
|
) : null;
|
||||||
}, [state, cronPeriodString, startText, value]);
|
}, [state, cronPeriodString, startText, value]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Row
|
<Row
|
||||||
className={classNames(className, 'cron-row')}
|
className={classNames(className, 'cron-row')}
|
||||||
data-testid="cron-container"
|
data-testid="cron-container"
|
||||||
gutter={[16, 0]}>
|
gutter={[16, 16]}>
|
||||||
<Col data-testid="time-dropdown-container" span={12}>
|
<Col data-testid="time-dropdown-container" span={12}>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
initialValue={selectedPeriod}
|
initialValue={selectedPeriod}
|
||||||
@ -579,7 +581,7 @@ const CronEditor: FC<CronEditorProp> = (props) => {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<Col span={24}>{displayCronString}</Col>
|
{displayCronString && <Col span={24}>{displayCronString}</Col>}
|
||||||
|
|
||||||
{isEmpty(value) && (
|
{isEmpty(value) && (
|
||||||
<Col span={24}>
|
<Col span={24}>
|
||||||
|
|||||||
@ -65,3 +65,8 @@
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
padding: 8px 5px;
|
padding: 8px 5px;
|
||||||
}
|
}
|
||||||
|
.cron-row {
|
||||||
|
.ant-form-item {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "Pipeline-Status",
|
"pipeline-state": "Pipeline-Status",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Bitte einen Wert für {{name}} eingeben",
|
"please-enter-value": "Bitte einen Wert für {{name}} eingeben",
|
||||||
"please-password-type-first": "Bitte zuerst das Passwort eingeben",
|
"please-password-type-first": "Bitte zuerst das Passwort eingeben",
|
||||||
"please-select": "Bitte auswählen",
|
"please-select": "Bitte auswählen",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Konfiguration zur Festlegung des Limits für Abfrageprotokolle.",
|
"result-limit-message": "Konfiguration zur Festlegung des Limits für Abfrageprotokolle.",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "Führen Sie Musterdaten aus, um Musterdatenvermögenswerte in Ihr OpenMetadata einzufügen.",
|
"run-sample-data-to-ingest-sample-data": "Führen Sie Musterdaten aus, um Musterdatenvermögenswerte in Ihr OpenMetadata einzufügen.",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "Die Planung kann im stündlichen, täglichen oder wöchentlichen Rhythmus eingerichtet werden. Die Zeitzone ist UTC.",
|
"schedule-for-ingestion-description": "Die Planung kann im stündlichen, täglichen oder wöchentlichen Rhythmus eingerichtet werden. Die Zeitzone ist UTC.",
|
||||||
"scheduled-run-every": "Geplant, alle auszuführen",
|
"scheduled-run-every": "Geplant, alle auszuführen",
|
||||||
"scopes-comma-separated": "Fügen Sie den Wert der Bereiche hinzu, getrennt durch Kommata",
|
"scopes-comma-separated": "Fügen Sie den Wert der Bereiche hinzu, getrennt durch Kommata",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "Pipeline State",
|
"pipeline-state": "Pipeline State",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Please enter {{name}} value",
|
"please-enter-value": "Please enter {{name}} value",
|
||||||
"please-password-type-first": "Please type password first",
|
"please-password-type-first": "Please type password first",
|
||||||
"please-select": "Please Select",
|
"please-select": "Please Select",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Configuration to set the limit for query logs.",
|
"result-limit-message": "Configuration to set the limit for query logs.",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'Run sample data to ingest sample data assets into your OpenMetadata.'",
|
"run-sample-data-to-ingest-sample-data": "'Run sample data to ingest sample data assets into your OpenMetadata.'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "Scheduling can be set up at an hourly, daily, or weekly cadence. The timezone is in UTC.",
|
"schedule-for-ingestion-description": "Scheduling can be set up at an hourly, daily, or weekly cadence. The timezone is in UTC.",
|
||||||
"scheduled-run-every": "Scheduled to run every",
|
"scheduled-run-every": "Scheduled to run every",
|
||||||
"scopes-comma-separated": "Add the Scopes value, separated by commas",
|
"scopes-comma-separated": "Add the Scopes value, separated by commas",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "Estado de la pipeline",
|
"pipeline-state": "Estado de la pipeline",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Ingrese el valor de {{name}}",
|
"please-enter-value": "Ingrese el valor de {{name}}",
|
||||||
"please-password-type-first": "Ingrese primero la contraseña",
|
"please-password-type-first": "Ingrese primero la contraseña",
|
||||||
"please-select": "Por favor seleccione",
|
"please-select": "Por favor seleccione",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Configuración para establecer el límite de los registros de consulta.",
|
"result-limit-message": "Configuración para establecer el límite de los registros de consulta.",
|
||||||
"retention-period-description": "Retention period se refiere a la duración durante la cual los datos se retienen antes de que sean elegibles para su eliminación o archivo.",
|
"retention-period-description": "Retention period se refiere a la duración durante la cual los datos se retienen antes de que sean elegibles para su eliminación o archivo.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'Ejecutar datos de muestra para ingresar activos de datos de muestra en tu OpenMetadata.'",
|
"run-sample-data-to-ingest-sample-data": "'Ejecutar datos de muestra para ingresar activos de datos de muestra en tu OpenMetadata.'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "La programación se puede configurar en una cadencia horaria, diaria o semanal.",
|
"schedule-for-ingestion-description": "La programación se puede configurar en una cadencia horaria, diaria o semanal.",
|
||||||
"scheduled-run-every": "Programado para ejecutarse cada",
|
"scheduled-run-every": "Programado para ejecutarse cada",
|
||||||
"scopes-comma-separated": "Agrega el valor de ámbitos, separados por comas",
|
"scopes-comma-separated": "Agrega el valor de ámbitos, separados por comas",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "État du Pipeline",
|
"pipeline-state": "État du Pipeline",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Merci d'entrer une valeur pour {{name}} ",
|
"please-enter-value": "Merci d'entrer une valeur pour {{name}} ",
|
||||||
"please-password-type-first": "Merci d'entrer le mot de passe d'abord",
|
"please-password-type-first": "Merci d'entrer le mot de passe d'abord",
|
||||||
"please-select": "Merci de sélectionner",
|
"please-select": "Merci de sélectionner",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Configuration pour définir la limite des journaux de requête.",
|
"result-limit-message": "Configuration pour définir la limite des journaux de requête.",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "Exécuter l'ingestion de données d'exemple dans OpenMetadata",
|
"run-sample-data-to-ingest-sample-data": "Exécuter l'ingestion de données d'exemple dans OpenMetadata",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "La programmation peut être configurée à une cadence horaire, quotidienne ou hebdomadaire. Le fuseau horaire est en UTC.",
|
"schedule-for-ingestion-description": "La programmation peut être configurée à une cadence horaire, quotidienne ou hebdomadaire. Le fuseau horaire est en UTC.",
|
||||||
"scheduled-run-every": "Programmer pour être exécuté tous les",
|
"scheduled-run-every": "Programmer pour être exécuté tous les",
|
||||||
"scopes-comma-separated": "Liste de scopes séparée par une virgule.",
|
"scopes-comma-separated": "Liste de scopes séparée par une virgule.",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "תהליכי טעינה/עיבוד",
|
"pipeline-plural": "תהליכי טעינה/עיבוד",
|
||||||
"pipeline-state": "מצב תהליך הטעינה/עיבוד",
|
"pipeline-state": "מצב תהליך הטעינה/עיבוד",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "נא להזין את ערך {{name}}",
|
"please-enter-value": "נא להזין את ערך {{name}}",
|
||||||
"please-password-type-first": "נא להקליד סיסמה תחילה",
|
"please-password-type-first": "נא להקליד סיסמה תחילה",
|
||||||
"please-select": "בחר בבקשה",
|
"please-select": "בחר בבקשה",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "הגדר את הגבלת התוצאה ללוגי שאילתות.",
|
"result-limit-message": "הגדר את הגבלת התוצאה ללוגי שאילתות.",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'הרץ נתוני דוגמה כדי לשדרג נכסי נתונים דוגמה אל OpenMetadata שלך.'",
|
"run-sample-data-to-ingest-sample-data": "'הרץ נתוני דוגמה כדי לשדרג נכסי נתונים דוגמה אל OpenMetadata שלך.'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "ניתן להגדיר שימוש כל שעה, יומית או שבועית. אזור הזמן הוא UTC.",
|
"schedule-for-ingestion-description": "ניתן להגדיר שימוש כל שעה, יומית או שבועית. אזור הזמן הוא UTC.",
|
||||||
"scheduled-run-every": "מתוזמן לרוץ כל",
|
"scheduled-run-every": "מתוזמן לרוץ כל",
|
||||||
"scopes-comma-separated": "הוסף את ערכי הניקוד, מופרדים בפסיקים",
|
"scopes-comma-separated": "הוסף את ערכי הניקוד, מופרדים בפסיקים",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "パイプライン",
|
"pipeline-plural": "パイプライン",
|
||||||
"pipeline-state": "パイプラインの状態",
|
"pipeline-state": "パイプラインの状態",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "{{name}}の値を入力してください",
|
"please-enter-value": "{{name}}の値を入力してください",
|
||||||
"please-password-type-first": "パスワードを入力してください",
|
"please-password-type-first": "パスワードを入力してください",
|
||||||
"please-select": "選択してください",
|
"please-select": "選択してください",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "クエリログの上限を決めるための設定です。",
|
"result-limit-message": "クエリログの上限を決めるための設定です。",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'サンプルデータを実行してサンプルデータのアセットをOpenMetadataに取り込みます。'",
|
"run-sample-data-to-ingest-sample-data": "'サンプルデータを実行してサンプルデータのアセットをOpenMetadataに取り込みます。'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "Scheduling can be set up at an hourly, daily, or weekly cadence. The timezone is in UTC.",
|
"schedule-for-ingestion-description": "Scheduling can be set up at an hourly, daily, or weekly cadence. The timezone is in UTC.",
|
||||||
"scheduled-run-every": "Scheduled to run every",
|
"scheduled-run-every": "Scheduled to run every",
|
||||||
"scopes-comma-separated": "スコープの値をカンマで区切って追加",
|
"scopes-comma-separated": "スコープの値をカンマで区切って追加",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "Pipelinestatus",
|
"pipeline-state": "Pipelinestatus",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Voer alstublieft de waarde voor {{name}} in",
|
"please-enter-value": "Voer alstublieft de waarde voor {{name}} in",
|
||||||
"please-password-type-first": "Typ eerst het wachtwoord alstublieft",
|
"please-password-type-first": "Typ eerst het wachtwoord alstublieft",
|
||||||
"please-select": "Selecteer alstublieft",
|
"please-select": "Selecteer alstublieft",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Configuratie om de limiet voor querylogs in te stellen.",
|
"result-limit-message": "Configuratie om de limiet voor querylogs in te stellen.",
|
||||||
"retention-period-description": "De bewaartermijn verwijst naar de duur van het bewaren van data voordat data in aanmerking komt voor verwijdering of archivering. Voorbeelden van geldige periodes: 30 dagen, 6 maanden, 1 jaar, of een ISO 8601-indeling in UTC zoals P23DT23H.",
|
"retention-period-description": "De bewaartermijn verwijst naar de duur van het bewaren van data voordat data in aanmerking komt voor verwijdering of archivering. Voorbeelden van geldige periodes: 30 dagen, 6 maanden, 1 jaar, of een ISO 8601-indeling in UTC zoals P23DT23H.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'Voer voorbeelddata uit om voorbeeld-data-assets te ingesten in je OpenMetadata.'",
|
"run-sample-data-to-ingest-sample-data": "'Voer voorbeelddata uit om voorbeeld-data-assets te ingesten in je OpenMetadata.'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "Planning kan worden ingesteld op een uurlijkse, dagelijkse of wekelijkse cadans. De tijdzone is in UTC.",
|
"schedule-for-ingestion-description": "Planning kan worden ingesteld op een uurlijkse, dagelijkse of wekelijkse cadans. De tijdzone is in UTC.",
|
||||||
"scheduled-run-every": "Gepland om elke keer uit te voeren",
|
"scheduled-run-every": "Gepland om elke keer uit te voeren",
|
||||||
"scopes-comma-separated": "Voeg de herkomstwaarde toe, gescheiden door komma's",
|
"scopes-comma-separated": "Voeg de herkomstwaarde toe, gescheiden door komma's",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Pipelines",
|
"pipeline-plural": "Pipelines",
|
||||||
"pipeline-state": "Estado do Pipeline",
|
"pipeline-state": "Estado do Pipeline",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Por favor, insira o valor de {{name}}",
|
"please-enter-value": "Por favor, insira o valor de {{name}}",
|
||||||
"please-password-type-first": "Por favor, digite a senha primeiro",
|
"please-password-type-first": "Por favor, digite a senha primeiro",
|
||||||
"please-select": "Por favor, Selecione",
|
"please-select": "Por favor, Selecione",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Configuração para definir o limite para registros de consulta.",
|
"result-limit-message": "Configuração para definir o limite para registros de consulta.",
|
||||||
"retention-period-description": "O período de retenção refere-se à duração durante a qual os dados são mantidos antes de serem considerados elegíveis para exclusão ou arquivamento. Exemplo: 30 dias, 6 meses, 1 ano ou qualquer formato ISO 8601 em UTC, como P23DT23H, será válido.",
|
"retention-period-description": "O período de retenção refere-se à duração durante a qual os dados são mantidos antes de serem considerados elegíveis para exclusão ou arquivamento. Exemplo: 30 dias, 6 meses, 1 ano ou qualquer formato ISO 8601 em UTC, como P23DT23H, será válido.",
|
||||||
"run-sample-data-to-ingest-sample-data": "Executar dados de exemplo para ingerir ativos de dados de exemplo no OpenMetadata.",
|
"run-sample-data-to-ingest-sample-data": "Executar dados de exemplo para ingerir ativos de dados de exemplo no OpenMetadata.",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "O agendamento pode ser configurado em uma frequência horária, diária ou semanal. O fuso horário é em UTC.",
|
"schedule-for-ingestion-description": "O agendamento pode ser configurado em uma frequência horária, diária ou semanal. O fuso horário é em UTC.",
|
||||||
"scheduled-run-every": "Agendado para rodar a cada",
|
"scheduled-run-every": "Agendado para rodar a cada",
|
||||||
"scopes-comma-separated": "Adicione o valor dos Escopos, separados por vírgulas",
|
"scopes-comma-separated": "Adicione o valor dos Escopos, separados por vírgulas",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "Пайплайны",
|
"pipeline-plural": "Пайплайны",
|
||||||
"pipeline-state": "Состояние",
|
"pipeline-state": "Состояние",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "Пожалуйста введите значение {{name}} ",
|
"please-enter-value": "Пожалуйста введите значение {{name}} ",
|
||||||
"please-password-type-first": "Пожалуйста, сначала введите пароль",
|
"please-password-type-first": "Пожалуйста, сначала введите пароль",
|
||||||
"please-select": "Пожалуйста выберите",
|
"please-select": "Пожалуйста выберите",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "Конфигурация для установки лимита журналов запросов.",
|
"result-limit-message": "Конфигурация для установки лимита журналов запросов.",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "Запустите образцы данных, чтобы добавить образцы данных в свои OpenMetadata.",
|
"run-sample-data-to-ingest-sample-data": "Запустите образцы данных, чтобы добавить образцы данных в свои OpenMetadata.",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "Планирование может быть настроено на почасовой, ежедневной или еженедельной частоте. Часовой пояс указан в формате UTC.",
|
"schedule-for-ingestion-description": "Планирование может быть настроено на почасовой, ежедневной или еженедельной частоте. Часовой пояс указан в формате UTC.",
|
||||||
"scheduled-run-every": "Запланирован запуск каждый",
|
"scheduled-run-every": "Запланирован запуск каждый",
|
||||||
"scopes-comma-separated": "Добавьте значение областей, разделенное запятыми",
|
"scopes-comma-separated": "Добавьте значение областей, разделенное запятыми",
|
||||||
|
|||||||
@ -819,6 +819,7 @@
|
|||||||
"pipeline-plural": "工作流",
|
"pipeline-plural": "工作流",
|
||||||
"pipeline-state": "工作流状态",
|
"pipeline-state": "工作流状态",
|
||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
|
"play": "Play",
|
||||||
"please-enter-value": "请输入{{name}}值",
|
"please-enter-value": "请输入{{name}}值",
|
||||||
"please-password-type-first": "请先输入密码",
|
"please-password-type-first": "请先输入密码",
|
||||||
"please-select": "请选择",
|
"please-select": "请选择",
|
||||||
@ -1692,6 +1693,7 @@
|
|||||||
"result-limit-message": "设置查询日志的限制",
|
"result-limit-message": "设置查询日志的限制",
|
||||||
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
"retention-period-description": "Retention period refers to the duration for which data is retained before it is considered eligible for deletion or archival. Example: 30 days, 6 months, 1 year or any ISO 8601 format in UTC like P23DT23H will be valid.",
|
||||||
"run-sample-data-to-ingest-sample-data": "'运行样本数据以提取样本数据资产到 OpenMetadata'",
|
"run-sample-data-to-ingest-sample-data": "'运行样本数据以提取样本数据资产到 OpenMetadata'",
|
||||||
|
"run-status-at-timestamp": "Run status: {{status}} at {{timestamp}}",
|
||||||
"schedule-for-ingestion-description": "可设置每小时、每天或每周的计划,时区为 UTC",
|
"schedule-for-ingestion-description": "可设置每小时、每天或每周的计划,时区为 UTC",
|
||||||
"scheduled-run-every": "计划每次运行",
|
"scheduled-run-every": "计划每次运行",
|
||||||
"scopes-comma-separated": "范围值逗号分隔",
|
"scopes-comma-separated": "范围值逗号分隔",
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
|
import { sortBy } from 'lodash';
|
||||||
import {
|
import {
|
||||||
AsyncFetchListValues,
|
AsyncFetchListValues,
|
||||||
AsyncFetchListValuesResult,
|
AsyncFetchListValuesResult,
|
||||||
@ -490,42 +491,29 @@ class AdvancedSearchClassBase {
|
|||||||
entitySearchIndex = [SearchIndex.TABLE]
|
entitySearchIndex = [SearchIndex.TABLE]
|
||||||
): Fields {
|
): Fields {
|
||||||
let configs: Fields = {};
|
let configs: Fields = {};
|
||||||
|
const configIndexMapping: Partial<Record<SearchIndex, Fields>> = {
|
||||||
|
[SearchIndex.TABLE]: this.tableQueryBuilderFields,
|
||||||
|
[SearchIndex.PIPELINE]: this.pipelineQueryBuilderFields,
|
||||||
|
[SearchIndex.DASHBOARD]: this.dashboardQueryBuilderFields,
|
||||||
|
[SearchIndex.TOPIC]: this.topicQueryBuilderFields,
|
||||||
|
[SearchIndex.MLMODEL]: this.mlModelQueryBuilderFields,
|
||||||
|
[SearchIndex.CONTAINER]: this.containerQueryBuilderFields,
|
||||||
|
[SearchIndex.SEARCH_INDEX]: this.searchIndexQueryBuilderFields,
|
||||||
|
[SearchIndex.DASHBOARD_DATA_MODEL]: this.dataModelQueryBuilderFields,
|
||||||
|
[SearchIndex.ALL]: {
|
||||||
|
...this.tableQueryBuilderFields,
|
||||||
|
...this.pipelineQueryBuilderFields,
|
||||||
|
...this.dashboardQueryBuilderFields,
|
||||||
|
...this.topicQueryBuilderFields,
|
||||||
|
...this.mlModelQueryBuilderFields,
|
||||||
|
...this.containerQueryBuilderFields,
|
||||||
|
...this.searchIndexQueryBuilderFields,
|
||||||
|
...this.dataModelQueryBuilderFields,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
entitySearchIndex.forEach((index) => {
|
entitySearchIndex.forEach((index) => {
|
||||||
switch (index) {
|
configs = { ...configs, ...(configIndexMapping[index] ?? {}) };
|
||||||
case SearchIndex.TABLE:
|
|
||||||
configs = { ...configs, ...this.tableQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.PIPELINE:
|
|
||||||
configs = { ...configs, ...this.pipelineQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.DASHBOARD:
|
|
||||||
configs = { ...configs, ...this.dashboardQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.TOPIC:
|
|
||||||
configs = { ...configs, ...this.topicQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.MLMODEL:
|
|
||||||
configs = { ...configs, ...this.mlModelQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.CONTAINER:
|
|
||||||
configs = { ...configs, ...this.containerQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.SEARCH_INDEX:
|
|
||||||
configs = { ...configs, ...this.searchIndexQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SearchIndex.DASHBOARD_DATA_MODEL:
|
|
||||||
configs = { ...configs, ...this.dataModelQueryBuilderFields };
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return configs;
|
return configs;
|
||||||
@ -558,11 +546,16 @@ class AdvancedSearchClassBase {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
const fieldsConfig = {
|
||||||
...this.getCommonConfig({ entitySearchIndex, tierOptions }),
|
...this.getCommonConfig({ entitySearchIndex, tierOptions }),
|
||||||
...(shouldAddServiceField ? serviceQueryBuilderFields : {}),
|
...(shouldAddServiceField ? serviceQueryBuilderFields : {}),
|
||||||
...this.getEntitySpecificQueryBuilderFields(entitySearchIndex),
|
...this.getEntitySpecificQueryBuilderFields(entitySearchIndex),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Sort the fields according to the label
|
||||||
|
const sortedFieldsConfig = sortBy(Object.entries(fieldsConfig), '1.label');
|
||||||
|
|
||||||
|
return Object.fromEntries(sortedFieldsConfig);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -12,11 +12,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Typography } from 'antd';
|
import { Typography } from 'antd';
|
||||||
|
import { ExpandableConfig } from 'antd/lib/table/interface';
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
import { isUndefined, startCase } from 'lodash';
|
import { isUndefined, startCase } from 'lodash';
|
||||||
import { ServiceTypes } from 'Models';
|
import { ServiceTypes } from 'Models';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ErrorPlaceHolder from '../components/common/ErrorWithPlaceholder/ErrorPlaceHolder';
|
import ErrorPlaceHolder from '../components/common/ErrorWithPlaceholder/ErrorPlaceHolder';
|
||||||
|
import ConnectionStepCard from '../components/common/TestConnection/ConnectionStepCard/ConnectionStepCard';
|
||||||
import { getServiceDetailsPath } from '../constants/constants';
|
import { getServiceDetailsPath } from '../constants/constants';
|
||||||
import {
|
import {
|
||||||
DATA_INSIGHTS_PIPELINE_DOCS,
|
DATA_INSIGHTS_PIPELINE_DOCS,
|
||||||
@ -37,7 +39,10 @@ import { ELASTIC_SEARCH_RE_INDEX_PAGE_TABS } from '../enums/ElasticSearch.enum';
|
|||||||
import { FormSubmitType } from '../enums/form.enum';
|
import { FormSubmitType } from '../enums/form.enum';
|
||||||
import { PipelineType } from '../generated/api/services/ingestionPipelines/createIngestionPipeline';
|
import { PipelineType } from '../generated/api/services/ingestionPipelines/createIngestionPipeline';
|
||||||
import { HiveMetastoreConnection as Connection } from '../generated/entity/services/databaseService';
|
import { HiveMetastoreConnection as Connection } from '../generated/entity/services/databaseService';
|
||||||
import { IngestionPipeline } from '../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
import {
|
||||||
|
IngestionPipeline,
|
||||||
|
StepSummary,
|
||||||
|
} from '../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
||||||
import { Connection as MetadataConnection } from '../generated/entity/services/metadataService';
|
import { Connection as MetadataConnection } from '../generated/entity/services/metadataService';
|
||||||
import { SearchSourceAlias } from '../interface/search.interface';
|
import { SearchSourceAlias } from '../interface/search.interface';
|
||||||
import { DataObj, ServicesType } from '../interface/service.interface';
|
import { DataObj, ServicesType } from '../interface/service.interface';
|
||||||
@ -357,3 +362,34 @@ export const getSuccessMessage = (
|
|||||||
</Typography.Text>
|
</Typography.Text>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getExpandableStatusRow = (
|
||||||
|
expandedKeys: Array<string>
|
||||||
|
): ExpandableConfig<StepSummary> => ({
|
||||||
|
expandedRowRender: (record) => {
|
||||||
|
return (
|
||||||
|
record.failures?.map((failure) => (
|
||||||
|
<ConnectionStepCard
|
||||||
|
isTestingConnection={false}
|
||||||
|
key={failure.name}
|
||||||
|
testConnectionStep={{
|
||||||
|
name: failure.name,
|
||||||
|
mandatory: false,
|
||||||
|
description: failure.error,
|
||||||
|
}}
|
||||||
|
testConnectionStepResult={{
|
||||||
|
name: failure.name,
|
||||||
|
passed: false,
|
||||||
|
mandatory: false,
|
||||||
|
message: failure.error,
|
||||||
|
errorLog: failure.stackTrace,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)) ?? []
|
||||||
|
);
|
||||||
|
},
|
||||||
|
indentSize: 0,
|
||||||
|
expandIcon: () => null,
|
||||||
|
expandedRowKeys: expandedKeys,
|
||||||
|
rowExpandable: (record) => (record.failures?.length ?? 0) > 0,
|
||||||
|
});
|
||||||
|
|||||||
@ -301,12 +301,7 @@ export const getEntityIcon = (indexType: string) => {
|
|||||||
case SearchIndex.SEARCH_INDEX:
|
case SearchIndex.SEARCH_INDEX:
|
||||||
case EntityType.SEARCH_SERVICE:
|
case EntityType.SEARCH_SERVICE:
|
||||||
case SearchIndex.SEARCH_SERVICE:
|
case SearchIndex.SEARCH_SERVICE:
|
||||||
return (
|
return <SearchOutlined className="text-sm text-inherit" />;
|
||||||
<SearchOutlined
|
|
||||||
className="text-sm text-inherit"
|
|
||||||
style={{ color: DE_ACTIVE_COLOR }}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
|
|
||||||
case EntityType.DOMAIN:
|
case EntityType.DOMAIN:
|
||||||
case SearchIndex.DOMAIN:
|
case SearchIndex.DOMAIN:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user