340 lines
9.6 KiB
JavaScript
340 lines
9.6 KiB
JavaScript
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
import { useDispatch } from 'react-redux';
|
|
import {
|
|
EditFilled,
|
|
DeleteFilled,
|
|
PlusOutlined,
|
|
ReloadOutlined,
|
|
} from '@ant-design/icons';
|
|
import FormHeader from '../PageComponents/FormHeader';
|
|
import { Messages } from '../../Components/Notifications/Messages';
|
|
import Buttons from '../../Components/Forms/Buttons';
|
|
import Search from '../../Components/Forms/Search';
|
|
import { Tables } from '../../Components/Tables/Table';
|
|
import { Form, Space } from 'antd';
|
|
import { DefaultModal } from '../../Components/Modal/DefaultModal';
|
|
import { InputField } from '../../Components/Forms/InputField';
|
|
import { getSession, validateSafeInput } from '../../Services/Others';
|
|
import { changeBreadCrumb } from '../../Features/AppPage/CenterPage';
|
|
import {
|
|
deleteLanguages,
|
|
getLanguages,
|
|
postLanguages,
|
|
putLanguages,
|
|
} from '../../Features/SpeechLanguages/SpeechLanguagesList.js';
|
|
|
|
const subDirectory = import.meta.env.BASE_URL;
|
|
|
|
const SpeechLanguagesList = () => {
|
|
const formRef = useRef(null);
|
|
const dispatch = useDispatch();
|
|
const UserId = getSession('UserId');
|
|
const [messageType, setMessageType] = useState(null);
|
|
const [messageData, setMessageData] = useState(null);
|
|
const [page, setpage] = useState(1);
|
|
const [sortedInfo, setSortedInfo] = useState({});
|
|
const [searchedText, setSearchedText] = useState('');
|
|
const [openModal, setOpenModal] = useState(false);
|
|
const [editState, setEditState] = useState({});
|
|
const [languagesData, setLanguagesData] = useState([]);
|
|
const items = [
|
|
{
|
|
name: 'Home',
|
|
link: `${subDirectory}app-page/home`,
|
|
},
|
|
];
|
|
|
|
const columns = [
|
|
{
|
|
title: 'Sl.No',
|
|
align: 'center',
|
|
key: 'sno',
|
|
width: '100px',
|
|
render: (text, object, index) => (
|
|
<a style={{ color: 'black' }}>{(page - 1) * 10 + index + 1}</a>
|
|
),
|
|
},
|
|
{
|
|
title: 'Language',
|
|
dataIndex: 'Language',
|
|
key: 'Language',
|
|
align: 'left',
|
|
width: '250px',
|
|
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
|
|
filteredValue: [searchedText],
|
|
onFilter: (value, record) => {
|
|
return (
|
|
String(record.Language)?.toLowerCase().includes(value?.toLowerCase()) ||
|
|
String(record.Code)?.toLowerCase().includes(value?.toLowerCase())
|
|
);
|
|
},
|
|
sorter: (a, b) => a?.Language?.localeCompare(b.Language),
|
|
sortOrder: sortedInfo.columnKey === 'Language' ? sortedInfo.order : null,
|
|
ellipsis: true,
|
|
},
|
|
{
|
|
title: 'Code',
|
|
dataIndex: 'Code',
|
|
key: 'Code',
|
|
align: 'left',
|
|
width: '250px',
|
|
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
|
|
},
|
|
{
|
|
title: 'Action',
|
|
dataIndex: 'Action',
|
|
key: 'Action',
|
|
width: '200px',
|
|
align: 'center',
|
|
render: (_, record, index) =>
|
|
languagesData?.length >= 1 ? (
|
|
<Space size="middle">
|
|
{record.ActiveStatus === 'A' ? (
|
|
<a>
|
|
<EditFilled
|
|
style={{ color: '#1292EE' }}
|
|
onClick={() => actionsFormatter(record, index)}
|
|
/>
|
|
</a>
|
|
) : (
|
|
''
|
|
)}
|
|
<a>
|
|
{record.ActiveStatus === 'A' ? (
|
|
<DeleteFilled
|
|
style={{
|
|
color: '#FF4D4F',
|
|
}}
|
|
onClick={() => statusFormatter(record)}
|
|
/>
|
|
) : (
|
|
<ReloadOutlined
|
|
style={{
|
|
color: '#52C41A',
|
|
}}
|
|
onClick={() => statusFormatter(record)}
|
|
/>
|
|
)}
|
|
</a>
|
|
</Space>
|
|
) : null,
|
|
},
|
|
];
|
|
|
|
useEffect(() => {
|
|
dispatch(changeBreadCrumb({ items: items }));
|
|
fetchLanguages();
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (Object.keys(editState)?.length > 0) {
|
|
formRef?.current?.setFieldsValue({
|
|
Language: editState?.Language,
|
|
Code: editState?.Code,
|
|
});
|
|
}
|
|
}, [editState]);
|
|
|
|
const onComplete = useCallback(() => {
|
|
setMessageData(null);
|
|
setMessageType(null);
|
|
}, []);
|
|
|
|
const actionsFormatter = (record, index) => {
|
|
setOpenModal(true);
|
|
setEditState(record);
|
|
formRef?.current?.setFieldsValue({
|
|
Language: record?.Language,
|
|
Code: record?.Code,
|
|
});
|
|
};
|
|
|
|
const statusFormatter = async (record) => {
|
|
let deleteData = {
|
|
UniqueId: record.UniqueId,
|
|
ActiveStatus: record.ActiveStatus == 'A' ? 'D' : 'A',
|
|
UpdatedBy: UserId,
|
|
};
|
|
let response = await dispatch(deleteLanguages(deleteData)).unwrap();
|
|
if (response?.data?.statusCode == 1) {
|
|
setMessageType('success');
|
|
setMessageData(
|
|
record.ActiveStatus == 'A'
|
|
? 'In-Activated Successfully'
|
|
: 'Activated Successfully'
|
|
);
|
|
|
|
fetchLanguages();
|
|
}
|
|
};
|
|
|
|
const handlePageChange = (current) => {
|
|
setpage(current);
|
|
};
|
|
|
|
const handleChange = (pagination, filters, sorter) => {
|
|
setSortedInfo(sorter);
|
|
};
|
|
|
|
const onSearch = (value) => {
|
|
setSearchedText(value);
|
|
};
|
|
const onSearchChange = (e) => {
|
|
setSearchedText(e?.target?.value);
|
|
};
|
|
|
|
const openModalFun = () => {
|
|
setEditState({});
|
|
formRef?.current?.resetFields();
|
|
setOpenModal(true);
|
|
};
|
|
|
|
const handleCancel = () => {
|
|
setOpenModal(false);
|
|
};
|
|
|
|
const fetchLanguages = async () => {
|
|
let response = await dispatch(getLanguages()).unwrap();
|
|
if (response?.data?.statusCode == 1) {
|
|
setLanguagesData(response?.data?.data);
|
|
}
|
|
};
|
|
|
|
const handleSubmit = async () => {
|
|
const subLangData = await formRef?.current?.validateFields();
|
|
const addLangData = {
|
|
Language: subLangData?.Language,
|
|
Code: subLangData?.Code,
|
|
CreatedBy: UserId,
|
|
};
|
|
|
|
let response = {};
|
|
if (Object.keys(editState)?.length === 0) {
|
|
response = await dispatch(postLanguages(addLangData)).unwrap();
|
|
} else {
|
|
const updateLangData = {
|
|
UniqueId: editState?.UniqueId,
|
|
Language: subLangData?.Language,
|
|
Code: subLangData?.Code,
|
|
UpdatedBy: UserId,
|
|
};
|
|
response = await dispatch(putLanguages(updateLangData)).unwrap();
|
|
}
|
|
if (response?.data?.statusCode == 1) {
|
|
setMessageType('success');
|
|
setMessageData(response?.data?.response);
|
|
setOpenModal(false);
|
|
setEditState({});
|
|
formRef?.current?.resetFields();
|
|
fetchLanguages();
|
|
} else {
|
|
setMessageType('error');
|
|
setMessageData(response?.data?.response);
|
|
// formRef?.current?.resetFields();
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div className="userPageTable">
|
|
<div className="userPageContent">
|
|
<Messages
|
|
messageType={messageType}
|
|
messageData={messageData}
|
|
onComplete={onComplete}
|
|
/>
|
|
<div className="formAddNew">
|
|
<div>
|
|
<FormHeader title={'Languages'} />
|
|
</div>
|
|
<div className="searchAddDiv">
|
|
<div className="formSearch">
|
|
<Search
|
|
placeholder="Search"
|
|
onSearch={onSearch}
|
|
onSearchChange={onSearchChange}
|
|
/>
|
|
</div>
|
|
|
|
<Buttons
|
|
buttonText="Add New"
|
|
color="901D77"
|
|
handleSubmit={openModalFun}
|
|
></Buttons>
|
|
</div>
|
|
</div>
|
|
<div className="reportTable">
|
|
<Tables
|
|
columns={columns}
|
|
data={languagesData}
|
|
pagination={handlePageChange}
|
|
onChange={handleChange}
|
|
/>
|
|
</div>
|
|
</div>
|
|
<DefaultModal
|
|
title="Language"
|
|
open={openModal}
|
|
footer={true}
|
|
children={
|
|
<Form ref={formRef} className="formDivAnt">
|
|
<div style={{ display: 'flex', gap: '1rem' }}>
|
|
<div>
|
|
<Form.Item
|
|
name="Language"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
pattern: /^(?!\s*$).+/,
|
|
message: 'Please Enter Language',
|
|
},
|
|
{
|
|
validator: async (_, value) => {
|
|
await validateSafeInput(value); // To block HTML tags & SQL keywords
|
|
return Promise.resolve();
|
|
},
|
|
},
|
|
]}
|
|
>
|
|
<InputField
|
|
autoComplete="off"
|
|
label={<label class="required">Language</label>}
|
|
isOnChange={editState?.Language ? true : false}
|
|
/>
|
|
</Form.Item>
|
|
</div>
|
|
<div>
|
|
<Form.Item
|
|
name="Code"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
pattern: /^(?!\s*$).+/,
|
|
message: 'Please Enter Code',
|
|
},
|
|
{
|
|
validator: async (_, value) => {
|
|
await validateSafeInput(value); // To block HTML tags & SQL keywords
|
|
return Promise.resolve();
|
|
},
|
|
},
|
|
]}
|
|
>
|
|
<InputField
|
|
autoComplete="off"
|
|
label={<label class="required">Code</label>}
|
|
isOnChange={editState?.Code ? true : false}
|
|
/>
|
|
</Form.Item>
|
|
</div>
|
|
</div>
|
|
</Form>
|
|
}
|
|
handleCancel={handleCancel}
|
|
handleSubmit={handleSubmit}
|
|
></DefaultModal>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SpeechLanguagesList;
|