This is an automated email from the ASF dual-hosted git repository.

luzhijing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 79502ab9d4b (feat) add doris ecosystem download (#412)
79502ab9d4b is described below

commit 79502ab9d4ba0af028ebcfd87360c2234896a66a
Author: song7788q <songp...@gmail.com>
AuthorDate: Thu Mar 7 14:36:32 2024 +0800

    (feat) add doris ecosystem download (#412)
---
 .../download-form/download-form-all-release.tsx    |  12 +-
 .../download-form/download-form-tools.tsx          | 151 +++++++++++++++++++++
 src/constant/download.data.ts                      |  99 ++++++++++++++
 src/pages/download/index.scss                      |  17 +--
 src/pages/download/index.tsx                       |  96 ++++++++++---
 static/js/custom-script.js                         |  19 ++-
 6 files changed, 355 insertions(+), 39 deletions(-)

diff --git a/src/components/download-form/download-form-all-release.tsx 
b/src/components/download-form/download-form-all-release.tsx
index 37f7148afcf..a3da4a999f9 100644
--- a/src/components/download-form/download-form-all-release.tsx
+++ b/src/components/download-form/download-form-all-release.tsx
@@ -69,7 +69,7 @@ export default function DownloadFormAllRelease(props: 
DownloadFormProps) {
 
     return (
         <div className="rounded-lg border border-b-[0.375rem] border-[#444FD9] 
px-8 pt-[3.125rem] pb-[2.1875rem]">
-            <div className="mb-8 text-xl font-medium">Available downloads</div>
+            <div className="mb-8 text-xl font-medium text-left">Downloads</div>
             <Form
                 form={form}
                 onFinish={val => {
@@ -91,7 +91,7 @@ export default function DownloadFormAllRelease(props: 
DownloadFormProps) {
                 <Form.Item name="version" rules={[{ required: true }]}>
                     <FormSelect
                         placeholder="Version"
-                        label="version"
+                        label="Version"
                         isCascader={true}
                         displayRender={label => {
                             return label.length > 0 ? label[label.length - 1] 
: '';
@@ -145,7 +145,7 @@ export default function DownloadFormAllRelease(props: 
DownloadFormProps) {
                 {Array.isArray(version) && showArch(version[1]) && (
                     <>
                         <div
-                            className="flex cursor-pointer text-[#444FD9] 
items-center mt-7 justify-center"
+                            className="flex cursor-pointer text-[#444FD9] 
items-center mt-4 justify-center"
                             onClick={() => {
                                 const url = getDownloadLinkByCard({
                                     version: version,
@@ -182,9 +182,9 @@ export default function DownloadFormAllRelease(props: 
DownloadFormProps) {
                                 />
                             </svg>
                         </div>
-                        <div className="flex justify-center mt-[1.5rem]">
+                        <div className="flex justify-center mt-4">
                             <div
-                                className="inline-flex items-center 
text-[#444FD9] cursor-pointer hover:underline"
+                                className="inline-flex items-center 
text-[#8592A6] cursor-pointer hover:underline hover:text-[#444FD9]"
                                 onClick={() => {
                                     const url = getDownloadLinkByCard({
                                         version: version,
@@ -198,7 +198,7 @@ export default function DownloadFormAllRelease(props: 
DownloadFormProps) {
                                 ASC
                             </div>
                             <div
-                                className="inline-flex items-center ml-4 
text-[#444FD9] cursor-pointer hover:underline"
+                                className="inline-flex items-center ml-4 
text-[#8592A6] hover:text-[#444FD9] cursor-pointer hover:underline"
                                 onClick={() => {
                                     const url = getDownloadLinkByCard({
                                         version: version,
diff --git a/src/components/download-form/download-form-tools.tsx 
b/src/components/download-form/download-form-tools.tsx
new file mode 100644
index 00000000000..86bd7d545ee
--- /dev/null
+++ b/src/components/download-form/download-form-tools.tsx
@@ -0,0 +1,151 @@
+import React, { useEffect, useMemo } from 'react';
+import { Form, message } from 'antd';
+import { Option } from '@site/src/constant/download.data';
+import FormSelect from '../form-select/form-select';
+import copy from 'copy-to-clipboard';
+import { ToolsEnum } from '@site/src/constant/download.data';
+import { useForm, useWatch } from 'antd/es/form/Form';
+import { ExternalLinkIcon } from '../Icons/external-link-icon';
+
+interface DownloadFormToolsProps {
+    data: Option[];
+}
+export default function DownloadFormTools(props: DownloadFormToolsProps) {
+    const { data } = props;
+    const [form] = useForm();
+    const tool = useWatch('tool', form);
+    const architecture = useWatch('architecture', form);
+    const version = useWatch('version', form);
+
+    const getOptions = useMemo(() => {
+        if (!tool) return [];
+        return data.find(item => tool === item.value).children;
+    }, [tool]);
+
+    const getArchitectureOptions = useMemo(() => {
+        if (!tool || !version) return [];
+        const current = data.find(item => item.value === tool).children;
+        return current.find(item => version === item.value).children;
+    }, [version]);
+
+    const getDownloadLinkByCard = (source?: boolean) => {
+        const currentTool = data.find(item => tool === item.value).children;
+        if (!architecture) {
+            return currentTool.find(item => version === item.value).gz;
+        } else {
+            if (source) {
+                return currentTool.find(item => version === item.value).source;
+            } else {
+                const currentVersion = currentTool.find(item => version === 
item.value).children;
+                return currentVersion.find(item => architecture === 
item.value).gz;
+            }
+        }
+    };
+
+    useEffect(() => {
+        if (tool) {
+            form.setFieldValue('version', getOptions[0].value);
+        }
+    }, [tool]);
+
+    useEffect(() => {
+        if (version && getArchitectureOptions?.length > 0) {
+            form.setFieldValue('architecture', 
getArchitectureOptions[0].value);
+        }
+    }, [version]);
+
+    return (
+        <div className="rounded-lg border border-b-[0.375rem] border-[#444FD9] 
px-8 pt-[3.125rem] pb-[2.1875rem]">
+            <div className="mb-8 text-xl font-medium text-left">Downloads</div>
+            <Form
+                form={form}
+                onFinish={val => {
+                    const url = getDownloadLinkByCard();
+                    window.open(url, '_blank');
+                }}
+                initialValues={{
+                    tool: data[0]?.value,
+                    version: '',
+                    architecture: '',
+                }}
+            >
+                <Form.Item name="tool" rules={[{ required: true }]}>
+                    <FormSelect placeholder="Tools" label="Tools" 
isCascader={false} options={data} />
+                </Form.Item>
+                <Form.Item noStyle shouldUpdate>
+                    {({ getFieldValue }) =>
+                        getFieldValue('tool') === ToolsEnum.StreamLoader ? (
+                            <>
+                                <Form.Item name="version" rules={[{ required: 
true }]}>
+                                    <FormSelect
+                                        placeholder="Version"
+                                        label="Version"
+                                        isCascader={false}
+                                        options={getOptions}
+                                    />
+                                </Form.Item>
+                                <Form.Item name="architecture" rules={[{ 
required: true }]}>
+                                    <FormSelect
+                                        placeholder="Architecture"
+                                        label="Architecture"
+                                        isCascader={false}
+                                        options={getArchitectureOptions}
+                                    />
+                                </Form.Item>
+                            </>
+                        ) : (
+                            <Form.Item name="version" rules={[{ required: true 
}]}>
+                                <FormSelect
+                                    placeholder="Version"
+                                    label="Version"
+                                    isCascader={false}
+                                    options={getOptions}
+                                />
+                            </Form.Item>
+                        )
+                    }
+                </Form.Item>
+                <Form.Item style={{ marginBottom: 0 }} colon={false}>
+                    <button type="submit" className="button-primary w-full 
text-lg">
+                        Download
+                    </button>
+                </Form.Item>
+                <div
+                    className="flex cursor-pointer text-[#444FD9] items-center 
mt-4 justify-center"
+                    onClick={() => {
+                        const url = getDownloadLinkByCard();
+                        copy(url);
+                        message.success('Copy Successfully!');
+                    }}
+                >
+                    <span className="mr-2">Copy link</span>
+                    <svg xmlns="http://www.w3.org/2000/svg"; width="16" 
height="16" viewBox="0 0 16 16" fill="none">
+                        <rect x="2.5" y="5.5" width="8" height="8" 
rx="0.564706" stroke="#444FD9" strokeWidth="1.2" />
+                        <path
+                            fillRule="evenodd"
+                            clipRule="evenodd"
+                            d="M6.0999 1.89996C5.43716 1.89996 4.8999 2.43722 
4.8999 3.09996V5.49995H6.0999V3.09996L12.8999 
3.09996V9.89996H10.5V11.1H12.8999C13.5626 11.1 14.0999 10.5627 14.0999 
9.89996V3.09996C14.0999 2.43722 13.5626 1.89996 12.8999 1.89996H6.0999Z"
+                            fill="#444FD9"
+                        />
+                    </svg>
+                </div>
+                {tool === ToolsEnum.StreamLoader && (
+                    <div className="flex justify-center mt-4">
+                        <div
+                            className="inline-flex items-center text-[#8592A6] 
cursor-pointer hover:underline hover:text-[#444FD9]"
+                            onClick={() => {
+                                const url = getDownloadLinkByCard(true);
+                                window.open(url, '_blank');
+                            }}
+                        >
+                            Source code
+                            <div className="ml-1">
+                                <ExternalLinkIcon />
+                            </div>
+                        </div>
+                    </div>
+                )}
+            </Form>
+        </div>
+    );
+}
diff --git a/src/constant/download.data.ts b/src/constant/download.data.ts
index 08971f9d462..ab8fe9b69e3 100644
--- a/src/constant/download.data.ts
+++ b/src/constant/download.data.ts
@@ -21,6 +21,12 @@ export enum SuffixEnum {
     SHA512 = '.tar.gz.sha512',
 }
 
+export enum ToolsEnum {
+    Flink = 'Flink Doris Connector',
+    Spark = 'Spark Doris Connector',
+    StreamLoader = 'Doris Streamloader',
+}
+
 export const ORIGIN = 
'https://apache-doris-releases.oss-accelerate.aliyuncs.com/';
 export enum VersionEnum {
     Latest = '2.0.5',
@@ -893,6 +899,99 @@ export const OLD_VERSIONS: Option[] = [
     },
 ];
 
+export const TOOL_VERSIONS = [
+    {
+        label: ToolsEnum.Flink,
+        value: ToolsEnum.Flink,
+        children: [
+            {
+                label: '1.5.2',
+                value: '1.5.2',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.5.2.tar.gz',
+            },
+            {
+                label: '1.4.0',
+                value: '1.4.0',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.4.0.tar.gz',
+            },
+            {
+                label: '1.3.0',
+                value: '1.3.0',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.16-1.3.0.tar.gz',
+            },
+            {
+                label: '1.2.1',
+                value: '1.2.1',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.15-1.2.1.tar.gz',
+            },
+            {
+                label: '1.1.1',
+                value: '1.1.1',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.14_2.12-1.1.1.tar.gz',
+            },
+            {
+                label: '1.0.3',
+                value: '1.0.3',
+                gz: 
'https://github.com/apache/doris-flink-connector/archive/refs/tags/1.13_2.11-1.0.3.tar.gz',
+            },
+        ],
+    },
+    {
+        label: ToolsEnum.Spark,
+        value: ToolsEnum.Spark,
+        children: [
+            {
+                label: '1.3.1',
+                value: '1.3.1',
+                gz: 
'https://github.com/apache/doris-spark-connector/archive/refs/tags/1.3.1.tar.gz',
+            },
+            {
+                label: '1.2.0',
+                value: '1.2.0',
+                gz: 
'https://github.com/apache/doris-spark-connector/archive/refs/tags/1.2.0.tar.gz',
+            },
+            {
+                label: '1.1.0',
+                value: '3.2_2.12-1.1.0',
+                gz: 
'https://github.com/apache/doris-spark-connector/archive/refs/tags/3.2_2.12-1.1.0.tar.gz',
+            },
+            {
+                label: '1.0.1 (For Spark 3.1)',
+                value: '3.1_2.12-1.0.1',
+                gz: 
'https://github.com/apache/doris-spark-connector/archive/refs/tags/3.1_2.12-1.0.1.tar.gz',
+            },
+            {
+                label: '1.0.1 (For Spark 2.x)',
+                value: '2.3_2.11-1.0.1',
+                gz: 
'https://github.com/apache/doris-spark-connector/archive/refs/tags/2.3_2.11-1.0.1.tar.gz',
+            },
+        ],
+    },
+    {
+        label: ToolsEnum.StreamLoader,
+        value: ToolsEnum.StreamLoader,
+        children: [
+            {
+                label: '1.0.1',
+                value: '1.0.1',
+                children: [
+                    {
+                        label: CPUEnum.X64,
+                        value: CPUEnum.X64,
+                        gz: 
'https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-streamloader-1.0.1-bin-x64.tar.xz',
+                    },
+                    {
+                        label: CPUEnum.ARM64,
+                        value: CPUEnum.ARM64,
+                        gz: 
'https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-streamloader-1.0.1-bin-arm64.tar.xz',
+                    },
+                ],
+                source: 
'https://github.com/apache/doris-streamloader/archive/refs/tags/1.0.1.tar.gz',
+            },
+        ],
+    },
+];
+
 export const RUN_ANYWHERE = [
     {
         title: 'Doris on bare metal',
diff --git a/src/pages/download/index.scss b/src/pages/download/index.scss
index d0f41c0b8de..ff191d11145 100644
--- a/src/pages/download/index.scss
+++ b/src/pages/download/index.scss
@@ -1,8 +1,7 @@
 .run-anywhere {
-    background: #F7F9FE;
+    background: #f7f9fe;
 }
 .download {
-
     a {
         transition: all 0.3s;
 
@@ -30,9 +29,9 @@
 
     &-box {
         padding: 3.125rem;
-        box-shadow: 10px 12px 38px rgba(33, 39, 116, 0.07);
-        border-radius: 4px;
+        border-radius: 8px;
         background-color: var(--global-colors-white);
+        border: #dfe5f0 solid 1px;
 
         .download-type {
             display: flex;
@@ -95,7 +94,6 @@
 
                     .inner {
                         margin: 0.3125rem;
-                        background-color: #f7faff;
                         width: calc(100% - 0.625rem);
                         color: var(--ifm-color-primary);
 
@@ -114,7 +112,7 @@
             }
             &.all-in-one {
                 .theme-code-block {
-                    font-size: 0.875rem ;
+                    font-size: 0.875rem;
                     padding-left: 2rem;
                     position: relative;
                     &:before {
@@ -314,7 +312,7 @@
         align-items: flex-start;
         gap: 48px;
         border-radius: 8px;
-        border: 1px solid var(---N5, #DFE5F0);
+        border: 1px solid var(---N5, #dfe5f0);
 
         .all-download-intro {
             display: flex;
@@ -323,7 +321,7 @@
             align-items: flex-start;
             gap: 32px;
             .all-download-intro-text {
-                color: var(---N1, #1D1D1D);
+                color: var(---N1, #1d1d1d);
                 font-size: 16px;
                 font-style: normal;
                 line-height: 26px; /* 162.5% */
@@ -345,11 +343,10 @@
         }
     }
     .all-download-note {
-        color: var(---N3, #8592A6);
+        color: var(---N3, #8592a6);
         font-size: 12px;
         font-style: normal;
         line-height: 20px;
         text-align: left;
     }
 }
-
diff --git a/src/pages/download/index.tsx b/src/pages/download/index.tsx
index 2f6bd9c78f4..82923ffedbd 100644
--- a/src/pages/download/index.tsx
+++ b/src/pages/download/index.tsx
@@ -3,7 +3,7 @@ import React, { useEffect, useState, version } from 'react';
 import PageHeader from '@site/src/components/PageHeader';
 import Layout from '@site/src/theme/Layout';
 import DownloadFormAllRelease from 
'@site/src/components/download-form/download-form-all-release';
-import DownloadFormSimple from 
'@site/src/components/download-form/download-form-simple';
+import DownloadFormTools from 
'@site/src/components/download-form/download-form-tools';
 import {
     CPUEnum,
     DORIS_VERSIONS,
@@ -17,8 +17,9 @@ import './index.scss';
 import LinkWithArrow from '../../components/link-arrow';
 import PageColumn from '@site/src/components/PageColumn';
 import clsx from 'clsx';
-import { ALL_VERSIONS, OLD_VERSIONS } from '../../constant/download.data';
+import { ALL_VERSIONS, TOOL_VERSIONS } from '../../constant/download.data';
 import * as semver from 'semver';
+import { CheckedIcon } from '@site/src/components/Icons/checked-icon';
 
 const BINARY_VERSION = [
     { label: `${VersionEnum.Latest} ( Stable )`, value: VersionEnum.Latest },
@@ -117,9 +118,6 @@ export default function Download() {
             <PageHeader className="lg:pt-[5rem] g-white" title="Quick Download 
& Easy Deployment" />
             <section className="quick-download">
                 <PageColumn align="center">
-                    <span className="font-medium" style={{ fontSize: 40 }}>
-                        Quick Download
-                    </span>
                     <div className="download-box">
                         <div className="download-type">
                             <label>
@@ -234,13 +232,16 @@ export default function Download() {
                     </div>
                 </PageColumn>
             </section>
-            <PageColumn>
-                <span
-                    className="font-medium"
-                    style={{ display: 'block', marginTop: 40, fontSize: 40, 
marginBottom: 32 }}
-                >
-                    All Releases
-                </span>
+            <PageColumn
+                title={
+                    <span
+                        className="font-normal"
+                        style={{ display: 'block', lineHeight: '64px', 
marginTop: 40, fontSize: 40 }}
+                    >
+                        Doris All Releases
+                    </span>
+                }
+            >
                 <div className="all-download">
                     <div className="all-download-intro">
                         <div className="all-download-intro-text">
@@ -291,6 +292,69 @@ export default function Download() {
                     </div>
                 </div>
             </PageColumn>
+            <PageColumn
+                title={
+                    <span
+                        className="font-normal"
+                        style={{ display: 'block', lineHeight: '64px', 
marginTop: 40, fontSize: 40 }}
+                    >
+                        Doris Ecosystem
+                    </span>
+                }
+            >
+                <div className="all-download">
+                    <div className="all-download-intro">
+                        <div className="all-download-intro-text">
+                            <div>Streamline integration and data loading with 
Doris tools</div>
+                        </div>
+                        <div className="flex">
+                            <ul>
+                                <li className="mt-2 flex items-center 
space-x-2">
+                                    <CheckedIcon />
+                                    <div className="text-[#4C576C]  
text-base">Flink Doris Connector</div>
+                                </li>
+                                <li className="mt-2 flex items-center 
space-x-2">
+                                    <CheckedIcon />
+                                    <div className="text-[#4C576C]  
text-base">Spark Doris Connector</div>
+                                </li>
+                                <li className="mt-2 flex items-center 
space-x-2">
+                                    <CheckedIcon />
+                                    <div className="text-[#4C576C]  
text-base">Doris Streamloader</div>
+                                </li>
+                            </ul>
+                        </div>
+                        <div>
+                            <LinkWithArrow to="/docs/ecosystem/datax" 
text="More Tools" />
+                        </div>
+                        <div className="all-download-note">
+                            Note: For detailed upgrade precautions, please 
refer to the{' '}
+                            <Link
+                                to="/docs/install/standard-deployment"
+                                style={{
+                                    color: '#444FD9',
+                                    cursor: 'pointer',
+                                }}
+                            >
+                                deployment
+                            </Link>{' '}
+                            manual and cluster{' '}
+                            <Link
+                                style={{
+                                    color: '#444FD9',
+                                    cursor: 'pointer',
+                                }}
+                                
to="/docs/admin-manual/cluster-management/upgrade"
+                            >
+                                upgrade
+                            </Link>{' '}
+                            manual.
+                        </div>
+                    </div>
+                    <div className="all-download-card">
+                        <DownloadFormTools data={TOOL_VERSIONS} />
+                    </div>
+                </div>
+            </PageColumn>
             <a id="runAnywhere" className="scroll-mt-20"></a>
             <div className="run-anywhere bg-[#F7F9FE] pt-[5.5rem] pb-[7.5rem] 
mt-[80px]">
                 <div className="container mx-auto">
@@ -298,8 +362,8 @@ export default function Download() {
                     <ul className="mt-10 grid gap-x-6 gap-y-3 lg:grid-cols-3 
lg:gap-y-0">
                         {RUN_ANYWHERE.map(item =>
                             item.title !== 'Doris on AWS' ? (
-                                <Link
-                                    href={item.link}
+                                <div
+                                    onClick={() => window.open(item.link)}
                                     key={item.title}
                                     className="run-anywhere-card relative 
bg-white flex cursor-pointer flex-col items-center justify-center 
overflow-hidden rounded-lg border-b-4 border-b-[#444FD9] py-[2rem] px-4 
lg:px-[1.5rem] shadow-[inset_0_0_0_1px_#444FD9] hover:no-underline"
                                 >
@@ -308,9 +372,9 @@ export default function Download() {
                                     <div className="flex items-center mt-4 
text-[#444FD9]">
                                         <LinkWithArrow to={item.link} 
text="Learn more" />
                                     </div>
-                                </Link>
+                                </div>
                             ) : (
-                                <section>
+                                <section key={item.title}>
                                     <div className="relative bg-white flex 
cursor-pointer flex-col items-center justify-center overflow-hidden rounded-lg 
border-b-4 border-b-[#444FD9] py-[2rem] px-4 lg:px-[1.5rem] 
shadow-[inset_0_0_0_1px_#444FD9] hover:no-underline">
                                         <div className="text-2xl 
text-[#1D1D1D]">{item.title}</div>
                                         <div className="mt-4 text-base 
text-center text-[#4C576C]">
diff --git a/static/js/custom-script.js b/static/js/custom-script.js
index 4527b14de19..e746900d0bf 100644
--- a/static/js/custom-script.js
+++ b/static/js/custom-script.js
@@ -1,7 +1,12 @@
-<script type="text/javascript">
-    (function(c,l,a,r,i,t,y){
-        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
-        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
-        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
-    })(window, document, "clarity", "script", "kfyqejiz0g");
-</script>
\ No newline at end of file
+(function (c, l, a, r, i, t, y) {
+    c[a] =
+        c[a] ||
+        function () {
+            (c[a].q = c[a].q || []).push(arguments);
+        };
+    t = l.createElement(r);
+    t.async = 1;
+    t.src = 'https://www.clarity.ms/tag/' + i;
+    y = l.getElementsByTagName(r)[0];
+    y.parentNode.insertBefore(t, y);
+})(window, document, 'clarity', 'script', 'kfyqejiz0g');


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to