tachybase_todo/packages/plugins/import/src/client/ImportModal.tsx
chenos 89af2175de
Some features (#979)
* feat: add import client

* feat: add import server

* refactor: change export use library of file-saver

* refactor: upload excel file done

* refactor: upload xls transform

* feat: upload ui done

* feat: exclude unable import fields

* feat: excel file validator done

* feat: import done

* feat: import transform done

* fix: add import plugin in presets

* fix: explain will not output in template what is empty

* fix: config permission

* fix: permission skip

* fix: import password must be string

* fix: done close Modal

* fix: loop through, inserting data item by item

* fix: number calc with using mathjs

* fix: import plugin add locale

* fix: fix some bugs

* feat: bulk update done

* fix: transaction cannot be rolled back because it has been finished with state: rollback

* fix(plugin-system-settings): convert array to json

* fix(collection-manager): o2m is array type

* fix: missing RefreshActionInitializer

* fix(collection-manger): incorrect scope key parameter

* fix: can't access pages without permission via url (#826)

* feat(database): add sequence field type (#779)

* feat(database): add serialString field type

* feat(database): add serial string type field ui (skip ci)

* test(feat/database): test field options

* docs: demo

* fix(database): fix array table field behavior

* fix(database): fix serial type interface ui

* fix(database): add match logic for patterns changes

* fix(database): fix serial type query last bug in mysql

* refactor(database): refactor last record logic

* chore: revert modification on unnecessary file

* refactor(database): rename serialString type to sequence

Co-authored-by: chenos <chenlinxh@gmail.com>

* added Russian translation (#840)

* Russian translation

* Add files via upload

Add RU locale into index.ts
Bugs fixed in the ru_RU.ts

* Update index.ts

Correct lines 4 and 8

* feat: update option must have filter or filterByTk (#847)

* feat: update option must have filter or filterByTk

* fix: typo

* fix: typo

* feat(core/cache): support cache (#876)

* feat(core/cache): support cache

* build(create-nocobase-app): remove --cache-store-package cli option

* perf(core/cache): modify default cache config and remove unnecessary logic code

* fix: slow join query issued by appends field in find method of repository  (#845)

* fix: slow join query issue by appends field in repository.find

* feat: handle appending query in multiple relation repository

* feat: handle appending query in single relation repository

Co-authored-by: chenos <chenlinxh@gmail.com>

* fix: sort parameter is missing (#849)

* fix: 审计日志翻页sort丢失

* fix: 审计日志翻页sort丢失

* fix: 审计日志翻页sort丢失

Co-authored-by: 唐小爱 <tangxiaoai@192.168.0.103>

* fix(formula): support integer and fix NaN error (#879)

* fix(formula): support integer and fix NaN error

* style(formula-input): remove debugger

* fix(database): fix the index name too long error

* feat(collection-manager): inverse fields can be configured (#883)

* feat: inverse field

* feat: improve code

* feat: translations

* fix: required

* fix: run test by jest (#891)

* fix: unable to submit form during file upload (#892)

* fix(client/block-select-collection): fix select collection menu view error (#889)

* fix(client/block-select-collection): fix too many collection menu view error

* fix(client/relate-collection-field-menu): fix relate collection field menu view too long error

* fix(client/record-picker): support record-picker show format DataPicker (#888)

* fix(client/record-picker): support record-picker show format DataPicker

* fix(client/record-picker): undefined judgment and when change field's label refresh format in time

* feat: improve signin and signup page components

* feat(plugin-workflow): add concat calculator (#894)

* fix: single relation repository appends query issue (#901)

* fix: appends merge includes (#905)

* fix: build error

* fix(client): tab pane initializers for create form block

* fix: version judgment is not accurate

* fix: sync collection field default value (#907)

* feat: limit database identifier (#908)

* fix: cannot read properties of undefined (reading 'target')

* fix: appends merge now using primary key (#911)

* fix: appends merge now using primary key

* chore: console.log

* fix: unbind on error throwing (#914)

* feat: create with array of values (#912)

* feat: create with array of values

* chore: console.log

* chore: debug

* fix(client/route-switch): skip sub routes

* Feat: plugin workflow collection field (#919)

* feat(plugin-workflow): use Collectionfield component to render form

* fix(plugin-workflow): fix association types value assigning in nodes

* fix: missing menuItemGroupCss

* fix: multiple = false

* chore(versions): 😊 publish v0.7.5-alpha.1 (#920)

* fix(plugin-workflow): temp disable validation of collection field in node (#928)

* fix(plugin-workflow): fix schedule infinitely trigger when repeat not set (#926)

* Feat/plugin workflow collection field (#934)

* feat(plugin-workflow): support association constant simple input

* fix(plugin-workflow): remove useless code

* fix(plugin-workflow): add req context to processor (#936)

* feat: bulk update done

* feat: bulk edit done

* fix: fix import bug

* Update database.ts

* fix: workflow

* fix: error

* fix: plugin-import

* fix: handle locale

* fix: handle locale

* fix: allow email is undefined

* fix: action add loading

* fix: fix import bug

* fix: not allow sequence import

* fix: remove field not allow download template

* fix: remove field not allow download template

* fix: checkbox batch edit error

* fix: fix build edit

Co-authored-by: Semmy <semmywong@126.com>
Co-authored-by: Junyi <mytharcher@users.noreply.github.com>
Co-authored-by: arzanov <59161748+arzanov@users.noreply.github.com>
Co-authored-by: ChengLei Shao <chareice@live.com>
Co-authored-by: lyf-coder <58352715+lyf-coder@users.noreply.github.com>
Co-authored-by: katherinehhh <shunai.tang@hand-china.com>
Co-authored-by: 唐小爱 <tangxiaoai@192.168.0.103>
2022-10-31 23:22:33 +08:00

70 lines
2.3 KiB
TypeScript

import { ExclamationCircleFilled, LoadingOutlined } from '@ant-design/icons';
import { css } from '@emotion/css';
import { Button, Modal, Space, Spin } from 'antd';
import { saveAs } from 'file-saver';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { NAMESPACE } from './constants';
import { useImportContext } from './context';
export const ImportStatus = {
IMPORTING: 1,
IMPORTED: 2,
};
export const ImportModal = (props: any) => {
const { t } = useTranslation(NAMESPACE);
const { importModalVisible, importStatus, importResult, setImportModalVisible } = useImportContext();
const { data: fileData, meta } = importResult ?? {};
const doneHandler = () => {
setImportModalVisible(false);
};
const downloadFailureDataHandler = () => {
const arrayBuffer = new Int8Array(fileData?.data);
let blob = new Blob([arrayBuffer], { type: 'application/x-xls' });
saveAs(blob, `fail.xlsx`);
};
return (
<Modal
title={t('Import Data')}
width="50%"
bodyStyle={{ height: 'calc(80vh - 200px)' }}
visible={importModalVisible}
footer={null}
closable={importStatus === ImportStatus.IMPORTED}
onCancel={doneHandler}
>
<div
className={css`
display: flex;
justify-content: center;
align-items: center;
height: 100%;
`}
>
{importStatus === ImportStatus.IMPORTING && (
<Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} tip={t('Excel data importing')} />
)}
{importStatus === ImportStatus.IMPORTED && (
<Space direction="vertical" align="center">
<ExclamationCircleFilled style={{ fontSize: 72, color: '#1890ff' }} />
<p>
{t('Import done, total success have {{successCount}} , total failure have {{failureCount}}', {
...(meta ?? {}),
})}
</p>
<Space>
{meta?.failureCount > 0 && (
<Button onClick={downloadFailureDataHandler}>{t('To download the failure data')}</Button>
)}
<Button type="primary" onClick={doneHandler}>
{t('Done')}
</Button>
</Space>
</Space>
)}
</div>
</Modal>
);
};