diff --git a/frontend/src/css/_calendar.css b/frontend/src/css/_calendar.css
index 0d60cef..e3945b4 100644
--- a/frontend/src/css/_calendar.css
+++ b/frontend/src/css/_calendar.css
@@ -1,29 +1,29 @@
.rbc-event {
- @apply bg-skyBlueTheme-buttonColor !important;
+ @apply bg-blue-600 !important;
}
.rbc-show-more {
- @apply text-primaryText dark:text-white bg-transparent !important;
+ @apply dark:text-white bg-transparent !important;
}
.rbc-btn-group button {
- @apply text-primaryText border-gray-400 dark:text-white !important;
+ @apply dark:text-white !important;
}
.rbc-btn-group button:hover {
- @apply bg-skyBlueTheme-buttonColor text-white dark:bg-dark-700 !important;
+ @apply text-white dark:bg-dark-700 !important;
}
.rbc-btn-group button.rbc-active {
- @apply bg-skyBlueTheme-buttonColor text-white dark:bg-blue-600 !important;
+ @apply text-black dark:bg-blue-600 !important;
}
.rbc-btn-group button:focus {
- @apply bg-skyBlueTheme-buttonColor dark:bg-blue-600 !important;
+ @apply dark:bg-blue-600 !important;
}
.rbc-day-bg.rbc-off-range-bg {
- @apply bg-skyBlueTheme-mainBG dark:bg-dark-800 !important;
+ @apply dark:bg-dark-800 !important;
}
.rbc-current-time-indicator{
@apply h-1 !important;
@@ -36,29 +36,4 @@
@apply dark:bg-dark-500 !important;
}
-
-.rbc-day-bg,
-.rbc-timeslot-group,
-.rbc-time-header,
-.rbc-event,
-.rbc-btn-group,
-.rbc-month-view,
-.rbc-month-view .rbc-header,
-.rbc-month-row,
-.rbc-date-cell {
- @apply border-gray-400 !important;
-}
-
-.rbc-timeslot-group {
- @apply border-gray-400 !important;
-}
-
-.rbc-time-header,
-.rbc-month-row {
- @apply border-gray-400 !important;
-}
-
-.rbc-date-cell {
- @apply border-gray-400 !important;
-}
diff --git a/frontend/src/css/_checkbox-radio-switch.css b/frontend/src/css/_checkbox-radio-switch.css
index c9b637c..b2dab5c 100644
--- a/frontend/src/css/_checkbox-radio-switch.css
+++ b/frontend/src/css/_checkbox-radio-switch.css
@@ -12,7 +12,7 @@
}
.checkbox input[type=checkbox]:focus+.check, .radio input[type=radio]:focus+.check, .switch input[type=checkbox]:focus+.check {
- @apply ring ring-skyBlueTheme-800 ;
+ @apply ring ring-blue-700 ;
}
.checkbox input[type=checkbox]+.check, .radio input[type=radio]+.check {
@@ -44,7 +44,7 @@
}
.switch input[type=checkbox]:checked+.check, .checkbox input[type=checkbox]:checked+.check, .radio input[type=radio]:checked+.check {
- @apply bg-skyBlueTheme-buttonColor border-skyBlueTheme-buttonColor ;
+ @apply bg-blue-600 border-blue-600 ;
}
.switch input[type=checkbox]+.check:before {
diff --git a/frontend/src/css/_rich-text.css b/frontend/src/css/_rich-text.css
index cdda7ac..8b13789 100644
--- a/frontend/src/css/_rich-text.css
+++ b/frontend/src/css/_rich-text.css
@@ -1,59 +1 @@
-
-
-/* Editor background */
-.tox .tox-editor-container {
- @apply bg-skyBlueTheme-mainBG dark:bg-dark-800 !important;
-}
-
-/* Toolbar background */
-.tox .tox-toolbar,
-.tox .tox-editor-header,
-.tox .tox-menu,
-.tox .tox-menubar,
-.tox .tox-toolbar__primary {
- @apply bg-skyBlueTheme-cardColor dark:bg-dark-800 !important;
-}
-
-.tox .tox-collection--toolbar .tox-collection__item--active, .tox .tox-collection--toolbar .tox-collection__item--enabled {
- @apply bg-skyBlueTheme-diversityMain dark:bg-dark-600 !important;
-}
-
-/* Toolbar button color */
-.tox .tox-toolbar__group button, .tox .tox-mbtn {
- @apply text-skyBlueTheme-text dark:text-white !important;
-}
-
-.tox .tox-tbtn svg {
- @apply fill-skyBlueTheme-text dark:text-white !important;
-}
-
-/* Toolbar button hover/active state */
-.tox .tox-tbtn--enabled, .tox .tox-tbtn--enabled:hover, .tox .tox-tbtn:hover, .tox .tox-mbtn:hover {
- @apply bg-skyBlueTheme-diversityMain dark:bg-dark-600 !important;
-}
-
-/* Status bar styles */
-.tox .tox-statusbar, .tox {
- @apply bg-skyBlueTheme-mainBG dark:bg-dark-800 text-skyBlueTheme-text dark:text-white !important;
-}
-
-.tox .tox-statusbar a, .tox .tox-statusbar__path-item, .tox .tox-statusbar__wordcount {
- @apply text-skyBlueTheme-text dark:text-white !important;
-
-}
-
-/* Dropdown menu item text */
-.tox .tox-collection__item {
- @apply text-skyBlueTheme-text dark:text-white !important;
-}
-
-/* Editor content area */
-.tox.tox-tinymce {
- @apply border border-skyBlueTheme-outsideCardColor dark:border-dark-700 text-skyBlueTheme-text dark:text-white !important;
-}
-
-/* Change the content area background color */
-.tox .tox-edit-area__iframe {
- @apply bg-skyBlueTheme-mainBG dark:bg-dark-800 text-skyBlueTheme-text dark:text-white !important;
-}
diff --git a/frontend/src/css/_select-dropdown.css b/frontend/src/css/_select-dropdown.css
index 79592bd..d610d8a 100644
--- a/frontend/src/css/_select-dropdown.css
+++ b/frontend/src/css/_select-dropdown.css
@@ -1,31 +1,31 @@
.react-select__control {
- @apply bg-skyBlueTheme-cardColor rounded-lg dark:bg-dark-800 dark:border-dark-700 !important;
+ @apply dark:bg-dark-800 dark:border-dark-700 !important;
}
.react-select__single-value {
- @apply text-primaryText dark:text-white !important;
+ @apply dark:text-white !important;
}
.react-select__menu {
- @apply bg-skyBlueTheme-cardColor dark:border-dark-700
+ @apply dark:border-dark-700
}
.react-select__menu-list {
- @apply bg-skyBlueTheme-cardColor dark:bg-dark-800 dark:border-dark-700 dark:rounded !important;
+ @apply dark:bg-dark-800 dark:border-dark-700 dark:rounded !important;
}
.react-select__option {
- @apply cursor-pointer hover:bg-gray-200 hover:bg-skyBlueTheme-cardColor dark:hover:bg-dark-700 !important;
+ @apply cursor-pointer hover:bg-gray-200 dark:hover:bg-dark-700 !important;
}
.react-select__option--is-focused {
- @apply bg-skyBlueTheme-cardColor text-primaryText dark:bg-dark-800 dark:text-white hover:dark:bg-dark-700 hover:dark:text-white !important;
+ @apply dark:bg-dark-800 dark:text-white hover:dark:bg-dark-700 hover:dark:text-white !important;
}
.react-select__option--is-selected, .react-select__option--is-selected:hover {
- @apply bg-skyBlueTheme-cardColor dark:bg-dark-600 !important;
+ @apply dark:bg-dark-600 !important;
}
.react-select__multi-value__remove {
- @apply text-skyBlueTheme-cardColor dark:bg-dark-600 dark:text-white hover:dark:bg-red-300 hover:dark:text-red-600 !important;
+ @apply dark:bg-dark-600 dark:text-white hover:dark:bg-red-300 hover:dark:text-red-600 !important;
}
diff --git a/frontend/src/css/_table.css b/frontend/src/css/_table.css
index 4d28e68..893dc89 100644
--- a/frontend/src/css/_table.css
+++ b/frontend/src/css/_table.css
@@ -54,11 +54,11 @@
}
tbody tr, tbody tr:nth-child(odd) {
- @apply lg:hover:bg-skyBlueTheme-mainBG;
+ @apply lg:hover:bg-pavitra-300/70;
}
tbody tr:nth-child(even) {
- @apply lg:bg-skyBlueTheme-mainBG dark:bg-pavitra-300/70;
+ @apply lg:bg-pavitra-300 dark:bg-pavitra-300/70;
}
td:before {
@@ -67,14 +67,12 @@
}
tbody tr td {
- @apply text-sm font-normal text-primaryText dark:text-white;
+ @apply text-sm font-normal text-pavitra-900 dark:text-white;
}
.datagrid--table, .MuiDataGrid-root {
@apply rounded border-none !important;
- @apply font-sans text-primaryText !important;
-
}
.datagrid--header {
@@ -85,32 +83,28 @@
.datagrid--header .MuiIconButton-root,
.datagrid--cell,
.datagrid--cell .MuiIconButton-root {
- @apply text-primaryText dark:text-white;
+ @apply dark:text-white;
}
.datagrid--cell .MuiDataGrid-booleanCell {
- @apply text-primaryText dark:text-white !important;
+ @apply dark:text-white !important;
}
.datagrid--cell .MuiIconButton-root:hover {
- @apply text-primaryText dark:text-white dark:bg-dark-700;
+ @apply dark:text-white dark:bg-dark-700;
}
.datagrid--row {
- @apply even:bg-skyBlueTheme-mainBG dark:even:bg-[#1B1D22] dark:odd:bg-dark-900 !important;
- }
-
- .datagrid--row:hover {
- @apply bg-skyBlueTheme-mainBG !important;
+ @apply even:bg-gray-100 dark:even:bg-[#1B1D22] dark:odd:bg-dark-900 !important;
}
.datagrid--table .MuiTablePagination-root {
- @apply text-primaryText dark:text-white;
+ @apply dark:text-white;
}
.datagrid--table .MuiTablePagination-root .MuiButtonBase-root:disabled {
- @apply text-primaryText dark:text-dark-700;
+ @apply dark:text-dark-700;
}
.datagrid--table .MuiTablePagination-root .MuiButtonBase-root:hover {
@@ -118,6 +112,6 @@
}
.MuiButton-colorInherit {
- @apply text-skyBlueTheme-iconsColor dark:text-dark-700 !important;
+ @apply text-blue-600 dark:text-dark-700 !important;
}
}
diff --git a/frontend/src/css/main.css b/frontend/src/css/main.css
index 2b31aaa..f061e28 100644
--- a/frontend/src/css/main.css
+++ b/frontend/src/css/main.css
@@ -12,40 +12,11 @@
@import "_theme.css";
@import '_rich-text.css';
-@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap');
-
-
-body {
- @apply font-sans text-primaryText !important;
- }
-.MuiList-root,
-.MuiListItemIcon-root {
- @apply text-skyBlueTheme-buttonColor !important;
-}
-.MuiCheckbox-colorPrimary{
- @apply text-skyBlueTheme-buttonColor !important;
-}
-.MuiDataGrid-row.Mui-selected{
- @apply bg-skyBlueTheme-mainBG !important;
-}
-.MuiDataGrid-withBorderColor{
- @apply border-skyBlueTheme-mainBG !important;
-}
-.MuiDataGrid-cell:focus{
- @apply outline-skyBlueTheme-buttonColor !important;
-}
.introjs-tooltip {
@apply min-w-[400px] max-w-[480px] p-2 !important;
}
-.introjs-tooltipReferenceLayer * {
- @apply font-sans text-base text-gray-900;
-
-font-family: 'Poppins', sans-serif !important;
-
-}
-
.good-img {
@apply -mt-96 !important;
}
@@ -53,12 +24,12 @@ font-family: 'Poppins', sans-serif !important;
@apply -mt-72 !important;
}
.introjs-button {
- @apply bg-skyBlueTheme-buttonColor text-white !important;
+ @apply bg-blue-600 text-white !important;
text-shadow: none !important;
}
.introjs-bullets ul li a.active {
- @apply bg-skyBlueTheme-iconsColor !important;
+ @apply bg-blue-600 !important;
}
.introjs-prevbutton{
- @apply bg-transparent border border-skyBlueTheme-buttonColor text-skyBlueTheme-buttonColor !important;
+ @apply bg-transparent border border-blue-600 text-blue-600 !important;
}
diff --git a/frontend/src/helpers/dataFormatter.js b/frontend/src/helpers/dataFormatter.js
index 66233b0..d11476e 100644
--- a/frontend/src/helpers/dataFormatter.js
+++ b/frontend/src/helpers/dataFormatter.js
@@ -40,6 +40,25 @@ export default {
},
+ usersManyListFormatter(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => item.firstName)
+ },
+ usersOneListFormatter(val) {
+ if (!val) return ''
+ return val.firstName
+ },
+ usersManyListFormatterEdit(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => {
+ return {id: item.id, label: item.firstName}
+ });
+ },
+ usersOneListFormatterEdit(val) {
+ if (!val) return ''
+ return {label: val.firstName, id: val.id}
+ },
+
rolesManyListFormatter(val) {
@@ -126,6 +145,48 @@ export default {
+ suppliersManyListFormatter(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => item.name)
+ },
+ suppliersOneListFormatter(val) {
+ if (!val) return ''
+ return val.name
+ },
+ suppliersManyListFormatterEdit(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => {
+ return {id: item.id, label: item.name}
+ });
+ },
+ suppliersOneListFormatterEdit(val) {
+ if (!val) return ''
+ return {label: val.name, id: val.id}
+ },
+
+
+
+ tagsManyListFormatter(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => item.name)
+ },
+ tagsOneListFormatter(val) {
+ if (!val) return ''
+ return val.name
+ },
+ tagsManyListFormatterEdit(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => {
+ return {id: item.id, label: item.name}
+ });
+ },
+ tagsOneListFormatterEdit(val) {
+ if (!val) return ''
+ return {label: val.name, id: val.id}
+ },
+
+
+
productsManyListFormatter(val) {
if (!val || !val.length) return []
return val.map((item) => item.name)
@@ -147,24 +208,7 @@ export default {
- product_variantsManyListFormatter(val) {
- if (!val || !val.length) return []
- return val.map((item) => item.sku)
- },
- product_variantsOneListFormatter(val) {
- if (!val) return ''
- return val.sku
- },
- product_variantsManyListFormatterEdit(val) {
- if (!val || !val.length) return []
- return val.map((item) => {
- return {id: item.id, label: item.sku}
- });
- },
- product_variantsOneListFormatterEdit(val) {
- if (!val) return ''
- return {label: val.sku, id: val.id}
- },
+
@@ -191,30 +235,68 @@ export default {
-
-
-
-
-
-
- suppliersManyListFormatter(val) {
+ order_itemsManyListFormatter(val) {
if (!val || !val.length) return []
- return val.map((item) => item.name)
+ return val.map((item) => item.product_name)
},
- suppliersOneListFormatter(val) {
+ order_itemsOneListFormatter(val) {
if (!val) return ''
- return val.name
+ return val.product_name
},
- suppliersManyListFormatterEdit(val) {
+ order_itemsManyListFormatterEdit(val) {
if (!val || !val.length) return []
return val.map((item) => {
- return {id: item.id, label: item.name}
+ return {id: item.id, label: item.product_name}
});
},
- suppliersOneListFormatterEdit(val) {
+ order_itemsOneListFormatterEdit(val) {
if (!val) return ''
- return {label: val.name, id: val.id}
+ return {label: val.product_name, id: val.id}
},
+
+ paymentsManyListFormatter(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => item.transaction_ref)
+ },
+ paymentsOneListFormatter(val) {
+ if (!val) return ''
+ return val.transaction_ref
+ },
+ paymentsManyListFormatterEdit(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => {
+ return {id: item.id, label: item.transaction_ref}
+ });
+ },
+ paymentsOneListFormatterEdit(val) {
+ if (!val) return ''
+ return {label: val.transaction_ref, id: val.id}
+ },
+
+
+
+ shipmentsManyListFormatter(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => item.tracking_number)
+ },
+ shipmentsOneListFormatter(val) {
+ if (!val) return ''
+ return val.tracking_number
+ },
+ shipmentsManyListFormatterEdit(val) {
+ if (!val || !val.length) return []
+ return val.map((item) => {
+ return {id: item.id, label: item.tracking_number}
+ });
+ },
+ shipmentsOneListFormatterEdit(val) {
+ if (!val) return ''
+ return {label: val.tracking_number, id: val.id}
+ },
+
+
+
+
}
diff --git a/frontend/src/menuAside.ts b/frontend/src/menuAside.ts
index b805705..2049205 100644
--- a/frontend/src/menuAside.ts
+++ b/frontend/src/menuAside.ts
@@ -37,7 +37,7 @@ const menuAside: MenuAsideItem[] = [
label: 'Customers',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiAccountGroup' in icon ? icon['mdiAccountGroup' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ icon: 'mdiAccountMultiple' in icon ? icon['mdiAccountMultiple' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
permissions: 'READ_CUSTOMERS'
},
{
@@ -45,32 +45,56 @@ const menuAside: MenuAsideItem[] = [
label: 'Categories',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiShape' in icon ? icon['mdiShape' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ icon: 'mdiFolder' in icon ? icon['mdiFolder' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
permissions: 'READ_CATEGORIES'
},
+ {
+ href: '/suppliers/suppliers-list',
+ label: 'Suppliers',
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ icon: 'mdiTruck' in icon ? icon['mdiTruck' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ permissions: 'READ_SUPPLIERS'
+ },
+ {
+ href: '/tags/tags-list',
+ label: 'Tags',
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ icon: 'mdiTagMultiple' in icon ? icon['mdiTagMultiple' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ permissions: 'READ_TAGS'
+ },
{
href: '/products/products-list',
label: 'Products',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiPackage' in icon ? icon['mdiPackage' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ icon: 'mdiCube' in icon ? icon['mdiCube' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
permissions: 'READ_PRODUCTS'
},
{
- href: '/product_variants/product_variants-list',
- label: 'Product variants',
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- icon: 'mdiTagMultiple' in icon ? icon['mdiTagMultiple' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
- permissions: 'READ_PRODUCT_VARIANTS'
- },
- {
- href: '/inventory/inventory-list',
- label: 'Inventory',
+ href: '/inventory_movements/inventory_movements-list',
+ label: 'Inventory movements',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
icon: 'mdiWarehouse' in icon ? icon['mdiWarehouse' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
- permissions: 'READ_INVENTORY'
+ permissions: 'READ_INVENTORY_MOVEMENTS'
+ },
+ {
+ href: '/reviews/reviews-list',
+ label: 'Reviews',
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ icon: 'mdiStar' in icon ? icon['mdiStar' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ permissions: 'READ_REVIEWS'
+ },
+ {
+ href: '/discounts/discounts-list',
+ label: 'Discounts',
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ icon: 'mdiTag' in icon ? icon['mdiTag' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ permissions: 'READ_DISCOUNTS'
},
{
href: '/orders/orders-list',
@@ -85,7 +109,7 @@ const menuAside: MenuAsideItem[] = [
label: 'Order items',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiCartPlus' in icon ? icon['mdiCartPlus' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ icon: 'mdiFormatListBulleted' in icon ? icon['mdiFormatListBulleted' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
permissions: 'READ_ORDER_ITEMS'
},
{
@@ -101,16 +125,16 @@ const menuAside: MenuAsideItem[] = [
label: 'Shipments',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiTruck' in icon ? icon['mdiTruck' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ icon: 'mdiTruckDelivery' in icon ? icon['mdiTruckDelivery' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
permissions: 'READ_SHIPMENTS'
},
{
- href: '/suppliers/suppliers-list',
- label: 'Suppliers',
+ href: '/returns/returns-list',
+ label: 'Returns',
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- icon: 'mdiFactory' in icon ? icon['mdiFactory' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
- permissions: 'READ_SUPPLIERS'
+ icon: 'mdiArchiveArrowDown' in icon ? icon['mdiArchiveArrowDown' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
+ permissions: 'READ_RETURNS'
},
{
href: '/profile',
diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx
index 03b96b7..d38bfbe 100644
--- a/frontend/src/pages/_app.tsx
+++ b/frontend/src/pages/_app.tsx
@@ -149,10 +149,10 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) {
setStepsEnabled(false);
};
- const title = 'StoreOps Manager'
- const description = "Manage products, inventory, orders, customers, and payments with Admin and Staff roles."
+ const title = 'Store Operations Manager'
+ const description = "Store Operations Manager for catalog and full order lifecycle with products, customers, payments, and reporting."
const url = "https://flatlogic.com/"
- const image = "https://project-screens.s3.amazonaws.com/screenshots/37379/app-hero-20260112-114826.png"
+ const image = "https://project-screens.s3.amazonaws.com/screenshots/37384/app-hero-20260112-145856.png"
const imageWidth = '1920'
const imageHeight = '960'
diff --git a/frontend/src/pages/categories/[categoriesId].tsx b/frontend/src/pages/categories/[categoriesId].tsx
index 6a718bc..21ea48e 100644
--- a/frontend/src/pages/categories/[categoriesId].tsx
+++ b/frontend/src/pages/categories/[categoriesId].tsx
@@ -40,6 +40,90 @@ const EditCategories = () => {
const initVals = {
+ 'name': '',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ description: '',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ parent: null,
+
+
+
+
+
}
const [initialValues, setInitialValues] = useState(initVals)
@@ -91,6 +175,151 @@ const EditCategories = () => {
>
diff --git a/frontend/src/pages/categories/categories-view.tsx b/frontend/src/pages/categories/categories-view.tsx
index 23ecd0c..e1c5e92 100644
--- a/frontend/src/pages/categories/categories-view.tsx
+++ b/frontend/src/pages/categories/categories-view.tsx
@@ -55,6 +55,139 @@ const CategoriesView = () => {