Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Help Modal for Keyboard Shortcuts and Documentation Link in Web App #154

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

noczero
Copy link

@noczero noczero commented Sep 20, 2024

What is this?

This pull request introduces a Help Modal feature to the web application. The motivation behind this addition is to provide users with an easy way to access keyboard shortcuts and relevant documentation links directly within the application. This enhancement aims to improve user experience by making navigation and functionality more intuitive and accessible.

Changes

Added Features:

  1. New Components in HelpModal.tsx:
    • HelpModal: A modal component that displays keyboard shortcuts and documentation links.
    • ShortcutItem: A sub-component to render individual shortcut items within the modal.

Code Changes:

  1. In HelpModal.tsx:

    • Created a new file HelpModal.tsx to implement the Help Modal component.
    • The modal includes sections for keyboard shortcuts and documentation links.
    • Added event listeners to handle clicks outside the modal to close it.
  2. In MediaView.tsx:

    • Imported the HelpModal component.
    • Integrated the HelpModal component within the MediaView component.
    • Added a new hotkey 'h' to toggle the Help Modal.
    • Updated state management to handle the visibility of the Help Modal.
  3. In single-view-store.ts:

    • Added a new state variable showHelp to manage the visibility of the Help Modal.
    • Introduced a new setter method setShowHelp to update the showHelp state.

Demo

add-modal-help-for-home-gallery

demo-add-help-modal-responsive-hidden

Context

  • N/A

@xemle
Copy link
Owner

xemle commented Sep 20, 2024

Hi @noczero

thank you so much for your nice PR and your demo. The demo and code looks good so far. I will check it in detail the next days and let you know.

Great work! I am looking forward to merge your PR

@noczero
Copy link
Author

noczero commented Sep 21, 2024

Yeah, no worries mate!
Happy to contribute!

@@ -203,7 +209,8 @@ export const MediaView = () => {
</div>
{ showDetails &&
<div className="md:flex-shrink-0 md:w-90">
<Details entry={current} dispatch={dispatch} />
<Details entry={current} dispatch={dispatch}/>
<HelpModal showHelp={showHelp} setShowHelp={setShowHelp} dispatch={dispatch}/>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be better to pass there real mappings also instead of hardcoded strings.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this one: const hotkeysToAction = {

Copy link
Author

@noczero noczero Sep 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good points. But I don't think it's necessary as it only has some important shortcuts.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe right now yes, but also there is introduced "plugins" so I think there will be extendable shortcuts list and hardcoded help will be useless.

Copy link
Author

@noczero noczero Sep 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have you read the Plugin documentation?

Extending the web application is not yet supported. This feature is planned for the future.

So yeah, I don't think there's anything useless here, as shortcuts are a built-in feature in the web app package.

Talking about plugin, to implement a plugin design pattern in React is feasible and can be approached by creating a wrapper component that encapsulates the plugin's logic and functionality.

The wrapper acts as a higher-order component or context provider, managing the plugin’s lifecycle, configuration, and behavior.

This approach allows you to inject plugins into the React component tree while maintaining separation of concerns.

Queation is, where is the best place to put the wrapper?

<div className="flex flex-col md:flex-row w-full p-5 md:space-x-4 dark:text-gray-200">
<div className="flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<div className="flex flex-col space-y-3 w-full self-start">
<ShortcutItem label="Next" keys={['Right', '/', 'k', '/', 'Space']} />

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All this text become outdated after any changes 🤷‍♂️

@noczero noczero force-pushed the add-help-modal branch 2 times, most recently from 429d73a to ee1889d Compare September 29, 2024 02:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants