diff --git a/assets/stylesheets/App.css b/assets/stylesheets/App.css
index fb0a5b03..eba69484 100644
--- a/assets/stylesheets/App.css
+++ b/assets/stylesheets/App.css
@@ -1337,6 +1337,64 @@ span.ant-skeleton-input.ant-skeleton-input-sm.text-skeleton {
vertical-align: middle;
}
+.permissions-matrix-table .permissions-matrix-group-row > .ant-table-cell {
+ font-weight: 600;
+ background-color: color-mix(
+ in srgb,
+ var(--color-text) 6%,
+ var(--layout-header-bg)
+ );
+}
+
+.permissions-matrix-table
+ .permissions-matrix-group-row
+ > .ant-table-cell.ant-table-cell-row-hover {
+ background: color-mix(
+ in srgb,
+ var(--color-text) 10%,
+ var(--layout-header-bg)
+ );
+}
+
+.permissions-matrix-table .ant-table-row-expand-icon,
+.permissions-matrix-table .ant-table-row-indent {
+ display: none;
+}
+
+.permissions-matrix-expand-button.ant-btn {
+ width: 22px;
+ min-width: 22px;
+ height: 22px;
+ padding: 0;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ color: inherit;
+}
+
+.permissions-matrix-expand-button.ant-btn:hover,
+.permissions-matrix-expand-button.ant-btn:focus,
+.permissions-matrix-expand-button.ant-btn:focus-visible {
+ color: inherit;
+}
+
+.permissions-matrix-expand-spacer {
+ display: inline-block;
+ width: 18px;
+ height: 22px;
+ flex-shrink: 0;
+}
+
+.permissions-matrix-expand-icon {
+ font-size: 12px !important;
+ color: inherit;
+ transition: transform 0.2s ease;
+}
+
+.permissions-matrix-expand-icon-open {
+ transform: rotate(90deg);
+}
+
.permissions-matrix-table .ant-table-thead > tr > th {
vertical-align: bottom;
padding-top: 12px;
diff --git a/src/components/Dashboard/common/ObjectList.jsx b/src/components/Dashboard/common/ObjectList.jsx
index 15c346a7..639c17fb 100644
--- a/src/components/Dashboard/common/ObjectList.jsx
+++ b/src/components/Dashboard/common/ObjectList.jsx
@@ -4,7 +4,7 @@ import { Space, Typography } from 'antd'
const { Text } = Typography
-const ObjectList = ({ value, objectType, style }) => {
+const ObjectList = ({ value, objectType, style, showHyperlink = false }) => {
if (!value || !Array.isArray(value) || value.length === 0) {
return n/a
}
@@ -12,7 +12,12 @@ const ObjectList = ({ value, objectType, style }) => {
return (
{value.map((item) => (
-
+
))}
)
@@ -21,7 +26,8 @@ const ObjectList = ({ value, objectType, style }) => {
ObjectList.propTypes = {
value: PropTypes.array,
objectType: PropTypes.string,
- style: PropTypes.object
+ style: PropTypes.object,
+ showHyperlink: PropTypes.bool
}
export default ObjectList
diff --git a/src/components/Dashboard/common/ObjectProperty.jsx b/src/components/Dashboard/common/ObjectProperty.jsx
index 68a9bd0a..68b1f7f1 100644
--- a/src/components/Dashboard/common/ObjectProperty.jsx
+++ b/src/components/Dashboard/common/ObjectProperty.jsx
@@ -475,7 +475,13 @@ const ObjectProperty = ({
}
}
case 'objectList': {
- return
+ return (
+
+ )
}
case 'objectChildren': {
return (
@@ -958,7 +964,14 @@ const ObjectProperty = ({
)
case 'objectList':
- return
+ return (
+
+ )
case 'tags':
return (
{
const showError = useCallback(
(error, callback = null) => {
+ console.error(error)
+ console.error(error.response)
+ console.error(error.response.data)
+ console.error(error.response.data.code)
+ console.error(error.response.data.error)
+ console.error(error.response.data.message)
+ console.error(error.response.data.status)
+ console.error(error.response.data.timestamp)
+ console.error(error.response.data.path)
+ console.error(error.response.data.method)
const code = error.response.data.code || 'UNKNOWN'
if (code == 'UNAUTHORIZED') {
setUnauthenticated()
diff --git a/src/database/models/DocumentTemplate.js b/src/database/models/DocumentTemplate.js
index e5825dbd..0c339da6 100644
--- a/src/database/models/DocumentTemplate.js
+++ b/src/database/models/DocumentTemplate.js
@@ -208,7 +208,8 @@ export const DocumentTemplate = {
label: 'Document Printers',
required: false,
type: 'objectList',
- objectType: 'documentPrinter'
+ objectType: 'documentPrinter',
+ showHyperlink: true
},
{
name: 'content',
diff --git a/src/database/models/FilamentProfile.js b/src/database/models/FilamentProfile.js
index d837b7a2..477ce5eb 100644
--- a/src/database/models/FilamentProfile.js
+++ b/src/database/models/FilamentProfile.js
@@ -1,7 +1,8 @@
import { createElement, lazy } from 'react'
const FilamentProfileInfo = lazy(
- () => import('../../components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo')
+ () =>
+ import('../../components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo')
)
import FilamentProfileIcon from '../../components/Icons/FilamentProfileIcon'
import InfoCircleIcon from '../../components/Icons/InfoCircleIcon'
@@ -75,8 +76,15 @@ export const FilamentProfile = {
content: () => createElement(FilamentProfileInfo)
}
],
- columns: ['_reference', 'name', 'filamentType', 'filament', 'createdAt', 'updatedAt'],
- filters: ['_id','name','createdAt','updatedAt','_reference'],
+ columns: [
+ '_reference',
+ 'name',
+ 'filamentType',
+ 'filament',
+ 'createdAt',
+ 'updatedAt'
+ ],
+ filters: ['_id', 'name', 'createdAt', 'updatedAt', '_reference'],
sorters: ['name', 'createdAt', 'updatedAt'],
properties: [
{
@@ -1203,7 +1211,8 @@ export const FilamentProfile = {
type: 'objectList',
objectType: 'printerProfile',
span: 2,
- columnWidth: 220
+ columnWidth: 220,
+ showHyperlink: true
},
{
name: 'compatiblePrintersCondition',
diff --git a/src/database/models/Host.js b/src/database/models/Host.js
index 1e4a2a8c..2fa6d591 100644
--- a/src/database/models/Host.js
+++ b/src/database/models/Host.js
@@ -270,7 +270,8 @@ export const Host = {
objectType: 'file',
required: false,
readOnly: true,
- columnWidth: 200
+ columnWidth: 200,
+ showHyperlink: true
}
]
}
diff --git a/src/database/models/Job.js b/src/database/models/Job.js
index d97a58e0..a12121c1 100644
--- a/src/database/models/Job.js
+++ b/src/database/models/Job.js
@@ -245,7 +245,8 @@ export const Job = {
type: 'objectList',
objectType: 'printer',
required: true,
- columnWidth: 200
+ columnWidth: 200,
+ showHyperlink: true
}
],
stats: [
diff --git a/src/database/models/Listing.js b/src/database/models/Listing.js
index d89e4467..badb5e76 100644
--- a/src/database/models/Listing.js
+++ b/src/database/models/Listing.js
@@ -4,7 +4,8 @@ const ListingInfo = lazy(
() => import('../../components/Dashboard/Sales/Listings/ListingInfo')
)
const NewListingVarient = lazy(
- () => import('../../components/Dashboard/Sales/ListingVarients/NewListingVarient')
+ () =>
+ import('../../components/Dashboard/Sales/ListingVarients/NewListingVarient')
)
const PublishListing = lazy(
() => import('../../components/Dashboard/Sales/Listings/PublishListing')
@@ -76,7 +77,11 @@ export const Listing = {
label: 'New Listing Varient',
icon: PlusIcon,
content: (objectData, { onOk } = {}) => {
- return createElement(NewListingVarient, { defaultValues: { listing: objectData }, onOk, reset: true })
+ return createElement(NewListingVarient, {
+ defaultValues: { listing: objectData },
+ onOk,
+ reset: true
+ })
}
},
{ type: 'divider' },
@@ -308,7 +313,7 @@ export const Listing = {
name: 'courierServices',
label: 'Courier Services',
type: 'objectList',
- multiple: true,
+ showHyperlink: true,
objectType: 'courierService',
readOnly: false,
required: true,
diff --git a/src/database/models/Printer.js b/src/database/models/Printer.js
index 75060544..fa8fc48a 100644
--- a/src/database/models/Printer.js
+++ b/src/database/models/Printer.js
@@ -482,6 +482,7 @@ export const Printer = {
name: 'queue',
label: 'Queue',
type: 'objectList',
+ showHyperlink: true,
objectType: 'subJob',
required: false,
readOnly: true,
diff --git a/src/database/models/User.js b/src/database/models/User.js
index 37b39322..61ac11fe 100644
--- a/src/database/models/User.js
+++ b/src/database/models/User.js
@@ -185,6 +185,7 @@ export const User = {
name: 'groups',
label: 'Groups',
type: 'objectList',
+ showHyperlink: true,
objectType: 'userGroup',
span: 2,
columnWidth: 250
diff --git a/src/database/models/UserGroup.js b/src/database/models/UserGroup.js
index 2fe9a53a..81ab6708 100644
--- a/src/database/models/UserGroup.js
+++ b/src/database/models/UserGroup.js
@@ -75,8 +75,20 @@ export const UserGroup = {
content: () => createElement(UserGroupInfo)
}
],
- columns: ['_reference', 'name', 'permissionSettings', 'createdAt', 'updatedAt'],
- filters: ['name', 'permissionSettings', 'createdAt', 'updatedAt', '_reference'],
+ columns: [
+ '_reference',
+ 'name',
+ 'permissionSettings',
+ 'createdAt',
+ 'updatedAt'
+ ],
+ filters: [
+ 'name',
+ 'permissionSettings',
+ 'createdAt',
+ 'updatedAt',
+ '_reference'
+ ],
sorters: ['name', 'createdAt', '_id', 'updatedAt'],
properties: [
{
@@ -126,7 +138,8 @@ export const UserGroup = {
type: 'objectList',
objectType: 'permissionSetting',
span: 2,
- columnWidth: 250
+ columnWidth: 250,
+ showHyperlink: true
},
{
name: 'permissions',