Missing conflicts

main
Antonio De Lucreziis 2 years ago
parent 0b1dbaebbd
commit 5d8fbc9363

@ -4,25 +4,25 @@ import { Help } from './Help.jsx'
import { Icon } from './Icon.jsx' import { Icon } from './Icon.jsx'
export const HamburgerMenu = ({ onClose, mode, setMode, source, setSource, theme, setTheme }) => { export const HamburgerMenu = ({ onClose, mode, setMode, source, setSource, theme, setTheme }) => {
return ( return (
<div class="menu"> <div class="menu">
<div class="header"> <div class="header">
<div class="option-group"> <div class="option-group">
<button class="flat icon" onClick={onClose}> <button class="flat icon" onClick={onClose}>
<Icon name="close" /> <Icon name="close" />
</button> </button>
<button <button
class="icon" class="icon"
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')} onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
> >
<Icon name={theme === 'dark' ? 'dark_mode' : 'light_mode'} /> <Icon name={theme === 'dark' ? 'dark_mode' : 'light_mode'} />
</button> </button>
</div> </div>
<div class="item logo"> <div class="item logo">
<img src="logo-circuit-board.svg" alt="logo" /> / <span>Orario</span> <img src="logo-circuit-board.svg" alt="logo" /> / <span>Orario</span>
</div> </div>
</div> </div>
{/* <div class="options"> {/* <div class="options">
<div class="label">Gruppo Corsi</div> <div class="label">Gruppo Corsi</div>
<ComboBox <ComboBox
value={source} value={source}
@ -48,13 +48,13 @@ export const HamburgerMenu = ({ onClose, mode, setMode, source, setSource, theme
/> />
</div> </div>
<hr /> */} <hr /> */}
<div class="help"> <div class="help">
<h2> <h2>
<Icon name="info" /> <Icon name="info" />
Guida Guida
</h2> </h2>
<Help /> <Help />
</div> </div>
</div> </div>
) )
} }

@ -15,215 +15,186 @@ window._ = _
window.dataBuffer = {} window.dataBuffer = {}
const CALENDAR_IDS = { const CALENDAR_IDS = {
'anno-1': ['6308cfcb1df5cb026699ce32'], 'anno-1': ['6308cfcb1df5cb026699ce32'],
'anno-2': ['6308e2dc09352a0208fefdd9'], 'anno-2': ['6308e2dc09352a0208fefdd9'],
'anno-3': ['6308e42a1df5cb026699ced4'], 'anno-3': ['6308e42a1df5cb026699ced4'],
'magistrale': ['6308e8ea0c34e703bb1f7e85'], 'magistrale': ['6308e8ea0c34e703bb1f7e85'],
'tutti': [ 'tutti': [
'6308cfcb1df5cb026699ce32', '6308cfcb1df5cb026699ce32',
'6308e2dc09352a0208fefdd9', '6308e2dc09352a0208fefdd9',
'6308e42a1df5cb026699ced4', '6308e42a1df5cb026699ced4',
'6308e8ea0c34e703bb1f7e85', '6308e8ea0c34e703bb1f7e85',
], ],
} }
async function loadEventi(ids) { async function loadEventi(ids) {
const calendari = await Promise.all( const calendari = await Promise.all(
ids.map(async id => { ids.map(async id => {
// Almost directly copy-pasted from Chrome Dev Tools // Almost directly copy-pasted from Chrome Dev Tools
const req = await fetch( const req = await fetch(
'https://apache.prod.up.cineca.it/api/Impegni/getImpegniCalendarioPubblico', 'https://apache.prod.up.cineca.it/api/Impegni/getImpegniCalendarioPubblico',
{ {
headers: { headers: {
'content-type': 'application/json;charset=UTF-8', 'content-type': 'application/json;charset=UTF-8',
'sec-fetch-dest': 'empty', 'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors', 'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site', 'sec-fetch-site': 'same-site',
}, },
body: JSON.stringify({ body: JSON.stringify({
mostraImpegniAnnullati: true, mostraImpegniAnnullati: true,
mostraIndisponibilitaTotali: false, mostraIndisponibilitaTotali: false,
linkCalendarioId: id, linkCalendarioId: id,
clienteId: '628de8b9b63679f193b87046', clienteId: '628de8b9b63679f193b87046',
pianificazioneTemplate: false, pianificazioneTemplate: false,
dataInizio: '2022-10-02T22:00:00.000Z', dataInizio: '2022-10-02T22:00:00.000Z',
dataFine: '2022-10-07T22:00:00.000Z', dataFine: '2022-10-07T22:00:00.000Z',
}), }),
method: 'POST', method: 'POST',
mode: 'cors', mode: 'cors',
credentials: 'omit', credentials: 'omit',
} }
) )
return await req.json() return await req.json()
}) })
) )
<<<<<<< HEAD
if (ids.length === 1) { if (ids.length === 1) {
return calendari[0] return calendari[0]
} }
=======
// console.log(calendari)
if (ids.length === 1) {
return calendari[0]
}
>>>>>>> 41195462f176b27e142a78d7a63c072144135c5a
return _.uniqBy(_.concat(...calendari), 'id') return _.uniqBy(_.concat(...calendari), 'id')
} }
const App = ({}) => { const App = ({}) => {
<<<<<<< HEAD
// Data Sources // Data Sources
const [source, setSource] = useState('magistrale') const [source, setSource] = useState('magistrale')
const [eventi, setEventi] = useState([]) const [eventi, setEventi] = useState([])
// View Modes // View Modes
const [mode, setMode] = useState(MODE_COURSE) const [mode, setMode] = useState(MODE_COURSE)
=======
// Data Sources
const [source, setSource] = useState('anno-1')
const [eventi, setEventi] = useState([])
// View Modes // Selection
const [mode, setMode] = useState(MODE_WORKWEEK_GRID) const [selectedCourses, setSelectedCourses] = useState([])
>>>>>>> 41195462f176b27e142a78d7a63c072144135c5a const [hideOtherCourses, setHideOtherCourses] = useState(false)
// Selection // Menus
const [selectedCourses, setSelectedCourses] = useState([]) const [helpVisible, setHelpVisible] = useState(false)
const [hideOtherCourses, setHideOtherCourses] = useState(false) const [showMobileMenu, setShowMobileMenu] = useState(false)
// Menus
const [helpVisible, setHelpVisible] = useState(false)
const [showMobileMenu, setShowMobileMenu] = useState(false)
<<<<<<< HEAD
useEffect(async () => { useEffect(async () => {
const eventi = await loadEventi(CALENDAR_IDS[source]) const eventi = await loadEventi(CALENDAR_IDS[source])
=======
useEffect(async () => {
console.log('source changed')
const eventi = await loadEventi(CALENDAR_IDS[source])
>>>>>>> 41195462f176b27e142a78d7a63c072144135c5a
window.dataBuffer[source] = eventi window.dataBuffer[source] = eventi
setEventi(eventi) setEventi(eventi)
}, [source]) }, [source])
const groupIds = new Set(eventi.map(e => e.nome)) const groupIds = new Set(eventi.map(e => e.nome))
const toolOverlayVisible = const toolOverlayVisible =
selectedCourses.length > 0 && selectedCourses.filter(id => groupIds.has(id)).length > 0 selectedCourses.length > 0 && selectedCourses.filter(id => groupIds.has(id)).length > 0
<<<<<<< HEAD
useEffect(() => { useEffect(() => {
const groupIds = new Set(eventi.map(e => e.nome)) const groupIds = new Set(eventi.map(e => e.nome))
=======
useEffect(() => { if (
console.log('course length changed') selectedCourses.length === 0 ||
const groupIds = new Set(eventi.map(e => e.nome)) selectedCourses.filter(id => groupIds.has(id)).length === 0
>>>>>>> 41195462f176b27e142a78d7a63c072144135c5a ) {
setHideOtherCourses(false)
if ( }
selectedCourses.length === 0 || }, [eventi, selectedCourses.length])
selectedCourses.filter(id => groupIds.has(id)).length === 0
) { const [theme, setTheme] = useState(
setHideOtherCourses(false) localStorage.getItem('theme') ??
} (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
}, [eventi, selectedCourses.length]) )
const [theme, setTheme] = useState( document.body.classList.toggle('dark-mode', theme === 'dark')
localStorage.getItem('theme') ?? localStorage.setItem('theme', theme)
(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
) return (
<>
document.body.classList.toggle('dark-mode', theme === 'dark') <Toolbar
localStorage.setItem('theme', theme) {...{
mode,
return ( setMode,
<> source,
<Toolbar setSource,
{...{ onShowMenu: () => setShowMobileMenu(true),
mode, onHelp: () => setHelpVisible(true),
setMode, theme,
source, setTheme,
setSource, }}
onShowMenu: () => setShowMobileMenu(true), />
onHelp: () => setHelpVisible(true), <Optionbar
theme, {...{
setTheme, mode,
}} setMode,
/> source,
<Optionbar setSource,
{...{ onHelp: () => setHelpVisible(true),
mode, }}
setMode, />
source, <EventsView
setSource, mode={mode}
onHelp: () => setHelpVisible(true), selection={selectedCourses}
}} setSelection={setSelectedCourses}
/> hideOtherCourses={hideOtherCourses}
<EventsView start={new Date(2022, 10, 3)}
mode={mode} events={eventi.map(({ nome, dataInizio, dataFine, docenti, aule }) => ({
selection={selectedCourses} id: nome,
setSelection={setSelectedCourses} name: _.split(nome, '-', 1)[0].trim(),
hideOtherCourses={hideOtherCourses} start: new Date(dataInizio),
start={new Date(2022, 10, 3)} end: new Date(dataFine),
events={eventi.map(({ nome, dataInizio, dataFine, docenti, aule }) => ({ docenti: docenti.map(({ nome, cognome }) =>
id: nome, _.startCase(_.lowerCase(nome) + ' ' + _.lowerCase(cognome))
name: _.split(nome, '-', 1)[0].trim(), ),
start: new Date(dataInizio), aula: _.startCase(aule[0].codice.toLowerCase()).replace(
end: new Date(dataFine), /([A-Z]) ([1-9])/,
docenti: docenti.map(({ nome, cognome }) => '$1$2'
_.startCase(_.lowerCase(nome) + ' ' + _.lowerCase(cognome)) ),
), }))}
aula: _.startCase(aule[0].codice.toLowerCase()).replace( />
/([A-Z]) ([1-9])/, {toolOverlayVisible && (
'$1$2' <ToolOverlay
), visibility={hideOtherCourses}
}))} toggleVisibility={() => setHideOtherCourses(s => !s)}
/> onClose={() => {
{toolOverlayVisible && ( setSelectedCourses([])
<ToolOverlay setHideOtherCourses(false)
visibility={hideOtherCourses} }}
toggleVisibility={() => setHideOtherCourses(s => !s)} />
onClose={() => { )}
setSelectedCourses([]) {showMobileMenu && (
setHideOtherCourses(false) <HamburgerMenu
}} {...{
/> mode,
)} setMode,
{showMobileMenu && ( source,
<HamburgerMenu setSource,
{...{ theme,
mode, setTheme,
setMode, onClose: () => {
source, setShowMobileMenu(false)
setSource, },
theme, }}
setTheme, />
onClose: () => { )}
setShowMobileMenu(false) {helpVisible && (
}, <Popup
}} title={
/> <>
)} <Icon name="info" /> Guida
{helpVisible && ( </>
<Popup }
title={ onClose={() => setHelpVisible(false)}
<> >
<Icon name="info" /> Guida <Help />
</> </Popup>
} )}
onClose={() => setHelpVisible(false)} </>
> )
<Help />
</Popup>
)}
</>
)
} }
render(<App />, document.body) render(<App />, document.body)

Loading…
Cancel
Save