'made prettier rc to match the code style here'
2 files changed, +242 -210
+8-0Client/.prettierrc
| @@ -0,0 +1,8 @@ | ||
| 1 | +{ | |
| 2 | + "singleQuote": true, | |
| 3 | + "trailingComma": "es5", | |
| 4 | + "semi": true, | |
| 5 | + "tabWidth": 4, | |
| 6 | + "printWidth": 9999, | |
| 7 | + "jsxBracketSameLine": true | |
| 8 | +} |
+234-210Client/src/views/admin/task/components/taskView.js
| @@ -1,40 +1,40 @@ | ||
| 1 | -import { Button, Grid, GridItem, Flex, IconButton, Text, Menu, MenuButton, MenuDivider, MenuItem, MenuList, useDisclosure, Box, Heading, Input } from '@chakra-ui/react' | |
| 2 | -import { AddIcon, ChevronDownIcon, DeleteIcon, EditIcon } from "@chakra-ui/icons"; | |
| 3 | -import React from 'react' | |
| 4 | -import moment from 'moment' | |
| 5 | -import { Link, useNavigate, useParams } from 'react-router-dom' | |
| 6 | -import { BiLink } from 'react-icons/bi' | |
| 7 | -import { useEffect } from 'react' | |
| 8 | -import { useState } from 'react' | |
| 9 | -import { getApi } from 'services/api' | |
| 10 | -import Card from 'components/card/Card' | |
| 11 | -import { IoIosArrowBack } from "react-icons/io"; | |
| 1 | +import { Button, Grid, GridItem, Flex, IconButton, Text, Menu, MenuButton, MenuDivider, MenuItem, MenuList, useDisclosure, Box, Heading, Input } from '@chakra-ui/react'; | |
| 2 | +import { AddIcon, ChevronDownIcon, DeleteIcon, EditIcon } from '@chakra-ui/icons'; | |
| 3 | +import React from 'react'; | |
| 4 | +import moment from 'moment'; | |
| 5 | +import { Link, useNavigate, useParams } from 'react-router-dom'; | |
| 6 | +import { BiLink } from 'react-icons/bi'; | |
| 7 | +import { useEffect } from 'react'; | |
| 8 | +import { useState } from 'react'; | |
| 9 | +import { getApi } from 'services/api'; | |
| 10 | +import Card from 'components/card/Card'; | |
| 11 | +import { IoIosArrowBack } from 'react-icons/io'; | |
| 12 | 12 | import { HasAccess } from '../../../../redux/accessUtils'; |
| 13 | 13 | import { HSeparator } from 'components/separator/Separator'; |
| 14 | 14 | import AddEdit from './AddEdit'; |
| 15 | 15 | import CommonDeleteModel from 'components/commonDeleteModel'; |
| 16 | 16 | import { deleteManyApi } from 'services/api'; |
| 17 | -import { FaFilePdf } from "react-icons/fa"; | |
| 18 | -import html2pdf from "html2pdf.js"; | |
| 17 | +import { FaFilePdf } from 'react-icons/fa'; | |
| 18 | +import html2pdf from 'html2pdf.js'; | |
| 19 | 19 | import { TaskSchema } from 'schema'; |
| 20 | 20 | import { useFormik } from 'formik'; |
| 21 | 21 | import { putApi } from 'services/api'; |
| 22 | 22 | import dayjs from 'dayjs'; |
| 23 | 23 | |
| 24 | 24 | const TaskView = (props) => { |
| 25 | - const params = useParams() | |
| 26 | - const { id } = params | |
| 27 | - const user = JSON.parse(localStorage.getItem("user")) | |
| 25 | + const params = useParams(); | |
| 26 | + const { id } = params; | |
| 27 | + const user = JSON.parse(localStorage.getItem('user')); | |
| 28 | 28 | |
| 29 | - const [permission, contactAccess, leadAccess] = HasAccess(['Tasks', 'Contacts', 'Leads']) | |
| 29 | + const [permission, contactAccess, leadAccess] = HasAccess(['Tasks', 'Contacts', 'Leads']); | |
| 30 | 30 | |
| 31 | - const [data, setData] = useState() | |
| 32 | - const { onOpen, onClose } = useDisclosure() | |
| 31 | + const [data, setData] = useState(); | |
| 32 | + const { onOpen, onClose } = useDisclosure(); | |
| 33 | 33 | const [edit, setEdit] = useState(false); |
| 34 | 34 | const [deleteModel, setDelete] = useState(false); |
| 35 | 35 | const [deleteManyModel, setDeleteManyModel] = useState(false); |
| 36 | - const [loading, setLoading] = useState(false) | |
| 37 | - const navigate = useNavigate() | |
| 36 | + const [loading, setLoading] = useState(false); | |
| 37 | + const navigate = useNavigate(); | |
| 38 | 38 | const [editableField, setEditableField] = useState(null); |
| 39 | 39 | const today = new Date().toISOString().split('T')[0]; |
| 40 | 40 | const todayTime = new Date().toISOString().split('.')[0]; |
| @@ -43,11 +43,11 @@ const TaskView = (props) => { | ||
| 43 | 43 | let result = await getApi('api/task/view/', id?.event ? id?.event?._def?.extendedProps?._id : id); |
| 44 | 44 | setData(result?.data); |
| 45 | 45 | } |
| 46 | - } | |
| 46 | + }; | |
| 47 | 47 | const generatePDF = () => { |
| 48 | - setLoading(true) | |
| 49 | - const element = document.getElementById("reports"); | |
| 50 | - const hideBtn = document.getElementById("hide-btn"); | |
| 48 | + setLoading(true); | |
| 49 | + const element = document.getElementById('reports'); | |
| 50 | + const hideBtn = document.getElementById('hide-btn'); | |
| 51 | 51 | |
| 52 | 52 | if (element) { |
| 53 | 53 | hideBtn.style.display = 'none'; |
| @@ -55,33 +55,37 @@ const TaskView = (props) => { | ||
| 55 | 55 | .from(element) |
| 56 | 56 | .set({ |
| 57 | 57 | margin: [0, 0, 0, 0], |
| 58 | - filename: `Task_Details_${moment().format("DD-MM-YYYY")}.pdf`, | |
| 59 | - image: { type: "jpeg", quality: 0.98 }, | |
| 58 | + filename: `Task_Details_${moment().format('DD-MM-YYYY')}.pdf`, | |
| 59 | + image: { type: 'jpeg', quality: 0.98 }, | |
| 60 | 60 | html2canvas: { scale: 2, useCORS: true, allowTaint: true }, |
| 61 | - jsPDF: { unit: "in", format: "letter", orientation: "portrait" }, | |
| 61 | + jsPDF: { | |
| 62 | + unit: 'in', | |
| 63 | + format: 'letter', | |
| 64 | + orientation: 'portrait', | |
| 65 | + }, | |
| 62 | 66 | }) |
| 63 | - .save().then(() => { | |
| 64 | - setLoading(false) | |
| 67 | + .save() | |
| 68 | + .then(() => { | |
| 69 | + setLoading(false); | |
| 65 | 70 | hideBtn.style.display = ''; |
| 66 | - }) | |
| 71 | + }); | |
| 67 | 72 | // }, 500); |
| 68 | 73 | } else { |
| 69 | 74 | console.error("Element with ID 'reports' not found."); |
| 70 | - setLoading(false) | |
| 75 | + setLoading(false); | |
| 71 | 76 | } |
| 72 | 77 | }; |
| 73 | 78 | const handleDeleteTask = async (ids) => { |
| 74 | 79 | try { |
| 75 | - let response = await deleteManyApi('api/task/deleteMany', ids) | |
| 80 | + let response = await deleteManyApi('api/task/deleteMany', ids); | |
| 76 | 81 | if (response.status === 200) { |
| 77 | - navigate('/task') | |
| 78 | - setDeleteManyModel(false) | |
| 82 | + navigate('/task'); | |
| 83 | + setDeleteManyModel(false); | |
| 79 | 84 | } |
| 80 | 85 | } catch (error) { |
| 81 | - console.log(error) | |
| 86 | + console.log(error); | |
| 82 | 87 | } |
| 83 | - | |
| 84 | - } | |
| 88 | + }; | |
| 85 | 89 | |
| 86 | 90 | const initialValues = { |
| 87 | 91 | title: data?.title, |
| @@ -89,70 +93,93 @@ const TaskView = (props) => { | ||
| 89 | 93 | notes: data?.notes, |
| 90 | 94 | start: data?.start, |
| 91 | 95 | end: data?.end, |
| 92 | - } | |
| 96 | + }; | |
| 93 | 97 | |
| 94 | 98 | const formik = useFormik({ |
| 95 | 99 | initialValues: initialValues, |
| 96 | 100 | validationSchema: TaskSchema, |
| 97 | 101 | enableReinitialize: true, |
| 98 | 102 | onSubmit: async (values, { resetForm }) => { |
| 99 | - let response = await putApi(`api/task/edit/${id}`, values) | |
| 103 | + let response = await putApi(`api/task/edit/${id}`, values); | |
| 100 | 104 | if (response.status === 200) { |
| 101 | 105 | setEditableField(null); |
| 102 | - fetchViewData() | |
| 106 | + fetchViewData(); | |
| 103 | 107 | } |
| 104 | 108 | }, |
| 105 | 109 | }); |
| 106 | 110 | const handleDoubleClick = (fieldName, value) => { |
| 107 | 111 | formik.setFieldValue(fieldName, value); |
| 108 | - setEditableField(fieldName) | |
| 112 | + setEditableField(fieldName); | |
| 109 | 113 | }; |
| 110 | 114 | |
| 111 | 115 | const handleBlur = (e) => { |
| 112 | 116 | formik.handleSubmit(); |
| 113 | 117 | }; |
| 114 | 118 | useEffect(() => { |
| 115 | - fetchViewData() | |
| 116 | - }, [id, edit]) | |
| 119 | + fetchViewData(); | |
| 120 | + }, [id, edit]); | |
| 117 | 121 | |
| 118 | 122 | const handleClick = () => { |
| 119 | - onOpen() | |
| 120 | - } | |
| 123 | + onOpen(); | |
| 124 | + }; | |
| 121 | 125 | return ( |
| 122 | 126 | <div> |
| 123 | 127 | <Grid templateColumns="repeat(4, 1fr)" gap={3} id="reports"> |
| 124 | 128 | <GridItem colSpan={{ base: 4 }}> |
| 125 | 129 | <Heading size="lg" m={3}> |
| 126 | - {data?.title || ""} | |
| 130 | + {data?.title || ''} | |
| 127 | 131 | </Heading> |
| 128 | 132 | </GridItem> |
| 129 | 133 | <GridItem colSpan={{ base: 4 }}> |
| 130 | - <Card > | |
| 134 | + <Card> | |
| 131 | 135 | <Grid gap={4}> |
| 132 | 136 | <GridItem colSpan={2}> |
| 133 | 137 | <Box> |
| 134 | - <Box display={"flex"} justifyContent={"space-between"} > | |
| 138 | + <Box display={'flex'} justifyContent={'space-between'}> | |
| 135 | 139 | <Heading size="md" mb={3}> |
| 136 | 140 | Task Details |
| 137 | 141 | </Heading> |
| 138 | - <Flex id="hide-btn" > | |
| 142 | + <Flex id="hide-btn"> | |
| 139 | 143 | <Menu> |
| 140 | - {(user.role === 'superAdmin' || permission?.create || permission?.update || permission?.delete) && <MenuButton variant="outline" colorScheme='blackAlpha' size="sm" va mr={2.5} as={Button} rightIcon={<ChevronDownIcon />}> | |
| 141 | - Actions | |
| 142 | - </MenuButton>} | |
| 144 | + {(user.role === 'superAdmin' || permission?.create || permission?.update || permission?.delete) && ( | |
| 145 | + <MenuButton variant="outline" colorScheme="blackAlpha" size="sm" va mr={2.5} as={Button} rightIcon={<ChevronDownIcon />}> | |
| 146 | + Actions | |
| 147 | + </MenuButton> | |
| 148 | + )} | |
| 143 | 149 | <MenuDivider /> |
| 144 | 150 | <MenuList minWidth={2}> |
| 145 | - {(user.role === 'superAdmin' || permission?.create) && <MenuItem onClick={() => handleClick()} alignItems={'start'} color={'blue'} icon={<AddIcon />}>Add</MenuItem>} | |
| 146 | - {(user.role === 'superAdmin' || permission?.update) && <MenuItem onClick={() => setEdit(true)} alignItems={'start'} icon={<EditIcon />}>Edit</MenuItem>} | |
| 147 | - <MenuItem onClick={generatePDF} alignItems={"start"} icon={<FaFilePdf />} display={"flex"} style={{ alignItems: "center" }}>Print as PDF</MenuItem > | |
| 151 | + {(user.role === 'superAdmin' || permission?.create) && ( | |
| 152 | + <MenuItem onClick={() => handleClick()} alignItems={'start'} color={'blue'} icon={<AddIcon />}> | |
| 153 | + Add | |
| 154 | + </MenuItem> | |
| 155 | + )} | |
| 156 | + {(user.role === 'superAdmin' || permission?.update) && ( | |
| 157 | + <MenuItem onClick={() => setEdit(true)} alignItems={'start'} icon={<EditIcon />}> | |
| 158 | + Edit | |
| 159 | + </MenuItem> | |
| 160 | + )} | |
| 161 | + <MenuItem | |
| 162 | + onClick={generatePDF} | |
| 163 | + alignItems={'start'} | |
| 164 | + icon={<FaFilePdf />} | |
| 165 | + display={'flex'} | |
| 166 | + style={{ | |
| 167 | + alignItems: 'center', | |
| 168 | + }}> | |
| 169 | + Print as PDF | |
| 170 | + </MenuItem> | |
| 148 | 171 | |
| 149 | - {(user.role === 'superAdmin' || permission?.delete) && <> | |
| 150 | - <MenuDivider /> | |
| 151 | - <MenuItem alignItems={'start'} onClick={() => setDeleteManyModel(true)} color={'red'} icon={<DeleteIcon />}>Delete</MenuItem> | |
| 152 | - </>} | |
| 172 | + {(user.role === 'superAdmin' || permission?.delete) && ( | |
| 173 | + <> | |
| 174 | + <MenuDivider /> | |
| 175 | + <MenuItem alignItems={'start'} onClick={() => setDeleteManyModel(true)} color={'red'} icon={<DeleteIcon />}> | |
| 176 | + Delete | |
| 177 | + </MenuItem> | |
| 178 | + </> | |
| 179 | + )} | |
| 153 | 180 | </MenuList> |
| 154 | 181 | </Menu> |
| 155 | - <Button leftIcon={<IoIosArrowBack />} size='sm' variant="brand" onClick={() => navigate(-1)} > | |
| 182 | + <Button leftIcon={<IoIosArrowBack />} size="sm" variant="brand" onClick={() => navigate(-1)}> | |
| 156 | 183 | Back |
| 157 | 184 | </Button> |
| 158 | 185 | </Flex> |
| @@ -160,174 +187,171 @@ const TaskView = (props) => { | ||
| 160 | 187 | <HSeparator /> |
| 161 | 188 | </Box> |
| 162 | 189 | </GridItem> |
| 163 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 164 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task Title </Text> | |
| 165 | - { | |
| 166 | - editableField === "title" ? | |
| 167 | - <> | |
| 168 | - <Input | |
| 169 | - id="text" | |
| 170 | - name="title" | |
| 171 | - type="text" | |
| 172 | - onChange={formik.handleChange} | |
| 173 | - onBlur={handleBlur} | |
| 174 | - value={formik.values.title} | |
| 175 | - borderColor={formik?.errors?.title && formik?.touched?.title ? "red.300" : null} | |
| 176 | - autoFocus | |
| 177 | - /> | |
| 178 | - <Text mb='10px' color={'red'}> {formik?.errors.title && formik?.touched.title && formik?.errors.title}</Text> | |
| 179 | - </> | |
| 180 | - : | |
| 181 | - <Text onDoubleClick={() => handleDoubleClick("title", data?.title)}>{data?.title ? data?.title : ' - '}</Text> | |
| 182 | - } | |
| 190 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 191 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 192 | + {' '} | |
| 193 | + Task Title{' '} | |
| 194 | + </Text> | |
| 195 | + {editableField === 'title' ? ( | |
| 196 | + <> | |
| 197 | + <Input id="text" name="title" type="text" onChange={formik.handleChange} onBlur={handleBlur} value={formik.values.title} borderColor={formik?.errors?.title && formik?.touched?.title ? 'red.300' : null} autoFocus /> | |
| 198 | + <Text mb="10px" color={'red'}> | |
| 199 | + {' '} | |
| 200 | + {formik?.errors.title && formik?.touched.title && formik?.errors.title} | |
| 201 | + </Text> | |
| 202 | + </> | |
| 203 | + ) : ( | |
| 204 | + <Text onDoubleClick={() => handleDoubleClick('title', data?.title)}>{data?.title ? data?.title : ' - '}</Text> | |
| 205 | + )} | |
| 183 | 206 | </GridItem> |
| 184 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 185 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task Related To </Text> | |
| 207 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 208 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 209 | + {' '} | |
| 210 | + Task Related To{' '} | |
| 211 | + </Text> | |
| 186 | 212 | <Text>{data?.category ? data?.category : ' - '}</Text> |
| 187 | 213 | </GridItem> |
| 188 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 189 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task start </Text> | |
| 190 | - { | |
| 191 | - editableField === "start" ? | |
| 192 | - <> | |
| 193 | - <Input | |
| 194 | - name="start" | |
| 195 | - type={data?.allDay ? 'date' : 'datetime-local'} | |
| 196 | - onChange={formik.handleChange} | |
| 197 | - onBlur={handleBlur} | |
| 198 | - value={data.allDay === true | |
| 199 | - ? moment(formik.values.start).format('YYYY-MM-DD') | |
| 200 | - : moment(formik.values.start).format('YYYY-MM-DD HH:mm A')} | |
| 201 | - autoFocus | |
| 202 | - borderColor={formik?.errors?.start && formik?.touched?.start ? "red.300" : null} | |
| 203 | - min={data?.allDay ? dayjs(today).format('YYYY-MM-DD') : dayjs(todayTime).format('YYYY-MM-DD HH:mm')} | |
| 204 | - /> | |
| 205 | - <Text mb='10px' color={'red'}> {formik?.errors.start && formik?.touched.start && formik?.errors.start}</Text> | |
| 206 | - | |
| 207 | - </> | |
| 208 | - : | |
| 209 | - <Text onDoubleClick={() => handleDoubleClick("start", data?.start)}> | |
| 210 | - {data && data?.start ? ( | |
| 211 | - data.allDay === true | |
| 212 | - ? moment(data.start).format('DD-MM-YYYY') | |
| 213 | - : moment(data.start).format('DD-MM-YYYY HH:mm A') | |
| 214 | - ) : ( | |
| 215 | - "-" | |
| 216 | - )} | |
| 214 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 215 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 216 | + {' '} | |
| 217 | + Task start{' '} | |
| 218 | + </Text> | |
| 219 | + {editableField === 'start' ? ( | |
| 220 | + <> | |
| 221 | + <Input name="start" type={data?.allDay ? 'date' : 'datetime-local'} onChange={formik.handleChange} onBlur={handleBlur} value={data.allDay === true ? moment(formik.values.start).format('YYYY-MM-DD') : moment(formik.values.start).format('YYYY-MM-DD HH:mm A')} autoFocus borderColor={formik?.errors?.start && formik?.touched?.start ? 'red.300' : null} min={data?.allDay ? dayjs(today).format('YYYY-MM-DD') : dayjs(todayTime).format('YYYY-MM-DD HH:mm')} /> | |
| 222 | + <Text mb="10px" color={'red'}> | |
| 223 | + {' '} | |
| 224 | + {formik?.errors.start && formik?.touched.start && formik?.errors.start} | |
| 217 | 225 | </Text> |
| 218 | - } | |
| 219 | - | |
| 226 | + </> | |
| 227 | + ) : ( | |
| 228 | + <Text onDoubleClick={() => handleDoubleClick('start', data?.start)}>{data && data?.start ? (data.allDay === true ? moment(data.start).format('DD-MM-YYYY') : moment(data.start).format('DD-MM-YYYY HH:mm A')) : '-'}</Text> | |
| 229 | + )} | |
| 220 | 230 | </GridItem> |
| 221 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 222 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task end </Text> | |
| 223 | - { | |
| 224 | - editableField === "end" ? | |
| 225 | - <> | |
| 226 | - <Input | |
| 227 | - name="end" | |
| 228 | - type={data?.allDay ? 'date' : 'datetime-local'} | |
| 229 | - onChange={formik.handleChange} | |
| 230 | - onBlur={handleBlur} | |
| 231 | - min={formik.values.start} | |
| 232 | - value={data.allDay === true | |
| 233 | - ? moment(formik.values.end).format('YYYY-MM-DD') | |
| 234 | - : moment(formik.values.end).format('YYYY-MM-DD HH:mm A')} | |
| 235 | - autoFocus | |
| 236 | - borderColor={formik.errors?.end && formik.touched?.end ? "red.300" : null} | |
| 237 | - | |
| 238 | - /> | |
| 239 | - <Text mb='10px' color={'red'}> {formik.errors.end && formik.touched.end && formik.errors.end}</Text> | |
| 240 | - </> | |
| 241 | - | |
| 242 | - : | |
| 243 | - <Text onDoubleClick={() => handleDoubleClick("end", data?.end)}>{data?.allDay === true ? moment(data?.end).format('DD-MM-YYYY') : moment(data?.end).format('DD-MM-YYYY HH:mm A')}</Text> | |
| 244 | - | |
| 245 | - } | |
| 231 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 232 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 233 | + {' '} | |
| 234 | + Task end{' '} | |
| 235 | + </Text> | |
| 236 | + {editableField === 'end' ? ( | |
| 237 | + <> | |
| 238 | + <Input name="end" type={data?.allDay ? 'date' : 'datetime-local'} onChange={formik.handleChange} onBlur={handleBlur} min={formik.values.start} value={data.allDay === true ? moment(formik.values.end).format('YYYY-MM-DD') : moment(formik.values.end).format('YYYY-MM-DD HH:mm A')} autoFocus borderColor={formik.errors?.end && formik.touched?.end ? 'red.300' : null} /> | |
| 239 | + <Text mb="10px" color={'red'}> | |
| 240 | + {' '} | |
| 241 | + {formik.errors.end && formik.touched.end && formik.errors.end} | |
| 242 | + </Text> | |
| 243 | + </> | |
| 244 | + ) : ( | |
| 245 | + <Text onDoubleClick={() => handleDoubleClick('end', data?.end)}>{data?.allDay === true ? moment(data?.end).format('DD-MM-YYYY') : moment(data?.end).format('DD-MM-YYYY HH:mm A')}</Text> | |
| 246 | + )} | |
| 246 | 247 | </GridItem> |
| 247 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 248 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task Link </Text> | |
| 249 | - {data?.url ? | |
| 250 | - <a target='_blank' href={data?.url}> | |
| 248 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 249 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 250 | + {' '} | |
| 251 | + Task Link{' '} | |
| 252 | + </Text> | |
| 253 | + {data?.url ? ( | |
| 254 | + <a target="_blank" href={data?.url}> | |
| 251 | 255 | <IconButton borderRadius="10px" size="md" icon={<BiLink />} /> |
| 252 | - </a> : '-' | |
| 253 | - } | |
| 256 | + </a> | |
| 257 | + ) : ( | |
| 258 | + '-' | |
| 259 | + )} | |
| 254 | 260 | </GridItem> |
| 255 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 256 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task reminder </Text> | |
| 261 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 262 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 263 | + {' '} | |
| 264 | + Task reminder{' '} | |
| 265 | + </Text> | |
| 257 | 266 | <Text>{data?.reminder ? data?.reminder : ' - '}</Text> |
| 258 | 267 | </GridItem> |
| 259 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 260 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Assign To </Text> | |
| 268 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 269 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 270 | + {' '} | |
| 271 | + Assign To{' '} | |
| 272 | + </Text> | |
| 261 | 273 | <Link to={data?.assignTo ? contactAccess?.view && `/contactView/${data?.assignTo}` : leadAccess?.view && `/leadView/${data?.assignToLead}`}> |
| 262 | - <Text color={(data?.category === 'contact' && (contactAccess?.view || user?.role === 'superAdmin')) ? 'brand.600' : (leadAccess?.view || user?.role === 'superAdmin' && data?.category === 'lead') ? 'brand.600' : 'blackAlpha.900'} sx={{ '&:hover': { color: 'blue.500', textDecoration: 'underline' } }}>{data?.assignToName ? data?.assignToName : ' - '}</Text> | |
| 274 | + <Text | |
| 275 | + color={data?.category === 'contact' && (contactAccess?.view || user?.role === 'superAdmin') ? 'brand.600' : leadAccess?.view || (user?.role === 'superAdmin' && data?.category === 'lead') ? 'brand.600' : 'blackAlpha.900'} | |
| 276 | + sx={{ | |
| 277 | + '&:hover': { | |
| 278 | + color: 'blue.500', | |
| 279 | + textDecoration: 'underline', | |
| 280 | + }, | |
| 281 | + }}> | |
| 282 | + {data?.assignToName ? data?.assignToName : ' - '} | |
| 283 | + </Text> | |
| 263 | 284 | </Link> |
| 264 | 285 | </GridItem> |
| 265 | - <GridItem colSpan={{ base: 2, md: 1 }} > | |
| 266 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task createBy </Text> | |
| 286 | + <GridItem colSpan={{ base: 2, md: 1 }}> | |
| 287 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 288 | + {' '} | |
| 289 | + Task createBy{' '} | |
| 290 | + </Text> | |
| 267 | 291 | <Text>{data?.createByName ? data?.createByName : ' - '}</Text> |
| 268 | 292 | </GridItem> |
| 269 | - <GridItem colSpan={{ base: 2 }} > | |
| 270 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task Description</Text> | |
| 271 | - { | |
| 272 | - editableField === "description" ? | |
| 273 | - <> | |
| 274 | - <Input | |
| 275 | - id="text" | |
| 276 | - name="description" | |
| 277 | - type="text" | |
| 278 | - onChange={formik.handleChange} | |
| 279 | - onBlur={handleBlur} | |
| 280 | - value={formik.values.description} | |
| 281 | - autoFocus | |
| 282 | - borderColor={formik?.errors?.description && formik?.touched?.description ? "red.300" : null} | |
| 283 | - /> | |
| 284 | - <Text mb='10px' color={'red'}> {formik?.errors.description && formik?.touched.description && formik?.errors.description}</Text> | |
| 285 | - </> | |
| 286 | - : | |
| 287 | - <Text onDoubleClick={() => handleDoubleClick("description", data?.description)}>{data?.description ? data?.description : ' - '}</Text> | |
| 288 | - } | |
| 293 | + <GridItem colSpan={{ base: 2 }}> | |
| 294 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 295 | + {' '} | |
| 296 | + Task Description | |
| 297 | + </Text> | |
| 298 | + {editableField === 'description' ? ( | |
| 299 | + <> | |
| 300 | + <Input id="text" name="description" type="text" onChange={formik.handleChange} onBlur={handleBlur} value={formik.values.description} autoFocus borderColor={formik?.errors?.description && formik?.touched?.description ? 'red.300' : null} /> | |
| 301 | + <Text mb="10px" color={'red'}> | |
| 302 | + {' '} | |
| 303 | + {formik?.errors.description && formik?.touched.description && formik?.errors.description} | |
| 304 | + </Text> | |
| 305 | + </> | |
| 306 | + ) : ( | |
| 307 | + <Text onDoubleClick={() => handleDoubleClick('description', data?.description)}>{data?.description ? data?.description : ' - '}</Text> | |
| 308 | + )} | |
| 289 | 309 | </GridItem> |
| 290 | - <GridItem colSpan={{ base: 2 }} > | |
| 291 | - <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> Task notes </Text> | |
| 292 | - { | |
| 293 | - editableField === "notes" ? | |
| 294 | - <> | |
| 295 | - <Input | |
| 296 | - id="text" | |
| 297 | - name="notes" | |
| 298 | - type="text" | |
| 299 | - onChange={formik.handleChange} | |
| 300 | - onBlur={handleBlur} | |
| 301 | - value={formik.values.notes} | |
| 302 | - autoFocus | |
| 303 | - borderColor={formik?.errors?.notes && formik?.touched?.notes ? "red.300" : null} | |
| 304 | - /> | |
| 305 | - <Text mb='10px' color={'red'}> {formik?.errors.notes && formik?.touched.notes && formik?.errors.notes}</Text> | |
| 306 | - | |
| 307 | - </> | |
| 308 | - : | |
| 309 | - <Text onDoubleClick={() => handleDoubleClick("notes", data?.notes)}>{data?.notes ? data?.notes : ' - '}</Text> | |
| 310 | - } | |
| 310 | + <GridItem colSpan={{ base: 2 }}> | |
| 311 | + <Text fontSize="sm" fontWeight="bold" color={'blackAlpha.900'}> | |
| 312 | + {' '} | |
| 313 | + Task notes{' '} | |
| 314 | + </Text> | |
| 315 | + {editableField === 'notes' ? ( | |
| 316 | + <> | |
| 317 | + <Input id="text" name="notes" type="text" onChange={formik.handleChange} onBlur={handleBlur} value={formik.values.notes} autoFocus borderColor={formik?.errors?.notes && formik?.touched?.notes ? 'red.300' : null} /> | |
| 318 | + <Text mb="10px" color={'red'}> | |
| 319 | + {' '} | |
| 320 | + {formik?.errors.notes && formik?.touched.notes && formik?.errors.notes} | |
| 321 | + </Text> | |
| 322 | + </> | |
| 323 | + ) : ( | |
| 324 | + <Text onDoubleClick={() => handleDoubleClick('notes', data?.notes)}>{data?.notes ? data?.notes : ' - '}</Text> | |
| 325 | + )} | |
| 311 | 326 | </GridItem> |
| 312 | 327 | </Grid> |
| 313 | 328 | </Card> |
| 314 | 329 | </GridItem> |
| 315 | - | |
| 316 | 330 | </Grid> |
| 317 | - {(permission?.update || permission?.delete || user?.role === 'superAdmin') && <Card mt={3}> | |
| 318 | - <Grid templateColumns="repeat(6, 1fr)" gap={1}> | |
| 319 | - <GridItem colStart={6} > | |
| 320 | - <Flex justifyContent={"right"}> | |
| 321 | - {(permission?.update || user?.role === 'superAdmin') && <Button size="sm" onClick={() => setEdit(true)} leftIcon={<EditIcon />} mr={2.5} variant="outline" colorScheme="green">Edit</Button>} | |
| 322 | - {(permission?.delete || user?.role === 'superAdmin') && <Button size="sm" style={{ background: 'red.800' }} onClick={() => setDeleteManyModel(true)} leftIcon={<DeleteIcon />} colorScheme="red" >Delete</Button>} | |
| 323 | - </Flex> | |
| 324 | - </GridItem> | |
| 325 | - </Grid> | |
| 326 | - </Card>} | |
| 327 | - <AddEdit isOpen={edit} onClose={() => setEdit(false)} viewClose={onClose} id={id?.event ? id?.event?._def?.extendedProps?._id : id} userAction={"edit"} /> | |
| 328 | - <CommonDeleteModel isOpen={deleteManyModel} onClose={() => setDeleteManyModel(false)} type='Task' handleDeleteData={handleDeleteTask} ids={[id]} /> | |
| 329 | - </div > | |
| 330 | - ) | |
| 331 | -} | |
| 331 | + {(permission?.update || permission?.delete || user?.role === 'superAdmin') && ( | |
| 332 | + <Card mt={3}> | |
| 333 | + <Grid templateColumns="repeat(6, 1fr)" gap={1}> | |
| 334 | + <GridItem colStart={6}> | |
| 335 | + <Flex justifyContent={'right'}> | |
| 336 | + {(permission?.update || user?.role === 'superAdmin') && ( | |
| 337 | + <Button size="sm" onClick={() => setEdit(true)} leftIcon={<EditIcon />} mr={2.5} variant="outline" colorScheme="green"> | |
| 338 | + Edit | |
| 339 | + </Button> | |
| 340 | + )} | |
| 341 | + {(permission?.delete || user?.role === 'superAdmin') && ( | |
| 342 | + <Button size="sm" style={{ background: 'red.800' }} onClick={() => setDeleteManyModel(true)} leftIcon={<DeleteIcon />} colorScheme="red"> | |
| 343 | + Delete | |
| 344 | + </Button> | |
| 345 | + )} | |
| 346 | + </Flex> | |
| 347 | + </GridItem> | |
| 348 | + </Grid> | |
| 349 | + </Card> | |
| 350 | + )} | |
| 351 | + <AddEdit isOpen={edit} onClose={() => setEdit(false)} viewClose={onClose} id={id?.event ? id?.event?._def?.extendedProps?._id : id} userAction={'edit'} /> | |
| 352 | + <CommonDeleteModel isOpen={deleteManyModel} onClose={() => setDeleteManyModel(false)} type="Task" handleDeleteData={handleDeleteTask} ids={[id]} /> | |
| 353 | + </div> | |
| 354 | + ); | |
| 355 | +}; | |
| 332 | 356 | |
| 333 | -export default TaskView | |
| 357 | +export default TaskView; |