Giter VIP home page Giter VIP logo

telestion-client's People

Contributors

dependabot[bot] avatar fussel178 avatar jantischhoefer avatar leecemin avatar pklaschka avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

jantischhoefer

telestion-client's Issues

Bug [Win 10]: `confirm()` when resetting configuration puts window in intermediate "unfocused" state

What happens

Hi9MzZhYop.mp4

Upon hitting the confirm() of the widget config reset, the inputs become "unfocusable" until one tabs out of the window and back in (or pressing the Windows key twice)

Steps to reproduce

  1. Run client from https://github.com/wuespace/telestion-project-daedalus2/releases/tag/v0.11.2 on Windows 10
  2. Log in (since this version doesn't connect to a server, no password is necessary => type any char and log in)
  3. Click Profile PictureReset configuration
  4. Click Ok (the window "reloads")
  5. Try to focus / click on some text input in the login form (nothing happens)
  6. Press the Windows key twice (thus, "defocusing" and "refocusing" the window)
  7. Try (5.) again → now it works again

GitHub Action for template tests

Write an action that tests the generation and build of a Telestion-Client generated PSC via the telestion-client-cli.
An example workflow could look like:

  1. Setup node.
  2. Install tc-cli globally.
  3. Initialize a PSC.
  4. Go into the PSC and build it.
  5. Upload the build artifacts.

Like a "full" end-2-end test 😉

i18n support

What do you think about language support by the front-end?
Is it planned and if so, when will this be implemented? :)
If it is not planned what do you think about translations in general?

I know this is more relevant for the single subprojects however the core could already provide general functionality.

Support for new template-telestion-application

Feature Request

Summary

Add support for the new directory structure in the template-telestion-application.

Details

As described below, things we need to do in the CLI:

  • Detect the core and gui/README.md folder structure. (a simple "directory exists" check should suffice)
  • Delete the gui/README.md.
  • Copy the template files into the guidirectory.
  • Change directory into the gui folder.
  • Do the rest of the initialization steps. (Install development dependencies, ...)
  • Skip the git init step.
  • Change the commit message to feat: Initialized Telestion Frontend (or something else)

Add branding for more reach to client software

This could for example be a loading screen.
At least the name Telestion should appear somewhere in the gui, e.g. in the header, to let people know which software it is, when they see screenshots,

Build pipeline changes

Tools/Features that have to be updated:

  • pnpm
  • storybook
  • prettier/pretty-quick
  • husky
  • chromatic
  • eslint
  • release-please
  • jest
  • fliegdoc

Parcel replacements:

  • parcel
  • parcel-typescript
  • parcel-react

Responsive header behavior

Right now, the header basically collapses for small screen widths. The Spectrum Design Guidelines do document the suggested behavior. We should align our library / components with their documentation / proposed solution.

Update `README.md`

Some aspects of the repo's README.md have become outdated.

We should probably fix wrong and improve missing information (such as missing packages in the Project Structure documentation.

CustomLoginPage.routing is undefined

Example code to reproduce (from template):

import {
	LoginPage as TCLoginPage,
	LoginTitle,
	LoginLogo,
	LoginForm,
    LoginDescription
} from "@wuespace/telestion-client-common";

export function LoginPage(...props: any) {
	return (
		<TCLoginPage {...props}>
			<LoginLogo />
			<LoginTitle />
			<LoginDescription />
			<LoginForm initialServerURL="http://localhost:9870/bridge" />
		</TCLoginPage>
	);
}

Easiest Workaround:

Add the following line below all other code in that file:

LoginPage.routing = TCLoginPage.routing;

This needs to get adjusted in all doc comments (probably all overall usages of <LoginPage> or <TCLoginPage>), as well.

Data Value
Affected versions >=0.6.0

Widget `ConfigControls`

We already have the types for our abstraction layer for widget-specific configuration. Especially for the current development in the Daedalus 2 project, it would be great if we could add its implementation soon. 😃

For the types, please see

export interface BaseConfigControlsProps<P extends GenericProps = GenericProps>
.

Within the documentation of the types, there's even a small example of what we thought about how they should be used:

function ConfigControls({
  currentProps, onUpdate
}: ConfigControlsProps): ReactNode {
  // local state to not "flood" global store with changes (performance)
  const [value, setValue] = useState(currentProps.value);
  return (
    <div>
      <input type="text" value={value} onChange={event => setValue(event.target.value)} />
      <button onClick={() => onUpdate({ value })} />
    </div>
  );
}

I genuinely believe that this is the right amount of abstraction for implementing widget-specific configuration since it allows widget developers to easily add dynamically configurable properties to their widgets without sacrificing the depth of configuration options (after all, any JSONSerializable configuration can be passed to onUpdate).

Post release

Post release

Things to do after the post release:

  • Integrate Cypress-Dashboard
  • publish fliegdoc static docs to Github Pages
  • add deep-scan and CodeQL github actions
  • fix and build macOS release on tags
  • add branch protection rules for branch master
  • move Vert.x Eventbus implementation into own repository and create own npm package
    (necessary changes in #194)

Fix release workflow

Fix the release workflow to be conform with the maintainer documentation for this project.
We need to test publishing in GitHub Actions via an NPM_TOKEN secret.

Extend mock server to support integration testing

Extend the mock server to support integration testing.

Useful functionalities:

  • Function to send messages and reply to received messages
  • Hooks to intercept receiving and sending messages
  • Hooks to intercept specific types of messages, manipulate them
  • "Message store" which holds all received and sent messages and which is clearable via a function
  • exposure of the sockjs and http server instance

Ideas and suggestions are welcome 😉

Wrong type for widget DB entry with configuration type widgets

Widgets, when generated, get added to the src/widgets/index.ts as their "source" type.

This, however, creates a type error if they extend Widget<SomeConfig> instead of Widget.

We should add them to the src/widgets/index.ts with an as Widget appendix to avoid this.

Dashboard editor

A mode which allows the creation and modification of dashboards in the common package.
Something like card a drag-and-drop editor and size manipulation.

Update Storybook packages and configuration

Please update the Storybook packages/components and their configuration.
Some parts of storybook have changed drastically, e.g. Create React App is now in a separate thread and the default PostCSS plugin is deprecated.

Widget Renderer improvements

Some possible improvements for the widget renderer in the next version:

  • allow reset of widget in config controls
  • store version of widget in persistent config to allow checks for breaking changes

Application Preferences Implementation

Within the planning stages of these libraries, we had already planned to support a generic way of declaring application preferences (as part of our core structure) which could, then, be used to allow Project-Specific-Client developers to easily add app-global settings that could still get rendered into one, unified (though grouped) settings page.

Here's an example of how using these APIs might look like:

            <Preferences>
                <Group name="Bildübertragungseinsetllungen">
                    <Variable key="Kameraname 1">
                    {
                        (val, setVal) => 
                            <input value={val} onChange={setVal} />
                    }
                    </Variable>
                    <Variable key="Kameraname 2">
                    {
                        (val, setVal) => 
                            <input value={val} onChange={setVal} />
                    }
                    </Variable>
                </Group>
            </Preferences>

As with #562, the goal is to provide a unified way of having preferences (in this case, application-wide), without losing the option of complexity, which is why every variable can be "as complex" as it needs to be (just pass a complex JSONSerializable object to setVal).

Still, everything rendered by this renderer can be put into the right spot (e.g., depending on the implementation, a unified settings page).

All in all, I believe that this approach provides both ease of use as well as the right amount of versatility. For really complex endeavors, of course, PSCs can still implement their own, individual, settings pages, but the combination of #562 and this should probably cover ~ 97 % of cases 😉

Why put it into the core, though?

While an implementation for a unified settings page should be put into common, the settings structure, by itself, is abstract and independent from the framework used (as long as React is used). This means that the components belonging to the overall concept (registering these messages, making them accessible in the application, etc.), by our definition, belong into core, since they could, just as well (with different implementations of the VariableRenderers, of course) be used in, e.g., React Native.

This idea's components that probably fit into common are "just"

  • A unified settings page that renders the overall layout of the settings page
  • Common Variable components (e.g., TextInputVariable) which cover the most typical variable types (text, number, color, ...)

References

https://github.com/wuespace/telestion-client/blob/28a85e8359b4f127a1bd956c9a14184d36e59034/packages/telestion-client-types/src/preferences.ts

https://github.com/wuespace/telestion-client/tree/ba323b41810aafc6df263899dac7d9ac7df597c9/packages/telestion-client-core/src/components/preferences

Missing `eslintConfig` in generated PSC `package.json`

The generated package.json for PSCs misses the "eslintConfig" field.

This results in a few weird behaviors when, e.g., using certain Typescript features (like Indexed Access Types).

To fix this, we need to add an eslintConfig field to the package.json. I suggest keeping to the CRA-template, meaning we'll need to add the following:

  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },

Type Error `TS2786` for `import('@wuespace/telestion-client-common').LoginDescription`

Currently, the <LoginDescription /> component produces a type error when added as a child of import('@wuespace/telestion-client-common').LoginPage:

$ tsc --noEmit
src/components/login-page.tsx:14:5 - error TS2786: 'LoginDescription' cannot be used as a JSX component.
  Its return type 'Element | ReactElement<any, string | ((props: any) => ReactElement<any, any> | null) | (new (props: any) => Component<any, any, any>
)>[]' is not a valid JSX element.
    Type 'ReactElement<any, string | ((props: any) => ReactElement<any, any> | null) | (new (props: any) => Component<any, any, any>)>[]' is missing th
e following properties from type 'Element': type, props, key

14              <LoginDescription />
                 ~~~~~~~~~~~~~~~~


Found 1 error.

The project still runs using tc-cli start, but, of course, the error is, still, annoying.

This issue also occurs in the RocketSound PSC: https://github.com/TelestionTeam/telestion-daedalus2-psc/tree/e36c0a614132235945141ba4cc147f0e74628356

Eventbus debug widget

Add an event bus debug widget for easier connection state inspection and bug fixing.
An implementation could look like:
image
image

Optional GitHub Actions for PSCs

Feature Request

Summary

Optional GitHub Actions on tc-cli init

Details

Can we give the template some predefined GitHub Actions and ask on initialization to install those in the generated PSC git repo?

For example:

Would you like to install predefined GitHub Actions?
> (yes/no)

These predefined GitHub Actions are already in these repositories:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.