Actualiser src/features/menu/index.jsx
Deploy to home / deploy (push) Successful in 11s

This commit is contained in:
cvancau
2026-08-09 22:34:15 +02:00
parent 46a046e215
commit f0880a9be5
+60 -97
View File
@@ -188,9 +188,7 @@ export default function Menu(props) {
<div className="my-1 flex flex-col items-center space-y-2"> <div className="my-1 flex flex-col items-center space-y-2">
<button <button
className="btn bg-indigo-600 text-white hover:bg-indigo-700 w-full font-semibold" className="btn bg-indigo-600 text-white hover:bg-indigo-700 w-full font-semibold"
onClick={() => { onClick={() => {requestCurrentPatchDump();}}
requestCurrentPatchDump();
}}
> >
📥 Import from KORG 📥 Import from KORG
</button> </button>
@@ -199,129 +197,100 @@ export default function Menu(props) {
{/* CONTENEUR DES BOUTONS D'ACTIONS */} {/* CONTENEUR DES BOUTONS D'ACTIONS */}
<div className="my-1"> <div className="my-1">
<div className="text-xs font-semibold text-gray-500 uppercase mb-1"> <div className="text-xs font-semibold text-gray-500 uppercase mb-1">PATCHS</div>
Patch <div className="grid grid-cols-3 gap-1">
<button
className="btn w-full"
onClick={() => dispatch(parameterRefreshAll())}
>New
</button>
<button
className="btn w-full"
onClick={() => fileRef.current.click()}
>Load
</button>
<button
className="btn w-full"
onClick={() => {
download(
return_file_from_store(state),
'microKORG_patch.syx',
'application/octet-binary'
);
}}
>Save
</button>
</div> </div>
<div className="grid grid-cols-3 gap-1"> <input
<button className="hidden"
className="btn w-full" type="file"
onClick={() => dispatch(parameterRefreshAll())} accept=".syx"
> ref={fileRef}
New onChange={(e) => loadFile(e.target.files[0])}
</button> />
<button
className="btn w-full"
onClick={() => fileRef.current.click()}
>
Load
</button>
<button
className="btn w-full"
onClick={() => {
download(
return_file_from_store(state),
'microKORG_patch.syx',
'application/octet-binary'
);
}}
>
Save
</button>
</div> </div>
<input
className="hidden"
type="file"
accept=".syx"
ref={fileRef}
onChange={(e) => loadFile(e.target.files[0])}
/>
</div>
{/* liste single,multiple,vocoder */} {/* liste single,multiple,vocoder */}
<div className="patch-settings"> <div className="patch-settings">
<Select <Select
className="w-full select" className="w-full select"
value={state.patch.mode} value={state.patch.mode}
list={[ list={[
{ value: 'Single' }, { value: 'Single' },
{ value: 'Multiple' }, { value: 'Multiple' },
{ value: 'Vocoder' }, { value: 'Vocoder' },
]} ]}
onChange={(value) => { onChange={(value) => {
dispatch( dispatch(
parameterUpdated({ parameterUpdated({
id: 'patch', id: 'patch',
changes: { mode: value }, changes: { mode: value },
}) })
); );
}} }}
/> />
</div>
</div> </div>
{/* 2 boutons Editor / Memory */}
<div className="my-1 w-full">
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">Pages</div>
<div className="flex gap-1 w-full">
<button
className={props.page === 'editor' ? 'btn btn-active w-1/2' : 'btn w-1/2'}
onClick={() => props.setPage('editor')}
>
Editor
</button>
<button
className={props.page === 'memory' ? 'btn btn-active w-1/2' : 'btn w-1/2'}
onClick={() => props.setPage('memory')}
>
Memory
</button>
</div>
</div> </div>
{/* Choix Timbre 1, Timbre 2, Vocoder, Arp/FX */} {/* Choix Timbre 1, Timbre 2, Vocoder, Arp/FX */}
<div className="my-1 w-full"> <div className="my-1 w-full">
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">
TIMBRES <div className="text-xs font-semibold text-gray-500 uppercase mb-1">TIMBRES</div>
</div>
<div className="grid grid-cols-4 gap-1"> <div className="grid grid-cols-4 gap-1">
<button <button
disabled={state.patch.mode === 'Vocoder'} disabled={state.patch.mode === 'Vocoder'}
className={activeTab === 'Timbre1' ? 'btn btn-active w-full' : 'btn w-full'} className={activeTab === 'Timbre1' ? 'btn btn-active w-full' : 'btn w-full'}
onClick={() => dispatch(parameterUpdateTab('Timbre1'))} onClick={() => dispatch(parameterUpdateTab('Timbre1'))}
> >Timbre1
Timbre1
</button> </button>
<button <button
disabled={state.patch.mode !== 'Multiple'} disabled={state.patch.mode !== 'Multiple'}
className={activeTab === 'Timbre2' ? 'btn btn-active w-full' : 'btn w-full'} className={activeTab === 'Timbre2' ? 'btn btn-active w-full' : 'btn w-full'}
onClick={() => dispatch(parameterUpdateTab('Timbre2'))} onClick={() => dispatch(parameterUpdateTab('Timbre2'))}
> >Timbre2
Timbre2
</button> </button>
<button <button
disabled={state.patch.mode !== 'Vocoder'} disabled={state.patch.mode !== 'Vocoder'}
className={activeTab === 'Vocoder' ? 'btn btn-active w-full' : 'btn w-full'} className={activeTab === 'Vocoder' ? 'btn btn-active w-full' : 'btn w-full'}
onClick={() => dispatch(parameterUpdateTab('Vocoder'))} onClick={() => dispatch(parameterUpdateTab('Vocoder'))}
> >Vocoder
Vocoder
</button> </button>
<button <button
className={activeTab === 'Effects' ? 'btn btn-active w-full' : 'btn w-full'} className={activeTab === 'Effects' ? 'btn btn-active w-full' : 'btn w-full'}
onClick={() => dispatch(parameterUpdateTab('Effects'))} onClick={() => dispatch(parameterUpdateTab('Effects'))}
> >Arp/FX
Arp/FX
</button> </button>
</div> </div>
</div> </div>
@@ -337,16 +306,10 @@ export default function Menu(props) {
<div className="text-gray-600 italic">Aucun flux détecté...</div> <div className="text-gray-600 italic">Aucun flux détecté...</div>
) : ( ) : (
midiLogs.map((log, idx) => ( midiLogs.map((log, idx) => (
<div <div key={idx} className={log.type === 'in' ? 'text-emerald-400' : 'text-cyan-400'}>{log.text}</div>
key={idx}
className={log.type === 'in' ? 'text-emerald-400' : 'text-cyan-400'}
>
{log.text}
</div>
)) ))
)} )}
<div ref={consoleBottomRef} /> <div ref={consoleBottomRef} /></div>
</div>
</div> </div>
<div className="w-full text-center text-xl font-semibold border-t border-gray-200 pt-2"> <div className="w-full text-center text-xl font-semibold border-t border-gray-200 pt-2">