doc: add what's new for 1.1 (#12225)
* doc: add what's new for 1.1 * chore: add feature videos * update the login carousel images --------- Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com>
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 1.2 MiB |
@ -12,78 +12,43 @@
|
||||
*/
|
||||
|
||||
import { Carousel } from 'antd';
|
||||
import { CarouselProps, CarouselRef } from 'antd/lib/carousel';
|
||||
import { uniqueId } from 'lodash';
|
||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import React from 'react';
|
||||
import RichTextEditorPreviewer from '../../common/rich-text-editor/RichTextEditorPreviewer';
|
||||
import { FeaturesCarouselProps } from './FeaturesCarousel.interface';
|
||||
|
||||
const FeaturesCarousel = ({ data }: FeaturesCarouselProps) => {
|
||||
const [isDataChange, setIsDataChange] = useState(false);
|
||||
const sliderRef = useRef<CarouselRef | null>(null);
|
||||
|
||||
const FEATURES_CAROUSEL_SETTINGS = useMemo(
|
||||
() =>
|
||||
({
|
||||
dots: {
|
||||
className: 'carousel-dots testid-dots-button',
|
||||
},
|
||||
autoplay: true,
|
||||
prefixCls: 'features-carousel',
|
||||
infinite: true,
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1,
|
||||
beforeChange: (current: number) => {
|
||||
if (current >= data.length) {
|
||||
setIsDataChange(true);
|
||||
} else {
|
||||
setIsDataChange(false);
|
||||
}
|
||||
},
|
||||
onReInit: () => {
|
||||
if (isDataChange) {
|
||||
setTimeout(() => {
|
||||
sliderRef?.current?.goTo(0);
|
||||
}, 200);
|
||||
}
|
||||
},
|
||||
} as CarouselProps),
|
||||
[sliderRef, setIsDataChange, data, isDataChange]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
setIsDataChange(true);
|
||||
}, [data]);
|
||||
|
||||
return (
|
||||
<Carousel ref={sliderRef} {...FEATURES_CAROUSEL_SETTINGS}>
|
||||
{data.map((d) => (
|
||||
<div className="tw-px-1" key={uniqueId()}>
|
||||
<p className="tw-text-sm tw-font-medium tw-mb-2">{d.title}</p>
|
||||
<div className="tw-text-sm tw-mb-3">
|
||||
<RichTextEditorPreviewer
|
||||
enableSeeMoreVariant={false}
|
||||
markdown={d.description}
|
||||
/>
|
||||
<div className="feature-carousal-container">
|
||||
<Carousel autoplay dots autoplaySpeed={3000} easing="ease-in-out">
|
||||
{data.map((d) => (
|
||||
<div className="tw-px-1" key={uniqueId()}>
|
||||
<p className="tw-text-sm tw-font-medium tw-mb-2">{d.title}</p>
|
||||
<div className="tw-text-sm tw-mb-3">
|
||||
<RichTextEditorPreviewer
|
||||
enableSeeMoreVariant={false}
|
||||
markdown={d.description}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
{d.path ? (
|
||||
d.isImage ? (
|
||||
<img alt="feature" className="tw-w-full" src={d.path} />
|
||||
) : (
|
||||
<iframe
|
||||
allowFullScreen
|
||||
className="tw-w-full"
|
||||
frameBorder={0}
|
||||
height={457}
|
||||
src={d.path}
|
||||
/>
|
||||
)
|
||||
) : null}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{d.path ? (
|
||||
d.isImage ? (
|
||||
<img alt="feature" className="tw-w-full" src={d.path} />
|
||||
) : (
|
||||
<iframe
|
||||
allowFullScreen
|
||||
className="tw-w-full"
|
||||
frameBorder={0}
|
||||
height={457}
|
||||
src={d.path}
|
||||
/>
|
||||
)
|
||||
) : null}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</Carousel>
|
||||
))}
|
||||
</Carousel>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -55,3 +55,25 @@
|
||||
color: @white;
|
||||
}
|
||||
}
|
||||
|
||||
.feature-carousal-container {
|
||||
position: relative;
|
||||
width: auto;
|
||||
height: auto;
|
||||
.slick-dots.slick-dots-bottom {
|
||||
.slick-active {
|
||||
button {
|
||||
background-color: @primary-color;
|
||||
width: inherit;
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
button {
|
||||
background-color: @primary-color;
|
||||
opacity: 0.7;
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Modal, Typography } from 'antd';
|
||||
import { Col, Modal, Row, Typography } from 'antd';
|
||||
import classNames from 'classnames';
|
||||
import { CookieStorage } from 'cookie-storage';
|
||||
import { t } from 'i18next';
|
||||
@ -83,10 +83,8 @@ export const WhatsNewModal: FunctionComponent<WhatsNewModalProps> = ({
|
||||
</Typography.Text>
|
||||
}
|
||||
width={1200}>
|
||||
<div className="flex w-auto h-full h-min-75">
|
||||
<div
|
||||
className="border-r-2 p-x-md p-y-md border-separate"
|
||||
style={{ width: '14%' }}>
|
||||
<Row className="w-auto h-full h-min-75">
|
||||
<Col className="border-r-2 p-x-md p-y-md border-separate" span={3}>
|
||||
<div className="d-flex flex-col-reverse">
|
||||
{WHATS_NEW.map((d) => (
|
||||
<div className="flex items-center justify-end mb-2.5" key={d.id}>
|
||||
@ -106,8 +104,8 @@ export const WhatsNewModal: FunctionComponent<WhatsNewModalProps> = ({
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="overflow-y-auto" style={{ width: '86%' }}>
|
||||
</Col>
|
||||
<Col className="overflow-y-auto" span={21}>
|
||||
<div className="p-t-md px-10 ">
|
||||
<div className="flex justify-between items-center p-b-sm">
|
||||
<div>
|
||||
@ -159,8 +157,8 @@ export const WhatsNewModal: FunctionComponent<WhatsNewModalProps> = ({
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
@ -18,9 +18,9 @@ import sqlLineageImg from '../../../assets/img/ImprovedSQLLineage.png';
|
||||
import ingestionFramework from '../../../assets/img/IngestionFramework.png';
|
||||
import tagCategoryImg from '../../../assets/img/TagCategory.png';
|
||||
|
||||
export const LATEST_VERSION_ID = 15;
|
||||
export const LATEST_VERSION_ID = 16;
|
||||
|
||||
export const COOKIE_VERSION = 'VERSION_1_0_2'; // To be changed with each release.
|
||||
export const COOKIE_VERSION = 'VERSION_1_1'; // To be changed with each release.
|
||||
|
||||
// for youtube video make isImage = false and path = {video embed id}
|
||||
// embed:- youtube video => share => click on embed and take {url with id} from it
|
||||
@ -874,4 +874,65 @@ export const WHATS_NEW = [
|
||||
`,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
version: 'v1.1',
|
||||
description: 'Released on 29th Jun 2023.',
|
||||
features: [
|
||||
{
|
||||
title: 'OpenMetadata UI Makeover',
|
||||
description:
|
||||
'Experience the revamped OpenMetadata UI, designed to enhance user experience with a simplified Landing Page to make the adoption easier for new users. The simplified Explore view has an improved asset details section. The filtering left panel is now part of the filtering selection at the top. The Lineage View now supports column pagination and filtering',
|
||||
isImage: false,
|
||||
path: 'https://www.youtube.com/embed/fMSRi6Azj5I',
|
||||
},
|
||||
{
|
||||
title: 'Data Quality Redesigned',
|
||||
description:
|
||||
'OpenMetadata has redesigned Data Quality Tests to improve the end-user experience and prevent unnecessary duplication of tests. Data Quality Tests now have a Resolution Field. Users can acknowledge any errors, and once failures are resolved, they can document the resolution directly in the OpenMetadata UI.',
|
||||
isImage: false,
|
||||
path: 'https://www.youtube.com/embed/J-v2ySfOgEI',
|
||||
},
|
||||
{
|
||||
title: 'PII Masking',
|
||||
description:
|
||||
'PII Masking capabilities have been introduced in OpenMetadata in the 1.1 Release. Admins and Asset Owners can view PII data, but other users cannot. PII sensitive sample data for Tables, Topics, Profiler Metrics, Test Cases, and Queries will be masked. This feature goes perfectly with the Auto-Tagging capability in OpenMetadata.',
|
||||
isImage: false,
|
||||
path: 'https://www.youtube.com/embed/Lomg5G_-JQE',
|
||||
},
|
||||
],
|
||||
changeLogs: {
|
||||
'UI Improvements': `- Simplified Landing Page to make the adoption easier for new users. We'll keep iterating on improving the UX for first-time users.
|
||||
- Simplified Explore view with improved asset details section. The filtering left panel is now part of the filtering selection at the top.
|
||||
- Lineage View now supports column pagination and filtering.
|
||||
- Views show their DDL on the Table details page.
|
||||
`,
|
||||
'Data Quality': `- Redesigned [Data Quality Tests](https://github.com/open-metadata/OpenMetadata/issues/11592) to improve the end-user experience and prevent unnecessary duplication of tests.
|
||||
- Data Quality Tests now have a Resolution Field. Users can acknowledge any errors, and once failures are resolved, they can document the resolution directly in the OpenMetadata UI.
|
||||
- Fixed a large number of connections being opened by the profiler workflow.
|
||||
- Improved Customer SQL test to allow users to set a threshold for the expected number of rows to be returned.
|
||||
- Added multi-project support for the BigQuery Profiler.
|
||||
- Fetch table metrics from system tables when information is available.
|
||||
- Improved Snowflake Profiling performance of System Metrics.`,
|
||||
Ingestion: `- Improved [SQL Lineage Parsing](https://github.com/open-metadata/OpenMetadata/issues/7427). We continue to share the OSS love by contributing to [sqllineage](https://github.com/reata/sqllineage) and [sqlfluff](https://sqlfluff.com/), the base libraries for our lineage features.
|
||||
- Improved LookML metadata ingestion, with added support for projects based on Bitbucket.
|
||||
- dbt bug fixes, added support for database, schema and table filtering and lineage management for ephemeral models.
|
||||
- PowerBI metadata ingestion now supports Reports and Dataset lineage from multiple workspaces.
|
||||
- Improved Tableau Data Models ingestion now ingests Data Sources.
|
||||
- AWS Glue support for Partition Column Details.
|
||||
- New Oracle lineage and usage workflows based on the query history.
|
||||
- IAM role-based authentication for MySQL and Postgres RDS databases.
|
||||
- Fixed dashboard description wrongly reported description as completed in the Data Insight.
|
||||
`,
|
||||
Connectors: `- New [Spline](https://absaoss.github.io/spline/) Connector to extract metadata and lineage from Spark jobs. Regardless of where the Spark execution happens, if you have configured the Spline Agent, we can send Spark metadata to OpenMetadata.
|
||||
- New [SAP Hana](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html) Connector, our first integration to the SAP ecosystem.
|
||||
- New [MongoDB](https://www.mongodb.com/) Connector, extracting Collections as Tables.
|
||||
- Added support for [Databricks Unity Catalog](https://www.databricks.com/product/unity-catalog) for metadata and lineage extraction. If your Databricks instance supports the Unity Catalog, you can enable it in the Connection Details section to use this metadata extraction method instead of getting metadata out of the metastore and history APIs.`,
|
||||
Backend: `- PII masking of Sample data for Tables and Topics, Profiler Metrics, Test Cases, and Queries for users that are not admins or owners of the assets. In 1.2, we'll iterate on this logic to add Roles & Policies support for masking PII data.
|
||||
- Name and FQN hashing of data in the database. This reduces the length of the data being stored and indexed, allowing us for longer FQNs in the Metadata Standard.
|
||||
- Improved monitoring of the Pipeline Service Client health. Any status errors between the OpenMetadata server and the Pipeline Service Client are now surfaced in a Prometheus metric *pipelineServiceClientStatus_counter_total*
|
||||
- Added AWS OpenSearch client-specific support. This allows us to update the Elasticsearch version support up to 7.16.
|
||||
`,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||