in src/components/download-form/download-form-all-release.tsx [13:219]
export default function DownloadFormAllRelease(props: DownloadFormProps) {
const { versions } = props;
const [form] = useForm();
const version = useWatch('version', form) || [versions[0].value, versions[0].children[0].value];
const architecture = useWatch('architecture', form);
const tarBall = useWatch('tarBall', form);
function showArch(version: string) {
const SUPPORTED_VERSION = '>1.2.3';
const versionNumber = version.match(/[0-9].[0-9].[0-9]*/)?.[0] || '0.0.0';
if (semver.satisfies(versionNumber, SUPPORTED_VERSION)) {
return true;
} else {
return false;
}
}
const getOptions = (version: string[]) => {
const currentParentVersion = versions.find(item => form.getFieldValue('version')[0] === item.value).children;
const currentVersion = currentParentVersion.find(item => form.getFieldValue('version')[1] === item.value);
return currentVersion.items;
};
const getVersionLinkByKeys = (version, cpu, type) => {
const versionNode = versions.find(item => item.value === version);
const node = versionNode.children.find(item => item.value === cpu);
return node?.[type] || null;
};
function getDownloadLinkByCard(params: { version: string[]; cpu: string; tarBall: string; type: string }) {
const parentVersion = versions.find(item => item.value === params.version[0]);
const childVersion = parentVersion.children.find(item => item.value === params.version[1]);
if (!showArch(params.version[1])) {
return childVersion.source;
}
const node = childVersion.items.find(item => item.value === params.cpu);
if (tarBall === DownloadTypeEnum.Binary) {
return node[params.type];
} else {
if (params.type === 'gz') {
return `${node.source}apache-doris-${node.version}-src.tar.gz`;
} else {
return `${node.source}apache-doris-${node.version}-src.tar.gz.${params.type}`;
}
}
}
useEffect(() => {
if (Array.isArray(version) && showArch(version[1])) {
const currentParentVersion = versions.find(
item => form.getFieldValue('version')[0] === item.value,
).children;
const currentVersion = currentParentVersion.find(item => form.getFieldValue('version')[1] === item.value);
form.setFieldValue('architecture', currentVersion.items[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({
version: version,
cpu: architecture,
tarBall: tarBall,
type: 'gz',
});
window.open(url, '_blank');
return;
}}
initialValues={{
version: [versions[0].value, versions[0].children[0].value],
tarBall: DownloadTypeEnum.Binary,
}}
onValuesChange={(changedValues, values) => props?.onValuesChange(values)}
>
<Form.Item name="version" rules={[{ required: true }]}>
<FormSelect
placeholder="Version"
label="Version"
isCascader={true}
displayRender={label => {
return label.length > 0 ? label[label.length - 1] : '';
}}
options={versions}
/>
</Form.Item>
{Array.isArray(version) && showArch(version[1]) && (
<Form.Item noStyle shouldUpdate>
{({ getFieldValue }) => (
<Form.Item name="architecture" rules={[{ required: true }]}>
<FormSelect
placeholder="Architecture"
label="Architecture"
isCascader={false}
options={getOptions(getFieldValue('version'))}
/>
</Form.Item>
)}
</Form.Item>
)}
{Array.isArray(version) && showArch(version[1]) && (
<Form.Item noStyle shouldUpdate>
{({ getFieldValue }) => (
<Form.Item name="tarBall" rules={[{ required: true }]}>
<FormSelect
placeholder="Tarball"
label="Tarball"
isCascader={false}
options={[
{
label: DownloadTypeEnum.Binary,
value: DownloadTypeEnum.Binary,
},
{
label: DownloadTypeEnum.Source,
value: DownloadTypeEnum.Source,
},
]}
/>
</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>
{Array.isArray(version) && showArch(version[1]) && (
<>
<div
className="flex cursor-pointer text-[#444FD9] items-center mt-4 justify-center"
onClick={() => {
const url = getDownloadLinkByCard({
version: version,
cpu: architecture,
tarBall: tarBall,
type: 'gz',
});
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>
<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({
version: version,
cpu: architecture,
tarBall: tarBall,
type: 'asc',
});
window.open(url, '_blank');
}}
>
ASC
</div>
<div
className="inline-flex items-center ml-4 text-[#8592A6] hover:text-[#444FD9] cursor-pointer hover:underline"
onClick={() => {
const url = getDownloadLinkByCard({
version: version,
cpu: architecture,
tarBall: tarBall,
type: 'sha512',
});
window.open(url, '_blank');
}}
>
SHA-512
</div>
</div>
</>
)}
</Form>
</div>
);
}