diff --git a/assets/icons/documentjobicon.svg b/assets/icons/documentjobicon.svg
new file mode 100644
index 0000000..cc1ba74
--- /dev/null
+++ b/assets/icons/documentjobicon.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/assets/icons/fileicon.svg b/assets/icons/fileicon.svg
new file mode 100644
index 0000000..a5088c2
--- /dev/null
+++ b/assets/icons/fileicon.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/design_files/documentjobicon.afdesign b/design_files/documentjobicon.afdesign
new file mode 100644
index 0000000..124d60b
Binary files /dev/null and b/design_files/documentjobicon.afdesign differ
diff --git a/design_files/fileicon.afdesign b/design_files/fileicon.afdesign
new file mode 100644
index 0000000..38d6e13
Binary files /dev/null and b/design_files/fileicon.afdesign differ
diff --git a/src/components/Dashboard/Management/DocumentJobs.jsx b/src/components/Dashboard/Management/DocumentJobs.jsx
new file mode 100644
index 0000000..9c3e131
--- /dev/null
+++ b/src/components/Dashboard/Management/DocumentJobs.jsx
@@ -0,0 +1,98 @@
+import { useState, useRef } from 'react'
+import { Button, Flex, Space, Modal, Dropdown, message } from 'antd'
+import NewDocumentJob from './DocumentJobs/NewDocumentJob'
+import ObjectTable from '../common/ObjectTable'
+import PlusIcon from '../../Icons/PlusIcon'
+import ReloadIcon from '../../Icons/ReloadIcon'
+import useColumnVisibility from '../hooks/useColumnVisibility'
+import GridIcon from '../../Icons/GridIcon'
+import ListIcon from '../../Icons/ListIcon'
+import useViewMode from '../hooks/useViewMode'
+import ColumnViewButton from '../common/ColumnViewButton'
+
+const DocumentJobs = () => {
+ const [messageApi, contextHolder] = message.useMessage()
+ const [newDocumentJobOpen, setNewDocumentJobOpen] = useState(false)
+ const tableRef = useRef()
+
+ const [viewMode, setViewMode] = useViewMode('documentJob')
+
+ const [columnVisibility, setColumnVisibility] =
+ useColumnVisibility('documentJob')
+
+ const actionItems = {
+ items: [
+ {
+ label: 'New Document Job',
+ key: 'newDocumentJob',
+ icon:
+ },
+ { type: 'divider' },
+ {
+ label: 'Reload List',
+ key: 'reloadList',
+ icon:
+ }
+ ],
+ onClick: ({ key }) => {
+ if (key === 'reloadList') {
+ tableRef.current?.reload()
+ } else if (key === 'newDocumentJob') {
+ setNewDocumentJobOpen(true)
+ }
+ }
+ }
+
+ return (
+ <>
+
+ {contextHolder}
+
+
+
+
+
+
+
+
+ : }
+ onClick={() =>
+ setViewMode(viewMode === 'cards' ? 'list' : 'cards')
+ }
+ />
+
+
+
+
+ setNewDocumentJobOpen(false)}
+ footer={null}
+ destroyOnHidden={true}
+ width={900}
+ >
+ {
+ setNewDocumentJobOpen(false)
+ messageApi.success('New note type created successfully.')
+ tableRef.current?.reload()
+ }}
+ reset={!newDocumentJobOpen}
+ />
+
+ >
+ )
+}
+
+export default DocumentJobs
diff --git a/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx b/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx
new file mode 100644
index 0000000..68672a3
--- /dev/null
+++ b/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx
@@ -0,0 +1,195 @@
+import { useRef, useState } from 'react'
+import { useLocation } from 'react-router-dom'
+import { Space, Flex, Card } from 'antd'
+import { LoadingOutlined } from '@ant-design/icons'
+import loglevel from 'loglevel'
+import config from '../../../../config.js'
+import useCollapseState from '../../hooks/useCollapseState.js'
+import NotesPanel from '../../common/NotesPanel.jsx'
+import InfoCollapse from '../../common/InfoCollapse.jsx'
+import ObjectInfo from '../../common/ObjectInfo.jsx'
+import ViewButton from '../../common/ViewButton.jsx'
+import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
+import NoteIcon from '../../../Icons/NoteIcon.jsx'
+import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
+import ObjectForm from '../../common/ObjectForm.jsx'
+import EditButtons from '../../common/EditButtons.jsx'
+import LockIndicator from '../../common/LockIndicator.jsx'
+import ActionHandler from '../../common/ActionHandler.jsx'
+import ObjectActions from '../../common/ObjectActions.jsx'
+import ObjectTable from '../../common/ObjectTable.jsx'
+import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx'
+import DocumentPrintButton from '../../common/DocumentPrintButton.jsx'
+
+const log = loglevel.getLogger('DocumentJobInfo')
+log.setLevel(config.logLevel)
+
+const DocumentJobInfo = () => {
+ const location = useLocation()
+ const objectFormRef = useRef(null)
+ const actionHandlerRef = useRef(null)
+ const documentJobId = new URLSearchParams(location.search).get(
+ 'documentJobId'
+ )
+ const [collapseState, updateCollapseState] = useCollapseState(
+ 'DocumentJobInfo',
+ {
+ info: true,
+ notes: true,
+ auditLogs: true
+ }
+ )
+ const [objectFormState, setEditFormState] = useState({
+ isEditing: false,
+ editLoading: false,
+ formValid: false,
+ lock: null,
+ loading: false,
+ objectData: {}
+ })
+
+ const actions = {
+ reload: () => {
+ objectFormRef?.current?.fetchObject?.()
+ return true
+ },
+ edit: () => {
+ objectFormRef?.current?.startEditing?.()
+ return false
+ },
+ cancelEdit: () => {
+ objectFormRef?.current?.cancelEditing?.()
+ return true
+ },
+ finishEdit: () => {
+ objectFormRef?.current?.handleUpdate?.()
+ return true
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ {
+ actionHandlerRef.current.callAction('finishEdit')
+ }}
+ cancelEditing={() => {
+ actionHandlerRef.current.callAction('cancelEdit')
+ }}
+ startEditing={() => {
+ actionHandlerRef.current.callAction('edit')
+ }}
+ editLoading={objectFormState.editLoading}
+ formValid={objectFormState.formValid}
+ disabled={objectFormState.lock?.locked || objectFormState.loading}
+ loading={objectFormState.editLoading}
+ />
+
+
+
+
+
+ }
+ active={collapseState.info}
+ onToggle={(expanded) => updateCollapseState('info', expanded)}
+ collapseKey='info'
+ >
+ {
+ setEditFormState((prev) => ({ ...prev, ...state }))
+ }}
+ >
+ {({ loading, isEditing, objectData }) => (
+ }
+ isEditing={isEditing}
+ type='documentJob'
+ objectData={objectData}
+ />
+ )}
+
+
+
+ }
+ active={collapseState.notes}
+ onToggle={(expanded) => updateCollapseState('notes', expanded)}
+ collapseKey='notes'
+ >
+
+
+
+
+ }
+ active={collapseState.auditLogs}
+ onToggle={(expanded) =>
+ updateCollapseState('auditLogs', expanded)
+ }
+ collapseKey='auditLogs'
+ >
+ {objectFormState.loading ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ >
+ )
+}
+
+export default DocumentJobInfo
diff --git a/src/components/Dashboard/Management/DocumentJobs/NewDocumentJob.jsx b/src/components/Dashboard/Management/DocumentJobs/NewDocumentJob.jsx
new file mode 100644
index 0000000..4e35bcc
--- /dev/null
+++ b/src/components/Dashboard/Management/DocumentJobs/NewDocumentJob.jsx
@@ -0,0 +1,66 @@
+import PropTypes from 'prop-types'
+import ObjectInfo from '../../common/ObjectInfo'
+import NewObjectForm from '../../common/NewObjectForm'
+import WizardView from '../../common/WizardView'
+import TemplatePreview from '../../common/TemplatePreview'
+
+const NewDocumentJob = ({ onOk, defaultValues = {} }) => {
+ return (
+
+ {({ handleSubmit, submitLoading, objectData, formValid }) => {
+ const steps = [
+ {
+ title: 'Required',
+ key: 'required',
+ content: (
+
+ )
+ }
+ ]
+ return (
+
+ {
+ console.log(message)
+ }}
+ />
+
+ }
+ onSubmit={() => {
+ handleSubmit()
+ onOk()
+ }}
+ />
+ )
+ }}
+
+ )
+}
+
+NewDocumentJob.propTypes = {
+ onOk: PropTypes.func.isRequired,
+ reset: PropTypes.bool,
+ defaultValues: PropTypes.object
+}
+
+export default NewDocumentJob
diff --git a/src/components/Dashboard/Management/Files.jsx b/src/components/Dashboard/Management/Files.jsx
new file mode 100644
index 0000000..d0e3477
--- /dev/null
+++ b/src/components/Dashboard/Management/Files.jsx
@@ -0,0 +1,68 @@
+import { useRef } from 'react'
+import { Button, Flex, Space, Dropdown } from 'antd'
+import ObjectTable from '../common/ObjectTable'
+import ReloadIcon from '../../Icons/ReloadIcon'
+import useColumnVisibility from '../hooks/useColumnVisibility'
+import GridIcon from '../../Icons/GridIcon'
+import ListIcon from '../../Icons/ListIcon'
+import useViewMode from '../hooks/useViewMode'
+import ColumnViewButton from '../common/ColumnViewButton'
+
+const Files = () => {
+ const tableRef = useRef()
+
+ const [viewMode, setViewMode] = useViewMode('file')
+
+ const [columnVisibility, setColumnVisibility] = useColumnVisibility('file')
+
+ const actionItems = {
+ items: [
+ {
+ label: 'Reload List',
+ key: 'reloadList',
+ icon:
+ }
+ ],
+ onClick: ({ key }) => {
+ if (key === 'reloadList') {
+ tableRef.current?.reload()
+ }
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ : }
+ onClick={() =>
+ setViewMode(viewMode === 'cards' ? 'list' : 'cards')
+ }
+ />
+
+
+
+
+ >
+ )
+}
+
+export default Files
diff --git a/src/components/Dashboard/Management/Files/FileInfo.jsx b/src/components/Dashboard/Management/Files/FileInfo.jsx
new file mode 100644
index 0000000..f527794
--- /dev/null
+++ b/src/components/Dashboard/Management/Files/FileInfo.jsx
@@ -0,0 +1,192 @@
+import { useRef, useState } from 'react'
+import { useLocation } from 'react-router-dom'
+import { Space, Flex, Card } from 'antd'
+import loglevel from 'loglevel'
+import config from '../../../../config.js'
+import useCollapseState from '../../hooks/useCollapseState.js'
+import NotesPanel from '../../common/NotesPanel.jsx'
+import InfoCollapse from '../../common/InfoCollapse.jsx'
+import ObjectInfo from '../../common/ObjectInfo.jsx'
+import ViewButton from '../../common/ViewButton.jsx'
+import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
+import NoteIcon from '../../../Icons/NoteIcon.jsx'
+import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
+import ObjectForm from '../../common/ObjectForm.jsx'
+import EditButtons from '../../common/EditButtons.jsx'
+import LockIndicator from '../../common/LockIndicator.jsx'
+import ActionHandler from '../../common/ActionHandler.jsx'
+import ObjectActions from '../../common/ObjectActions.jsx'
+import ObjectTable from '../../common/ObjectTable.jsx'
+import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx'
+import DocumentPrintButton from '../../common/DocumentPrintButton.jsx'
+
+const log = loglevel.getLogger('FileInfo')
+log.setLevel(config.logLevel)
+
+const FileInfo = () => {
+ const location = useLocation()
+ const objectFormRef = useRef(null)
+ const actionHandlerRef = useRef(null)
+ const fileId = new URLSearchParams(location.search).get('fileId')
+ const [collapseState, updateCollapseState] = useCollapseState('FileInfo', {
+ info: true,
+ notes: true,
+ auditLogs: true
+ })
+ const [objectFormState, setEditFormState] = useState({
+ isEditing: false,
+ editLoading: false,
+ formValid: false,
+ lock: null,
+ loading: false,
+ objectData: {}
+ })
+
+ const actions = {
+ reload: () => {
+ objectFormRef?.current?.handleFetchObject?.()
+ return true
+ },
+ edit: () => {
+ objectFormRef?.current?.startEditing?.()
+ return false
+ },
+ cancelEdit: () => {
+ objectFormRef?.current?.cancelEditing?.()
+ return true
+ },
+ finishEdit: () => {
+ objectFormRef?.current?.handleUpdate?.()
+ return true
+ },
+ delete: () => {
+ objectFormRef?.current?.handleDelete?.()
+ return true
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ {
+ actionHandlerRef.current.callAction('finishEdit')
+ }}
+ cancelEditing={() => {
+ actionHandlerRef.current.callAction('cancelEdit')
+ }}
+ startEditing={() => {
+ actionHandlerRef.current.callAction('edit')
+ }}
+ editLoading={objectFormState.editLoading}
+ formValid={objectFormState.formValid}
+ disabled={objectFormState.lock?.locked || objectFormState.loading}
+ loading={objectFormState.editLoading}
+ />
+
+
+
+
+
+ }
+ active={collapseState.info}
+ onToggle={(expanded) => updateCollapseState('info', expanded)}
+ collapseKey='info'
+ >
+ {
+ setEditFormState((prev) => ({ ...prev, ...state }))
+ }}
+ >
+ {({ loading, isEditing, objectData }) => (
+
+ )}
+
+
+
+ }
+ active={collapseState.notes}
+ onToggle={(expanded) => updateCollapseState('notes', expanded)}
+ collapseKey='notes'
+ >
+
+
+
+
+ }
+ active={collapseState.auditLogs}
+ onToggle={(expanded) =>
+ updateCollapseState('auditLogs', expanded)
+ }
+ collapseKey='auditLogs'
+ >
+ {objectFormState.loading ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ >
+ )
+}
+
+export default FileInfo
diff --git a/src/components/Dashboard/Management/ManagementSidebar.jsx b/src/components/Dashboard/Management/ManagementSidebar.jsx
index 97320c6..fd4b649 100644
--- a/src/components/Dashboard/Management/ManagementSidebar.jsx
+++ b/src/components/Dashboard/Management/ManagementSidebar.jsx
@@ -15,6 +15,8 @@ import DocumentPrinterIcon from '../../Icons/DocumentPrinterIcon'
import DocumentTemplateIcon from '../../Icons/DocumentTemplateIcon'
import DocumentIcon from '../../Icons/DocumentIcon'
import DocumentSizeIcon from '../../Icons/DocumentSizeIcon'
+import DocumentJobIcon from '../../Icons/DocumentJobIcon'
+import FileIcon from '../../Icons/FileIcon'
const items = [
{
@@ -65,6 +67,12 @@ const items = [
label: 'Document Printers',
path: '/dashboard/management/documentprinters'
},
+ {
+ key: 'documentJobs',
+ icon: ,
+ label: 'Document Jobs',
+ path: '/dashboard/management/documentjobs'
+ },
{
key: 'documentTemplates',
icon: ,
@@ -79,13 +87,14 @@ const items = [
}
]
},
-
+ { type: 'divider' },
{
key: 'hosts',
icon: ,
label: 'Hosts',
path: '/dashboard/management/hosts'
},
+ { type: 'divider' },
{
key: 'users',
icon: ,
@@ -98,6 +107,12 @@ const items = [
label: 'Settings',
path: '/dashboard/management/settings'
},
+ {
+ key: 'files',
+ icon: ,
+ label: 'Files',
+ path: '/dashboard/management/files'
+ },
{
key: 'auditLogs',
icon: ,
@@ -128,10 +143,12 @@ const routeKeyMap = {
'/dashboard/management/notetypes': 'noteTypes',
'/dashboard/management/settings': 'settings',
'/dashboard/management/auditlogs': 'auditLogs',
+ '/dashboard/management/files': 'files',
'/dashboard/management/hosts': 'hosts',
'/dashboard/management/documentsizes': 'documentSizes',
'/dashboard/management/documentprinters': 'documentPrinters',
- '/dashboard/management/documenttemplates': 'documentTemplates'
+ '/dashboard/management/documenttemplates': 'documentTemplates',
+ '/dashboard/management/documentjobs': 'documentJobs'
}
const ManagementSidebar = (props) => {
diff --git a/src/components/Icons/DocumentJobIcon.jsx b/src/components/Icons/DocumentJobIcon.jsx
new file mode 100644
index 0000000..01fb387
--- /dev/null
+++ b/src/components/Icons/DocumentJobIcon.jsx
@@ -0,0 +1,6 @@
+import Icon from '@ant-design/icons'
+import CustomIconSvg from '../../../assets/icons/documentjobicon.svg?react'
+
+const DocumentJobIcon = (props) =>
+
+export default DocumentJobIcon
diff --git a/src/components/Icons/FileIcon.jsx b/src/components/Icons/FileIcon.jsx
new file mode 100644
index 0000000..2419ae6
--- /dev/null
+++ b/src/components/Icons/FileIcon.jsx
@@ -0,0 +1,6 @@
+import Icon from '@ant-design/icons'
+import CustomIconSvg from '../../../assets/icons/fileicon.svg?react'
+
+const FileIcon = (props) =>
+
+export default FileIcon
diff --git a/src/database/models/DocumentJob.js b/src/database/models/DocumentJob.js
new file mode 100644
index 0000000..e1b5c55
--- /dev/null
+++ b/src/database/models/DocumentJob.js
@@ -0,0 +1,119 @@
+import InfoCircleIcon from '../../components/Icons/InfoCircleIcon'
+import ReloadIcon from '../../components/Icons/ReloadIcon'
+import EditIcon from '../../components/Icons/EditIcon'
+import DocumentJobIcon from '../../components/Icons/DocumentJobIcon'
+
+export const DocumentJob = {
+ name: 'documentJob',
+ label: 'Document Job',
+ prefix: 'DSZ',
+ icon: DocumentJobIcon,
+ actions: [
+ {
+ name: 'info',
+ label: 'Info',
+ default: true,
+ row: true,
+ icon: InfoCircleIcon,
+ url: (_id) =>
+ `/dashboard/management/documentjobs/info?documentJobId=${_id}`
+ },
+
+ {
+ name: 'reload',
+ label: 'Reload',
+ icon: ReloadIcon,
+ url: (_id) =>
+ `/dashboard/management/documentjobs/info?documentJobId=${_id}&action=reload`
+ },
+ {
+ name: 'edit',
+ label: 'Edit',
+ row: true,
+ icon: EditIcon,
+ url: (_id) =>
+ `/dashboard/management/documentjobs/info?documentJobId=${_id}&action=edit`
+ }
+ ],
+ columns: ['name', '_id', 'width', 'height', 'createdAt', 'updatedAt'],
+ filters: ['name', '_id', 'width', 'height'],
+ sorters: ['name', 'width', 'height', 'createdAt', 'updatedAt'],
+ properties: [
+ {
+ name: '_id',
+ label: 'ID',
+ type: 'id',
+ objectType: 'documentJob',
+ showCopy: true
+ },
+ {
+ name: 'createdAt',
+ label: 'Created At',
+ type: 'dateTime',
+ readOnly: true
+ },
+ {
+ name: 'name',
+ label: 'Name',
+ required: true,
+ type: 'text',
+ columnWidth: 200,
+ columnFixed: 'left',
+ value: (objectData) => {
+ return `${objectData?.documentTemplate?.name || 'No template'} (${objectData?.object?.name || 'No name'})`
+ }
+ },
+ {
+ name: 'updatedAt',
+ label: 'Updated At',
+ type: 'dateTime',
+ readOnly: true
+ },
+ {
+ name: 'objectType',
+ label: 'Object Type',
+ required: true,
+ columnWidth: 150,
+ type: 'objectType'
+ },
+ {
+ name: 'object',
+ label: 'Object',
+ required: true,
+ columnWidth: 150,
+ type: 'object',
+ objectType: (objectData) => {
+ return objectData?.objectType
+ }
+ },
+ {
+ name: 'documentTemplate',
+ label: 'Template',
+ required: true,
+ columnWidth: 150,
+ type: 'object',
+ objectType: 'documentTemplate',
+ masterFilter: (objectData) => {
+ return {
+ active: true,
+ global: false,
+ objectType: objectData.objectType
+ }
+ }
+ },
+ {
+ name: 'documentPrinter',
+ label: 'Printer',
+ required: true,
+ columnWidth: 150,
+ type: 'object',
+ objectType: 'documentPrinter',
+ masterFilter: () => {
+ return {
+ active: true,
+ online: true
+ }
+ }
+ }
+ ]
+}
diff --git a/src/database/models/File.js b/src/database/models/File.js
new file mode 100644
index 0000000..cb4dbcc
--- /dev/null
+++ b/src/database/models/File.js
@@ -0,0 +1,119 @@
+import FileIcon from '../../components/Icons/FileIcon'
+import InfoCircleIcon from '../../components/Icons/InfoCircleIcon'
+import EditIcon from '../../components/Icons/EditIcon'
+import ReloadIcon from '../../components/Icons/ReloadIcon'
+import BinIcon from '../../components/Icons/BinIcon'
+
+export const File = {
+ name: 'file',
+ label: 'File',
+ prefix: 'VEN',
+ icon: FileIcon,
+ actions: [
+ {
+ name: 'info',
+ label: 'Info',
+ default: true,
+ row: true,
+ icon: InfoCircleIcon,
+ url: (_id) => `/dashboard/management/files/info?fileId=${_id}`
+ },
+ {
+ name: 'reload',
+ label: 'Reload',
+ icon: ReloadIcon,
+ url: (_id) =>
+ `/dashboard/management/files/info?fileId=${_id}&action=reload`
+ },
+ {
+ name: 'edit',
+ label: 'Edit',
+ row: true,
+ icon: EditIcon,
+ url: (_id) => `/dashboard/management/files/info?fileId=${_id}&action=edit`
+ },
+ { type: 'divider' },
+ {
+ name: 'delete',
+ label: 'Delete',
+ icon: BinIcon,
+ danger: true,
+ url: (_id) =>
+ `/dashboard/management/files/info?fileId=${_id}&action=delete`
+ }
+ ],
+ url: (id) => `/dashboard/management/files/info?fileId=${id}`,
+ columns: ['name', '_id', 'type', 'size', 'temp', 'createdAt'],
+ filters: ['name', '_id', 'type', 'temp'],
+ sorters: ['name', 'type', 'size', 'createdAt', 'temp'],
+ group: ['type'],
+ properties: [
+ {
+ name: '_id',
+ label: 'ID',
+ columnFixed: 'left',
+ type: 'id',
+ objectType: 'file',
+ showCopy: true
+ },
+ {
+ name: 'createdAt',
+ label: 'Created At',
+ type: 'dateTime',
+ readOnly: true
+ },
+ {
+ name: 'name',
+ label: 'Name',
+ columnFixed: 'left',
+ required: true,
+ type: 'text'
+ },
+ {
+ name: 'updatedAt',
+ label: 'Updated At',
+ type: 'dateTime',
+ readOnly: true
+ },
+ {
+ name: 'type',
+ label: 'Type',
+ type: 'text',
+ readOnly: true,
+ required: true
+ },
+ {
+ name: 'size',
+ label: 'Size',
+ type: 'number',
+ readOnly: true,
+ required: true,
+ suffix: () => {
+ return 'gb'
+ }
+ },
+ {
+ name: 'email',
+ label: 'Email',
+ columnWidth: 300,
+ type: 'email',
+ readOnly: false,
+ required: false
+ },
+ {
+ name: 'phone',
+ label: 'Phone',
+ type: 'phone',
+ readOnly: false,
+ required: false
+ },
+ {
+ name: 'website',
+ label: 'Website',
+ columnWidth: 300,
+ type: 'url',
+ readOnly: false,
+ required: false
+ }
+ ]
+}
diff --git a/src/routes/ManagementRoutes.jsx b/src/routes/ManagementRoutes.jsx
index 3664ca4..e9504d9 100644
--- a/src/routes/ManagementRoutes.jsx
+++ b/src/routes/ManagementRoutes.jsx
@@ -24,7 +24,11 @@ import DocumentTemplates from '../components/Dashboard/Management/DocumentTempla
import DocumentTemplateInfo from '../components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx'
import DocumentPrinters from '../components/Dashboard/Management/DocumentPrinters.jsx'
import DocumentPrinterInfo from '../components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx'
+import DocumentJobs from '../components/Dashboard/Management/DocumentJobs.jsx'
+import DocumentJobInfo from '../components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx'
import DocumentTemplateDesign from '../components/Dashboard/Management/DocumentTemplates/DocumentTemplateDesign.jsx'
+import Files from '../components/Dashboard/Management/Files.jsx'
+import FileInfo from '../components/Dashboard/Management/Files/FileInfo.jsx'
const ManagementRoutes = [
} />,
@@ -62,6 +66,12 @@ const ManagementRoutes = [
path='management/vendors/info'
element={}
/>,
+ } />,
+ }
+ />,
} />,
} />,
}
/>,
+ }
+ />,
+ }
+ />,