Source: routes/sets/index.js

  1. import style from './style.css';
  2. import {useState, useEffect} from "preact/hooks";
  3. import {useConnectivity} from "../../context/online_context";
  4. import Save_Entry from '../../components/save_entry';
  5. import StripSettings from '../../components/strip_settings';
  6. import SystemControls from '../../components/system_settings';
  7. import { getPatternList } from '../../utils/api';
  8. /**
  9. * @brief Generates the main settings page for the settings route.
  10. *
  11. * @returns The Settings UI element.
  12. */
  13. const Settings = () => {
  14. // Object that returns if the app is connected to the device.
  15. const { isConnected } = useConnectivity();
  16. // Stores the list of patterns obtained from the device.
  17. const [patterns, setPatterns] = useState([{index: 0, name: "None"}])
  18. // Toggle state for showing the advanced settings
  19. const [showAdvanced, setShowAdvanced] = useState(false);
  20. /**
  21. * @brief Obtains the list of patterns from the NanoLux device.
  22. */
  23. useEffect(() => {
  24. if (isConnected) {
  25. getPatternList()
  26. .then(data => setPatterns(data))
  27. .then();
  28. }
  29. }, [isConnected])
  30. return (
  31. <div className={style.settingsPage} role='main' id='settings-page'>
  32. {/* BASIC SETTINGS */}
  33. {!showAdvanced && (
  34. <div className={style.basicSection} id='basic-settings' role='region' aria-label='Basic device settings'>
  35. <h2 id='basic-settings-label' style={{ fontSize: '1.6rem', fontWeight: 'bold' }}>Pattern Settings</h2>
  36. <br /><br />
  37. <StripSettings patterns={patterns} advanced={false} />
  38. </div>
  39. )}
  40. {/* FULL SETTINGS */}
  41. {showAdvanced && (
  42. <div className={style.advancedSection} id='advanced-settings' role='region' aria-label='Advanced device settings'>
  43. <div className={style.advancedLeft} role='region' aria-labelledby='advanced-patterns-label'>
  44. <h2 id='advanced-patterns-label' style={{ fontSize: '1.6rem', fontWeight: 'bold' }}>Pattern Settings</h2>
  45. <br /><br />
  46. <StripSettings patterns={patterns} advanced={true} />
  47. </div>
  48. <div className={style.advancedRight} role='region' aria-labelledby='advanced-system-label'>
  49. <h2 id='advanced-system-label' style={{ fontSize: '1.6rem', fontWeight: 'bold' }}>System Settings</h2>
  50. <br /><br /><br />
  51. <SystemControls />
  52. <hr />
  53. <br />
  54. <div className={style.background0}>
  55. <Save_Entry name="Default Pattern" idx="0" />
  56. </div>
  57. <div className={style.background1}>
  58. <Save_Entry name="Saved Pattern 1" idx="1" />
  59. </div>
  60. <div className={style.background2}>
  61. <Save_Entry name="Saved Pattern 2" idx="2" />
  62. </div>
  63. </div>
  64. </div>
  65. )}
  66. {/* ADVANCED TOGGLE BUTTON */}
  67. <button
  68. className={style.advancedToggle}
  69. onClick={() => setShowAdvanced(!showAdvanced)}
  70. aria-expanded={showAdvanced}
  71. aria-controls='basic-settings advanced-settings'
  72. >
  73. {showAdvanced ? 'Hide Advanced' : 'Show Advanced'}
  74. </button>
  75. </div>
  76. );
  77. };
  78. export default Settings;