- fixed typo;
- new version of menu topbar; - registration page - added automatic birth date population;
This commit is contained in:
@@ -47,3 +47,19 @@
|
|||||||
border-color: var(--menu-borderColor);
|
border-color: var(--menu-borderColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.topBar__menuCompanyItem {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.55rem 1rem 0.75rem 1rem;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
&[data-active="true"] {
|
||||||
|
color: var(--primary-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
margin-right: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -121,7 +121,7 @@ const Table = ({
|
|||||||
</label>
|
</label>
|
||||||
<RenderTable columns={columns} data={rows} setRowsFn={updateRows}/>
|
<RenderTable columns={columns} data={rows} setRowsFn={updateRows}/>
|
||||||
{!isEmpty(columns) && !shouldDisableNewRows
|
{!isEmpty(columns) && !shouldDisableNewRows
|
||||||
? <div className="addNewTableRow" onClick={addNewRow}>{__('Aggiungi una righa', 'gepafin')}</div>
|
? <div className="addNewTableRow" onClick={addNewRow}>{__('Aggiungi una riga', 'gepafin')}</div>
|
||||||
: null}
|
: null}
|
||||||
</>)
|
</>)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useRef } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { __ } from '@wordpress/i18n';
|
import { __ } from '@wordpress/i18n';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
@@ -7,7 +7,6 @@ import { storeSet, useStore, useTrackedStore } from '../../store';
|
|||||||
|
|
||||||
// components
|
// components
|
||||||
import { Menu } from 'primereact/menu';
|
import { Menu } from 'primereact/menu';
|
||||||
import { Avatar } from 'primereact/avatar';
|
|
||||||
import { intersection } from 'ramda';
|
import { intersection } from 'ramda';
|
||||||
|
|
||||||
const TopBarProfileMenu = ({ menuLeftRef }) => {
|
const TopBarProfileMenu = ({ menuLeftRef }) => {
|
||||||
@@ -15,7 +14,19 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
|
|||||||
const userData = useTrackedStore().main.userData();
|
const userData = useTrackedStore().main.userData();
|
||||||
const fulleName = `${userData.firstName} ${userData.lastName}`;
|
const fulleName = `${userData.firstName} ${userData.lastName}`;
|
||||||
const permissions = useStore().main.getPermissions();
|
const permissions = useStore().main.getPermissions();
|
||||||
|
const companies = useStore().main.companies();
|
||||||
|
const chosenCompanyId = useStore().main.chosenCompanyId()
|
||||||
|
const [companyItems, setCompanyItems] = useState([]);
|
||||||
|
const renderCompanyItem = (item) => (
|
||||||
|
<span className="topBar__menuCompanyItem"
|
||||||
|
onClick={chosenCompanyId === item.companyId ? () => {
|
||||||
|
} : switchCompany(item.companyId)}
|
||||||
|
data-id={item.companyId}
|
||||||
|
data-active={chosenCompanyId === item.companyId}>
|
||||||
|
<i className="pi pi-building-columns"></i>
|
||||||
|
{item.label}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
let items = [
|
let items = [
|
||||||
{
|
{
|
||||||
template: (item, options) => {
|
template: (item, options) => {
|
||||||
@@ -45,6 +56,11 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
|
|||||||
},
|
},
|
||||||
enable: !intersection(permissions, ['MANAGE_TENDERS']).length
|
enable: !intersection(permissions, ['MANAGE_TENDERS']).length
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: __('Seleziona azienda', 'gepafin'),
|
||||||
|
items: companyItems,
|
||||||
|
enable: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
separator: true,
|
separator: true,
|
||||||
enable: true
|
enable: true
|
||||||
@@ -59,6 +75,19 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
|
|||||||
}
|
}
|
||||||
].filter(o => o.enable);
|
].filter(o => o.enable);
|
||||||
|
|
||||||
|
const switchCompany = (id) => {
|
||||||
|
console.log('switchCompany');
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const items = companies.map(o => ({
|
||||||
|
label: o.companyName,
|
||||||
|
companyId: o.id,
|
||||||
|
template: renderCompanyItem
|
||||||
|
}));
|
||||||
|
setCompanyItems(items)
|
||||||
|
}, [companies])
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<Menu model={items} popup ref={menuLeftRef} id="topBar_profileMenu" className="topBar__menuProfile"/>
|
<Menu model={items} popup ref={menuLeftRef} id="topBar_profileMenu" className="topBar__menuProfile"/>
|
||||||
</>
|
</>
|
||||||
|
|||||||
48
src/layouts/DefaultLayout/components/AppTopbar/index.js
Normal file
48
src/layouts/DefaultLayout/components/AppTopbar/index.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import React, { useRef } from 'react';
|
||||||
|
import { __ } from '@wordpress/i18n';
|
||||||
|
|
||||||
|
// components
|
||||||
|
import { Toolbar } from 'primereact/toolbar';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import LogoIcon from '../../../../icons/LogoIcon';
|
||||||
|
import { IconField } from 'primereact/iconfield';
|
||||||
|
import { InputIcon } from 'primereact/inputicon';
|
||||||
|
import { InputText } from 'primereact/inputtext';
|
||||||
|
import { Badge } from 'primereact/badge';
|
||||||
|
import { Button } from 'primereact/button';
|
||||||
|
import TopBarProfileMenu from '../../../../components/TopBarProfileMenu';
|
||||||
|
|
||||||
|
const AppTopbar = () => {
|
||||||
|
const menuLeft = useRef(null);
|
||||||
|
|
||||||
|
const startContent = <Link to="/">
|
||||||
|
<LogoIcon/>
|
||||||
|
</Link>;
|
||||||
|
|
||||||
|
const endContent = <div className="topBar__endContent">
|
||||||
|
<IconField iconPosition="right">
|
||||||
|
<InputIcon className="pi pi-search"> </InputIcon>
|
||||||
|
<InputText v-model="value1" placeholder={__('Cerca', 'gepafin')} disabled={true}/>
|
||||||
|
</IconField>
|
||||||
|
<i className="pi pi-bell p-overlay-badge topBar__icon">
|
||||||
|
<Badge value="0"></Badge>
|
||||||
|
</i>
|
||||||
|
<i className="pi pi-envelope p-overlay-badge topBar__icon">
|
||||||
|
<Badge severity="danger"></Badge>
|
||||||
|
</i>
|
||||||
|
<Button
|
||||||
|
className="topBar__profileBtn"
|
||||||
|
outlined
|
||||||
|
onClick={(event) => menuLeft.current.toggle(event)} aria-controls="topBar_profileMenu" aria-haspopup>
|
||||||
|
<i className="pi pi-user"></i>
|
||||||
|
<i className="pi pi-chevron-down"></i>
|
||||||
|
</Button>
|
||||||
|
<TopBarProfileMenu menuLeftRef={menuLeft}/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
return(
|
||||||
|
<Toolbar start={startContent} end={endContent} className="topBar"/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AppTopbar;
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
|
||||||
import { __ } from '@wordpress/i18n';
|
import { __ } from '@wordpress/i18n';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
@@ -7,18 +6,10 @@ import { useLocation } from 'react-router-dom';
|
|||||||
import { useStore, storeSet } from '../../store';
|
import { useStore, storeSet } from '../../store';
|
||||||
|
|
||||||
// components
|
// components
|
||||||
import { Toolbar } from 'primereact/toolbar';
|
|
||||||
import { Button } from 'primereact/button';
|
|
||||||
import { IconField } from 'primereact/iconfield';
|
|
||||||
import { InputIcon } from 'primereact/inputicon';
|
|
||||||
import { InputText } from 'primereact/inputtext';
|
|
||||||
import { Badge } from 'primereact/badge';
|
|
||||||
import LogoIcon from '../../icons/LogoIcon';
|
|
||||||
import TopBarProfileMenu from '../../components/TopBarProfileMenu';
|
|
||||||
import AppSidebar from './components/AppSidebar';
|
import AppSidebar from './components/AppSidebar';
|
||||||
|
import AppTopbar from './components/AppTopbar';
|
||||||
|
|
||||||
const DefaultLayout = ({ children }) => {
|
const DefaultLayout = ({ children }) => {
|
||||||
const menuLeft = useRef(null);
|
|
||||||
const isError404 = useStore().main.isError404();
|
const isError404 = useStore().main.isError404();
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
|
|
||||||
@@ -26,34 +17,9 @@ const DefaultLayout = ({ children }) => {
|
|||||||
storeSet.main.isError404(false);
|
storeSet.main.isError404(false);
|
||||||
}, [location]);
|
}, [location]);
|
||||||
|
|
||||||
const startContent = <Link to="/">
|
|
||||||
<LogoIcon/>
|
|
||||||
</Link>;
|
|
||||||
|
|
||||||
const endContent = <div className="topBar__endContent">
|
|
||||||
<IconField iconPosition="right">
|
|
||||||
<InputIcon className="pi pi-search"> </InputIcon>
|
|
||||||
<InputText v-model="value1" placeholder={__('Cerca', 'gepafin')} disabled={true}/>
|
|
||||||
</IconField>
|
|
||||||
<i className="pi pi-bell p-overlay-badge topBar__icon">
|
|
||||||
<Badge value="2"></Badge>
|
|
||||||
</i>
|
|
||||||
<i className="pi pi-envelope p-overlay-badge topBar__icon">
|
|
||||||
<Badge severity="danger"></Badge>
|
|
||||||
</i>
|
|
||||||
<Button
|
|
||||||
className="topBar__profileBtn"
|
|
||||||
outlined
|
|
||||||
onClick={(event) => menuLeft.current.toggle(event)} aria-controls="topBar_profileMenu" aria-haspopup>
|
|
||||||
<i className="pi pi-user"></i>
|
|
||||||
<i className="pi pi-chevron-down"></i>
|
|
||||||
</Button>
|
|
||||||
<TopBarProfileMenu menuLeftRef={menuLeft}/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="wrapper">
|
<div className="wrapper">
|
||||||
<Toolbar start={startContent} end={endContent} className="topBar"/>
|
<AppTopbar/>
|
||||||
<div className="inner">
|
<div className="inner">
|
||||||
<AppSidebar/>
|
<AppSidebar/>
|
||||||
<main>
|
<main>
|
||||||
|
|||||||
@@ -76,10 +76,12 @@ const Registration = () => {
|
|||||||
|
|
||||||
const validateCallback = (data) => {
|
const validateCallback = (data) => {
|
||||||
if (data.status === 'SUCCESS') {
|
if (data.status === 'SUCCESS') {
|
||||||
const { codiceFiscale, firstName, lastName } = data.data;
|
const { codiceFiscale, firstName, lastName, dateOfBirth } = data.data;
|
||||||
|
const dateOfBirthObj = new Date(dateOfBirth);
|
||||||
setValue('codiceFiscale', codiceFiscale);
|
setValue('codiceFiscale', codiceFiscale);
|
||||||
setValue('firstName', firstName);
|
setValue('firstName', firstName);
|
||||||
setValue('lastName', lastName);
|
setValue('lastName', lastName);
|
||||||
|
setValue('birthDate', dateOfBirthObj);
|
||||||
} else {
|
} else {
|
||||||
errorMsgs.current.show([
|
errorMsgs.current.show([
|
||||||
{
|
{
|
||||||
@@ -183,6 +185,7 @@ const Registration = () => {
|
|||||||
|
|
||||||
<FormField
|
<FormField
|
||||||
type="datepicker"
|
type="datepicker"
|
||||||
|
disabled={true}
|
||||||
fieldName="birthDate"
|
fieldName="birthDate"
|
||||||
label={__('Data di nascita', 'gepafin')}
|
label={__('Data di nascita', 'gepafin')}
|
||||||
control={control}
|
control={control}
|
||||||
|
|||||||
Reference in New Issue
Block a user