From bf95b0015c734b6b34094a6c93c333ab9d9793df Mon Sep 17 00:00:00 2001 From: Michal Michalczuk Date: Wed, 30 Dec 2020 12:59:12 +0100 Subject: [PATCH 1/3] issue/657 remove letter instance from list Co-authored-by: Bartosz Gryta --- frontend-project/src/locales/en-US.ts | 2 +- frontend-project/src/locales/pl-PL.ts | 2 +- frontend-project/src/models/letters.ts | 8 +++ .../src/pages/cases/CasesDetailView.tsx | 2 +- .../src/pages/letters/list/index.tsx | 69 +++++++++++++++++-- .../src/pages/letters/list/locales/en-US.ts | 1 + .../src/pages/letters/list/locales/pl-PL.ts | 1 + .../src/pages/tags/TagsDetailView.tsx | 2 +- frontend-project/src/services/letters.ts | 25 +++---- frontend-project/src/utils/reduxModel.ts | 4 +- 10 files changed, 90 insertions(+), 26 deletions(-) create mode 100644 frontend-project/src/models/letters.ts diff --git a/frontend-project/src/locales/en-US.ts b/frontend-project/src/locales/en-US.ts index 0e948b58e..4920ebae2 100644 --- a/frontend-project/src/locales/en-US.ts +++ b/frontend-project/src/locales/en-US.ts @@ -1,3 +1,4 @@ +import { tagsLocale } from '@/pages/tags/locales/en-US'; import component from './en-US/component'; import globalHeader from './en-US/globalHeader'; import { menuLocale } from './en-US/menu'; @@ -8,7 +9,6 @@ import BaseLocales from './pl-PL'; import { structuredLocale } from '../utils/structedLocale'; import { casesLocale } from '../pages/cases/locales/en-US'; import { globalsLocale } from './en-US/globals'; -import { tagsLocale } from '@/pages/tags/locales/en-US'; const [labels] = structuredLocale({ ...menuLocale, diff --git a/frontend-project/src/locales/pl-PL.ts b/frontend-project/src/locales/pl-PL.ts index ec9e1b2a6..8644ce2d7 100644 --- a/frontend-project/src/locales/pl-PL.ts +++ b/frontend-project/src/locales/pl-PL.ts @@ -1,3 +1,4 @@ +import { tagsLocale } from '@/pages/tags/locales/pl-PL'; import component from './pl-PL/component'; import globalHeader from './pl-PL/globalHeader'; import pwa from './pl-PL/pwa'; @@ -7,7 +8,6 @@ import { menuLocale } from './pl-PL/menu'; import { structuredLocale } from '../utils/structedLocale'; import { casesLocale } from '../pages/cases/locales/pl-PL'; import { globalsLocale } from './pl-PL/globals'; -import { tagsLocale } from '@/pages/tags/locales/pl-PL'; const [labels, keys] = structuredLocale({ ...menuLocale, diff --git a/frontend-project/src/models/letters.ts b/frontend-project/src/models/letters.ts new file mode 100644 index 000000000..7ce85b8e0 --- /dev/null +++ b/frontend-project/src/models/letters.ts @@ -0,0 +1,8 @@ +import { Letter } from '@/services/definitions'; +import { LettersService } from '@/services/letters'; +import { ReadWriteReduxResource } from '@/utils/reduxModel'; + +export default ReadWriteReduxResource({ + namespace: 'letters', + service: LettersService, +}); diff --git a/frontend-project/src/pages/cases/CasesDetailView.tsx b/frontend-project/src/pages/cases/CasesDetailView.tsx index d2b18d53a..2db41aab8 100644 --- a/frontend-project/src/pages/cases/CasesDetailView.tsx +++ b/frontend-project/src/pages/cases/CasesDetailView.tsx @@ -6,11 +6,11 @@ import { formatMessage, FormattedMessage } from 'umi-plugin-react/locale'; import { Institution, User, Tag, Case, Feature } from '@/services/definitions'; import { ReduxResourceState } from '@/utils/reduxModel'; import router from 'umi/router'; -import { localeKeys } from '../../locales/pl-PL'; import { RouterTypes } from 'umi'; import { ServiceResponse } from '@/services/service'; import smallEodSDK from '@/utils/sdk'; import { openNotificationWithIcon } from '@/models/global'; +import { localeKeys } from '../../locales/pl-PL'; interface CasesDetailViewProps { cases: ReduxResourceState; diff --git a/frontend-project/src/pages/letters/list/index.tsx b/frontend-project/src/pages/letters/list/index.tsx index fa247a958..beb505918 100644 --- a/frontend-project/src/pages/letters/list/index.tsx +++ b/frontend-project/src/pages/letters/list/index.tsx @@ -1,16 +1,58 @@ -import { ProColumns } from '@ant-design/pro-table'; -import React, { FC } from 'react'; +import { ActionType, ProColumns } from '@ant-design/pro-table'; +import React, { FC, useRef } from 'react'; import { formatMessage } from 'umi-plugin-react/locale'; -import { fetchLettersPage } from '@/services/letters'; import { Letter } from '@/services/definitions'; import Table from '@/components/Table'; import ChannelName from '@/components/Table/ChannelName'; import InstitutionName from '@/components/Table/InstitutionName'; import CaseName from '@/components/Table/CaseName'; import DocumentTypeName from '@/components/Table/DocumentTypeName'; +import { Button, Space, Tooltip } from 'antd'; +import { DeleteOutlined } from '@ant-design/icons'; +import { useDispatch } from 'dva'; +import { openNotificationWithIcon } from '@/models/global'; +import { ServiceResponse } from '@/services/service'; +import { PaginationParams, PaginationResponse } from '@/services/common'; +import { LettersService } from '@/services/letters'; +import { localeKeys } from '@/locales/pl-PL'; const TableList: FC<{}> = () => { + const dispatch = useDispatch(); + const tableActionRef = useRef(); + + function onRemove(id: number) { + dispatch({ + type: 'letters/remove', + payload: { + id, + onResponse: (response: ServiceResponse) => { + if (response.status === 'failed') { + openNotificationWithIcon( + 'error', + formatMessage({ id: localeKeys.error }), + `${formatMessage({ id: 'letters-list.table.notification.remove' })} ${id}`, + ); + } + tableActionRef.current.reload(); + }, + }, + }); + } + + async function fetchPage(props: PaginationParams): Promise> { + const response = await LettersService.fetchPage(props); + if (response.status === 'failed') { + openNotificationWithIcon( + 'error', + formatMessage({ id: localeKeys.error }), + formatMessage({ id: localeKeys.lists.failedDownload }), + ); + return { data: [], total: 0 }; + } + return response.data; + } + const columns: ProColumns[] = [ { title: formatMessage({ id: 'letters-list.table.columns.documentType.title' }), @@ -70,9 +112,28 @@ const TableList: FC<{}> = () => { dataIndex: 'attachments', render: (attachments: []) => attachments.length, }, + { + title: formatMessage({ id: localeKeys.lists.actions }), + dataIndex: 'id', + render: (id: number) => ( + + +